From 9523bfffc1506d05f43e476e5ec755a9b420d975 Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Ducasse Date: Wed, 13 May 2026 12:54:58 +0200 Subject: [PATCH] feat(terraform): emit default_open on status page component groups --- internal/terraform/generate_test.go | 40 +++++++++++++++++++++++++++++ internal/terraform/hcl.go | 3 +++ plan.md | 8 +++--- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/internal/terraform/generate_test.go b/internal/terraform/generate_test.go index 68c8898..7325ee2 100644 --- a/internal/terraform/generate_test.go +++ b/internal/terraform/generate_test.go @@ -213,6 +213,46 @@ func TestCrossReferenceFallbackToString(t *testing.T) { mustContain(t, content, `monitor_id = "nonexistent-id"`) } +func TestGenerateStatusPagesFile_ComponentGroupDefaultOpen(t *testing.T) { + page := &status_pagev1.StatusPage{} + page.SetId("p1") + page.SetTitle("Page") + page.SetSlug("page") + + grpOpen := &status_pagev1.PageComponentGroup{} + grpOpen.SetId("g1") + grpOpen.SetPageId("p1") + grpOpen.SetName("Infrastructure") + grpOpen.SetDefaultOpen(true) + + grpClosed := &status_pagev1.PageComponentGroup{} + grpClosed.SetId("g2") + grpClosed.SetPageId("p1") + grpClosed.SetName("Other") + + data := &WorkspaceData{ + StatusPages: []StatusPageData{{ + Page: page, + Groups: []*status_pagev1.PageComponentGroup{grpOpen, grpClosed}, + }}, + } + gen := NewGenerator(data) + content := string(gen.GenerateStatusPagesFile().Bytes()) + + mustContain(t, content, `resource "openstatus_status_page_component_group" "infrastructure"`) + mustContain(t, content, `default_open = true`) + mustContain(t, content, `resource "openstatus_status_page_component_group" "other"`) + + otherStart := strings.Index(content, `"other"`) + if otherStart == -1 { + t.Fatalf("expected 'other' resource not found") + } + otherBlock := content[otherStart:] + if strings.Contains(otherBlock[:strings.Index(otherBlock, "}")], "default_open") { + t.Errorf("default_open should not be emitted for the 'other' group, got:\n%s", otherBlock) + } +} + func TestGenerateStatusPagesFile_IPAccess(t *testing.T) { page := &status_pagev1.StatusPage{} page.SetId("p1") diff --git a/internal/terraform/hcl.go b/internal/terraform/hcl.go index e2d6e51..19e14f0 100644 --- a/internal/terraform/hcl.go +++ b/internal/terraform/hcl.go @@ -397,6 +397,9 @@ func (g *Generator) GenerateStatusPagesFile() *hclwrite.File { gb := body.AppendNewBlock("resource", []string{"openstatus_status_page_component_group", gName}).Body() setTraversalOrString(gb, "page_id", g.pageRefs, page.GetId()) gb.SetAttributeValue("name", cty.StringVal(grp.GetName())) + if grp.GetDefaultOpen() { + gb.SetAttributeValue("default_open", cty.BoolVal(true)) + } body.AppendNewline() } diff --git a/plan.md b/plan.md index 6337981..99f85bd 100644 --- a/plan.md +++ b/plan.md @@ -466,11 +466,11 @@ Order matters within this phase: add helpers first, then call them. - [x] `internal/terraform/generate_test.go` — `TestGenerateStatusPagesFile_ThemeLocaleAllowIndex`: dark + fr default_locale + locales=[en,fr] + allow_index=true → all four emitted; default page → none emitted. - [x] `go test ./internal/terraform/...` green. -### Phase 3 — Component group `default_open` (commit 3: `feat(terraform): emit default_open on status page component groups`) +### Phase 3 — Component group `default_open` (commit 3: `feat(terraform): emit default_open on status page component groups`) ✅ -- [ ] `internal/terraform/hcl.go` — component-group branch in `GenerateStatusPagesFile`: `if grp.GetDefaultOpen() { gb.SetAttributeValue("default_open", cty.BoolVal(true)) }`. -- [ ] `internal/terraform/generate_test.go` — extend `TestGenerateStatusPagesFile` (or add a focused test) to include a group with `DefaultOpen: true` and assert the line. -- [ ] `go test ./internal/terraform/...` green. +- [x] `internal/terraform/hcl.go` — component-group branch in `GenerateStatusPagesFile`: `if grp.GetDefaultOpen() { gb.SetAttributeValue("default_open", cty.BoolVal(true)) }`. +- [x] `internal/terraform/generate_test.go` — extend `TestGenerateStatusPagesFile` (or add a focused test) to include a group with `DefaultOpen: true` and assert the line. +- [x] `go test ./internal/terraform/...` green. ### Phase 4 — Monitor `open_telemetry` (commit 4: `feat(terraform): emit open_telemetry block on HTTP/TCP/DNS monitors`) -- knotmirror 0.0.1