Skip to content

Commit e7860b6

Browse files
authored
fix: feature config parsing for LTD plans (#5681)
1 parent e792763 commit e7860b6

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

apps/builder/app/shared/db/plan-features.server.test.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,21 @@ describe("parsePlansEnv", () => {
151151
expect(parsePlansEnv(validEntry).size).toBe(0);
152152
});
153153

154-
test("skips entries missing features key", () => {
155-
expect(parsePlansEnv(JSON.stringify([{ name: "Pro" }])).size).toBe(0);
154+
test("extends-only entry (no features key) inherits parent features", () => {
155+
const result = parsePlansEnv(
156+
JSON.stringify([
157+
{ name: "Pro", features: fullFeatures },
158+
{ name: "LTD T2", extends: "Pro" },
159+
])
160+
);
161+
expect(result.size).toBe(2);
162+
expect(result.get("LTD T2")).toEqual(result.get("Pro"));
163+
});
164+
165+
test("entry with no features key and no extends resolves to defaultPlanFeatures", () => {
166+
const result = parsePlansEnv(JSON.stringify([{ name: "Free" }]));
167+
expect(result.size).toBe(1);
168+
expect(result.get("Free")).toEqual(defaultPlanFeatures);
156169
});
157170

158171
test("extends: child inherits parent features and overrides specific fields", () => {

apps/builder/app/shared/db/plan-features.server.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,18 @@ export const parsePlansEnv = (raw: string): Map<string, PlanFeatures> => {
6969
if (
7070
typeof item !== "object" ||
7171
item === null ||
72-
typeof item.name !== "string" ||
73-
!("features" in item)
72+
typeof item.name !== "string"
7473
) {
75-
console.error("Invalid PLANS entry (missing name or features):", item);
74+
console.error("Invalid PLANS entry (missing name):", item);
7675
return [];
7776
}
7877
if ("extends" in item && typeof item.extends !== "string") {
7978
console.error("Invalid PLANS entry (extends must be a string):", item);
8079
return [];
8180
}
82-
const result = PlanFeaturesSchema.partial().safeParse(item.features);
81+
const result = PlanFeaturesSchema.partial().safeParse(
82+
"features" in item ? item.features : {}
83+
);
8384
if (!result.success) {
8485
console.error(
8586
`Invalid PLANS entry "${item.name}" features:`,

0 commit comments

Comments
 (0)