- Restructure operator sidebar into a flat task list with indented children; fold plan topology into plan ladders - Expand member catalog non-plan section to all published non-tier products; require recurring Stripe-mapped prices for purchase - Add operator domains placements and terminal-claims ledger; redirect /domains to the FedWiki Sites Domains anchor - Apply canonical vocabulary and chrome/form conventions; migrate seeded FedWiki Sites display name
77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
package server
|
|
|
|
// DB-backed handler-wiring test for ux-ia-naming 2.2: loadPlanLaddersPageData
|
|
// must hydrate PlanLaddersData.Topology by reusing loadPlanTopologyData, so
|
|
// GET /operator/plan-ladders loads both data sets from one page load. The
|
|
// render-only assembly (template include, heading order, health-strip
|
|
// states) is covered by operator_plan_ladders_mapfirst_render_test.go; this
|
|
// test locks the Go-side wiring that feeds it.
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"log/slog"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"git.coopcloud.tech/wiki-cafe/member-console/internal/billing"
|
|
"git.coopcloud.tech/wiki-cafe/member-console/internal/entitlements"
|
|
"git.coopcloud.tech/wiki-cafe/member-console/internal/organization"
|
|
"github.com/google/uuid"
|
|
_ "github.com/jackc/pgx/v5/stdlib"
|
|
)
|
|
|
|
func TestLoadPlanLaddersPageDataIncludesTopology(t *testing.T) {
|
|
database := topoTestDB(t)
|
|
ctx := context.Background()
|
|
|
|
tx, err := database.BeginTx(ctx, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer tx.Rollback()
|
|
|
|
bq := billing.New(tx)
|
|
eq := entitlements.New(tx)
|
|
oq := organization.New(tx)
|
|
|
|
ladder, err := bq.CreatePlanLadder(ctx, billing.CreatePlanLadderParams{
|
|
LadderKey: "mapfirst-" + uuid.New().String()[:8],
|
|
Name: "Map First Ladder",
|
|
IsActive: true,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("create ladder: %v", err)
|
|
}
|
|
|
|
h := &OperatorPartialsHandler{
|
|
BillingQ: bq,
|
|
EntitlementsQ: eq,
|
|
OrgQ: oq,
|
|
Database: database,
|
|
Logger: slog.New(slog.NewTextHandler(io.Discard, nil)),
|
|
}
|
|
req := httptest.NewRequest("GET", "/operator/plan-ladders", nil).WithContext(ctx)
|
|
data := h.loadPlanLaddersPageData(req, "", "")
|
|
|
|
foundInList := false
|
|
for _, l := range data.Ladders {
|
|
if l.PlanLadderID == ladder.PlanLadderID {
|
|
foundInList = true
|
|
}
|
|
}
|
|
if !foundInList {
|
|
t.Errorf("expected the created ladder in the management list (data.Ladders)")
|
|
}
|
|
|
|
foundInTopology := false
|
|
for _, l := range data.Topology.Ladders {
|
|
if l.PlanLadderID == ladder.PlanLadderID {
|
|
foundInTopology = true
|
|
}
|
|
}
|
|
if !foundInTopology {
|
|
t.Errorf("expected the created ladder in the topology overview (data.Topology.Ladders) -- loadPlanLaddersPageData must hydrate Topology via loadPlanTopologyData")
|
|
}
|
|
}
|