package core import ( "slices" "testing" ) func TestEnvs(t *testing.T) { db := EphemeralDb(t) if err := AddSource(db, "_"); err != nil { t.Fatal(err) } // Insert env if err := SetEnvs(db, "_", []string{"ONE=hello"}); err != nil { t.Fatal(err) } envs, err := GetEnvs(db, "_") if err != nil { t.Fatal(err) } if len(envs) != 1 { t.Fatal("expected 1 env") } if envs[0] != "ONE=hello" { t.Fatalf("Expected ONE=hello, got %s", envs[0]) } // Insert env with = in value if err := SetEnvs(db, "_", []string{"TWO=world=true"}); err != nil { t.Fatal(err) } envs, err = GetEnvs(db, "_") if err != nil { t.Fatal(err) } if len(envs) != 2 { t.Fatal("expected 2 envs") } slices.Sort(envs) // ONE > TWO if envs[1] != "TWO=world=true" { t.Fatalf("Expected TWO=world=true, got %s", envs[1]) } // Replace env if err := SetEnvs(db, "_", []string{"TWO=goodbye"}); err != nil { t.Fatal(err) } envs, err = GetEnvs(db, "_") if err != nil { t.Fatal(err) } if len(envs) != 2 { t.Fatal("expected 2 envs") } slices.Sort(envs) // ONE > TWO if envs[1] != "TWO=goodbye" { t.Fatalf("Expected TWO=goodbye, got %s", envs[1]) } // Insert is transactional on error if err := SetEnvs(db, "_", []string{"THREE=crowd", "FOUR"}); err == nil { t.Fatal("expected bad env insert to fail") } envs, err = GetEnvs(db, "_") if err != nil { t.Fatal(err) } if len(envs) != 2 { t.Fatal("expected 2 envs after failed insert") } slices.Sort(envs) // ONE > TWO if envs[0] != "ONE=hello" || envs[1] != "TWO=goodbye" { t.Fatalf("Expected ONE=hello and TWO=goodbye, got %v", envs) } // Delete env if err := SetEnvs(db, "_", []string{"ONE="}); err != nil { t.Fatal(err) } envs, err = GetEnvs(db, "_") if err != nil { t.Fatal(err) } if len(envs) != 1 { t.Fatal("expected 1 env after deletion") } if envs[0] != "TWO=goodbye" { t.Fatalf("Expected TWO=goodbye, got %s", envs[0]) } }