package main import ( "errors" "testing" ) // codex plan-R1 2: a READ failure stops deploy; only a successful response // without app_default (an older console) skips the check. func TestDeployRegionPreflight(t *testing.T) { uk := &apiAppDefault{Region: "uk", Name: "P-uk", Effective: "uk", RegionKnown: true, PlacementKnown: true} fleet := &apiAppDefault{Region: "uk", Name: "P-uk", Effective: "fleet/acme", Reason: "fleet", RegionKnown: true, PlacementKnown: true} // The console reports a home app's region as the home's own code, never // "" (homeRegionOut), so naming the home equals the stored "". home := &apiAppDefault{Region: "ie", Name: "P-ie", Effective: "ie", RegionKnown: true, PlacementKnown: true} boom := errors.New("500 from console") cases := []struct { name string res apiRegionsResult err error asked string want string }{ {"no flag", apiRegionsResult{AppDefault: uk}, boom, "", ""}, {"equal", apiRegionsResult{AppDefault: uk}, nil, "uk", ""}, {"different", apiRegionsResult{AppDefault: uk}, nil, "ie", deployRegionMismatch("blog", "P-uk")}, {"older console", apiRegionsResult{}, nil, "ie", ""}, {"read failed", apiRegionsResult{}, boom, "ie", deployRegionUnreadable("blog", boom)}, {"fleet, stored equal", apiRegionsResult{AppDefault: fleet}, nil, "uk", ""}, {"fleet, stored different", apiRegionsResult{AppDefault: fleet}, nil, "ie", deployRegionMismatch("blog", "P-uk")}, // codex plan-R2 3: a 200 whose stored region could not be read. {"region unknown", apiRegionsResult{AppDefault: &apiAppDefault{RegionKnown: false, PlacementKnown: true}}, nil, "ie", deployRegionUnknown("blog")}, // Controller ruling: --region on a home app proceeds. {"home app, home named", apiRegionsResult{Default: "ie", AppDefault: home}, nil, "ie", ""}, {"home app, other named", apiRegionsResult{Default: "ie", AppDefault: home}, nil, "uk", deployRegionMismatch("blog", "P-ie")}, } for _, c := range cases { err := deployRegionPreflight(c.res, c.err, "blog", c.asked) got := "" if err != nil { got = err.Error() } if got != c.want { t.Errorf("%s: %q, want %q", c.name, got, c.want) } } } func TestAppRegionsNameOf(t *testing.T) { r := apiRegionsResult{Regions: []apiRegionEntry{{Code: "uk", Name: "UK · London"}, {Code: "ie"}}} for code, want := range map[string]string{"uk": "UK · London", "ie": "ie", "zz": "zz"} { if got := r.nameOf(code); got != want { t.Errorf("nameOf(%q) = %q, want %q", code, got, want) } } }