@@ -467,6 +467,111 @@ func TestApplyOverrides_Empty(t *testing.T) {
467467 }
468468}
469469
470+ func TestApplyOverrides_StringSlice (t * testing.T ) {
471+ cases := []struct {
472+ name string
473+ in string
474+ want []string
475+ }{
476+ {"single value" , "kv" , []string {"kv" }},
477+ {"multi value" , "kv,psql" , []string {"kv" , "psql" }},
478+ {"trims whitespace" , " kv , psql " , []string {"kv" , "psql" }},
479+ {"empty string yields empty slice" , "" , []string {}},
480+ }
481+ for _ , tc := range cases {
482+ t .Run (tc .name , func (t * testing.T ) {
483+ cfg := Default ()
484+ if err := ApplyOverrides (cfg , map [string ]string {
485+ "tx_index.indexer" : tc .in ,
486+ }); err != nil {
487+ t .Fatalf ("ApplyOverrides: %v" , err )
488+ }
489+ got := cfg .TxIndex .Indexer
490+ if len (got ) != len (tc .want ) {
491+ t .Fatalf ("indexer: got %v (len %d), want %v (len %d)" ,
492+ got , len (got ), tc .want , len (tc .want ))
493+ }
494+ for i := range got {
495+ if got [i ] != tc .want [i ] {
496+ t .Errorf ("indexer[%d]: got %q, want %q" , i , got [i ], tc .want [i ])
497+ }
498+ }
499+ if got == nil {
500+ t .Error ("indexer slice must be non-nil to render into TOML" )
501+ }
502+ })
503+ }
504+ }
505+
506+ func TestApplyOverrides_StringSliceRejectsEmptyEntries (t * testing.T ) {
507+ cases := []string {"kv,,psql" , ",kv" , "kv," , ",,," , "kv, ,psql" }
508+ for _ , in := range cases {
509+ t .Run (in , func (t * testing.T ) {
510+ cfg := Default ()
511+ err := ApplyOverrides (cfg , map [string ]string {
512+ "tx_index.indexer" : in ,
513+ })
514+ if err == nil {
515+ t .Fatalf ("expected error for input %q, got nil" , in )
516+ }
517+ })
518+ }
519+ }
520+
521+ func TestApplyOverrides_StringSliceOverwritesDefault (t * testing.T ) {
522+ cfg := Default ()
523+ if err := ApplyOverrides (cfg , map [string ]string {
524+ "tx_index.indexer" : "kv" ,
525+ }); err != nil {
526+ t .Fatalf ("ApplyOverrides: %v" , err )
527+ }
528+ if len (cfg .TxIndex .Indexer ) != 1 || cfg .TxIndex .Indexer [0 ] != "kv" {
529+ t .Errorf ("indexer: got %v, want [kv]" , cfg .TxIndex .Indexer )
530+ }
531+ }
532+
533+ func TestApplyOverrides_StringSliceRoundTripTOML (t * testing.T ) {
534+ dir := t .TempDir ()
535+
536+ cases := []struct {
537+ name string
538+ in string
539+ want []string
540+ }{
541+ {"non-empty list survives round-trip" , "kv,psql" , []string {"kv" , "psql" }},
542+ {"empty list survives round-trip as []" , "" , []string {}},
543+ }
544+ for _ , tc := range cases {
545+ t .Run (tc .name , func (t * testing.T ) {
546+ cfg := DefaultForMode (ModeFull )
547+ if err := ApplyOverrides (cfg , map [string ]string {
548+ "tx_index.indexer" : tc .in ,
549+ }); err != nil {
550+ t .Fatalf ("ApplyOverrides: %v" , err )
551+ }
552+ subdir := t .TempDir ()
553+ if err := WriteConfigToDir (cfg , subdir ); err != nil {
554+ t .Fatalf ("WriteConfigToDir: %v" , err )
555+ }
556+ loaded , err := ReadConfigFromDir (subdir )
557+ if err != nil {
558+ t .Fatalf ("ReadConfigFromDir: %v" , err )
559+ }
560+ got := loaded .TxIndex .Indexer
561+ if len (got ) != len (tc .want ) {
562+ t .Fatalf ("after round-trip: got %v (len %d), want %v (len %d)" ,
563+ got , len (got ), tc .want , len (tc .want ))
564+ }
565+ for i := range got {
566+ if got [i ] != tc .want [i ] {
567+ t .Errorf ("indexer[%d]: got %q, want %q" , i , got [i ], tc .want [i ])
568+ }
569+ }
570+ })
571+ }
572+ _ = dir
573+ }
574+
470575func TestResolveEnv (t * testing.T ) {
471576 cfg := Default ()
472577 t .Setenv ("SEI_CHAIN_MIN_GAS_PRICES" , "0.5usei" )
0 commit comments