test(provider): тесты канонизации vIPConfigure (jsonencode-форма, пробелы, [{}], невалидный JSON)
This commit is contained in:
@@ -51,6 +51,35 @@ func TestFormatVipConfigure_Canonical(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Канонизация пользовательского ввода: terraform jsonencode сортирует ключи по алфавиту
|
||||||
|
// (count раньше name), а канон у нас — name,count. Без канонизации план ≠ state → вечный diff
|
||||||
|
// (баг воспроизведён через `terraform console`, см. NOTES/20_prompts/prompt_for_opus_review_modify_resources_2026-09-24.md).
|
||||||
|
func TestCanonicalVipConfigure_NormalizesJsonencodeForm(t *testing.T) {
|
||||||
|
raw := `[{"count":"3","name":"internet-ipv4-v1"}]` // так отдаёт jsonencode
|
||||||
|
want := `[{"name":"internet-ipv4-v1","count":"3"}]`
|
||||||
|
if got := canonicalVipConfigure(raw); got != want {
|
||||||
|
t.Fatalf("получено %q, ожидалось %q", got, want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCanonicalVipConfigure_CompactsAndDropsEmptyElements(t *testing.T) {
|
||||||
|
raw := `[ { "count" : "4" , "name" : "internet-ipv4-v1" }, {} ]`
|
||||||
|
want := `[{"name":"internet-ipv4-v1","count":"4"}]`
|
||||||
|
if got := canonicalVipConfigure(raw); got != want {
|
||||||
|
t.Fatalf("получено %q, ожидалось %q", got, want)
|
||||||
|
}
|
||||||
|
if got := canonicalVipConfigure(`[{}]`); got != "[]" {
|
||||||
|
t.Fatalf("для [{}] ожидалось \"[]\", получено %q", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCanonicalVipConfigure_InvalidJSONLeftAsIs(t *testing.T) {
|
||||||
|
raw := `{not json`
|
||||||
|
if got := canonicalVipConfigure(raw); got != raw {
|
||||||
|
t.Fatalf("невалидный JSON должен остаться как есть: %q → %q", raw, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestParseVipConfigure_RoundTripIsStable(t *testing.T) {
|
func TestParseVipConfigure_RoundTripIsStable(t *testing.T) {
|
||||||
raw := `[{"name":"internet-ipv4-v1","count":"4"}]`
|
raw := `[{"name":"internet-ipv4-v1","count":"4"}]`
|
||||||
items, err := parseVipConfigure(raw)
|
items, err := parseVipConfigure(raw)
|
||||||
|
|||||||
Reference in New Issue
Block a user