package infra import ( "testing" ) func TestEnvRequire(t *testing.T) { t.Run("retorna valor cuando variable esta seteada", func(t *testing.T) { t.Setenv("ENV_REQUIRE_TEST_KEY", "myvalue") got, err := EnvRequire("ENV_REQUIRE_TEST_KEY") if err != nil { t.Fatalf("unexpected error: %v", err) } if got != "myvalue" { t.Errorf("expected myvalue, got %q", got) } }) t.Run("retorna error con mensaje descriptivo si variable no existe", func(t *testing.T) { got, err := EnvRequire("ENV_REQUIRE_DEFINITELY_NOT_SET_XYZ") if err == nil { t.Error("expected error for missing variable") } if got != "" { t.Errorf("expected empty string on error, got %q", got) } if err != nil && len(err.Error()) == 0 { t.Error("error message should not be empty") } }) t.Run("variable vacia se trata como no seteada", func(t *testing.T) { t.Setenv("ENV_REQUIRE_EMPTY_KEY", "") _, err := EnvRequire("ENV_REQUIRE_EMPTY_KEY") if err == nil { t.Error("expected error for empty variable") } }) } func TestEnvRequireAll(t *testing.T) { t.Run("retorna mapa con todos los valores cuando estan seteados", func(t *testing.T) { t.Setenv("REQUIRE_ALL_A", "alpha") t.Setenv("REQUIRE_ALL_B", "beta") got, err := EnvRequireAll([]string{"REQUIRE_ALL_A", "REQUIRE_ALL_B"}) if err != nil { t.Fatalf("unexpected error: %v", err) } if got["REQUIRE_ALL_A"] != "alpha" || got["REQUIRE_ALL_B"] != "beta" { t.Errorf("unexpected map: %v", got) } }) t.Run("acumula todos los errores de variables faltantes", func(t *testing.T) { _, err := EnvRequireAll([]string{"REQUIRE_ALL_MISSING_1", "REQUIRE_ALL_MISSING_2"}) if err == nil { t.Error("expected error") } msg := err.Error() if len(msg) == 0 { t.Error("expected non-empty error message") } }) t.Run("lista vacia retorna mapa vacio sin error", func(t *testing.T) { got, err := EnvRequireAll([]string{}) if err != nil { t.Fatalf("unexpected error: %v", err) } if len(got) != 0 { t.Errorf("expected empty map, got %v", got) } }) }