@bash-app/bash-common 30.432.0 → 30.434.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/appleIapProducts.test.js +1 -0
- package/dist/__tests__/appleIapProducts.test.js.map +1 -1
- package/dist/__tests__/bashSectionTitleForBashType.test.js +2 -0
- package/dist/__tests__/bashSectionTitleForBashType.test.js.map +1 -1
- package/dist/__tests__/discoveryScope.test.js +9 -1
- package/dist/__tests__/discoveryScope.test.js.map +1 -1
- package/dist/__tests__/promoCartEngine.test.d.ts +2 -0
- package/dist/__tests__/promoCartEngine.test.d.ts.map +1 -0
- package/dist/__tests__/promoCartEngine.test.js +174 -0
- package/dist/__tests__/promoCartEngine.test.js.map +1 -0
- package/dist/__tests__/promoCodeRedemption.test.d.ts +2 -0
- package/dist/__tests__/promoCodeRedemption.test.d.ts.map +1 -0
- package/dist/__tests__/promoCodeRedemption.test.js +103 -0
- package/dist/__tests__/promoCodeRedemption.test.js.map +1 -0
- package/dist/__tests__/promoCodeScope.test.d.ts +2 -0
- package/dist/__tests__/promoCodeScope.test.d.ts.map +1 -0
- package/dist/__tests__/promoCodeScope.test.js +84 -0
- package/dist/__tests__/promoCodeScope.test.js.map +1 -0
- package/dist/__tests__/statusEnums.test.js +1 -0
- package/dist/__tests__/statusEnums.test.js.map +1 -1
- package/dist/appleIapProducts.d.ts +12 -2
- package/dist/appleIapProducts.d.ts.map +1 -1
- package/dist/appleIapProducts.js +13 -0
- package/dist/appleIapProducts.js.map +1 -1
- package/dist/definitions.d.ts +3 -1
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +4 -2
- package/dist/definitions.js.map +1 -1
- package/dist/discoveryScope.d.ts +6 -6
- package/dist/discoveryScope.d.ts.map +1 -1
- package/dist/discoveryScope.js +25 -16
- package/dist/discoveryScope.js.map +1 -1
- package/dist/extendedSchemas.d.ts +1 -0
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/intros/__tests__/introsReleaseGates.test.d.ts +2 -0
- package/dist/intros/__tests__/introsReleaseGates.test.d.ts.map +1 -0
- package/dist/intros/__tests__/introsReleaseGates.test.js +140 -0
- package/dist/intros/__tests__/introsReleaseGates.test.js.map +1 -0
- package/dist/intros/__tests__/psychExperiment.test.d.ts +2 -0
- package/dist/intros/__tests__/psychExperiment.test.d.ts.map +1 -0
- package/dist/intros/__tests__/psychExperiment.test.js +63 -0
- package/dist/intros/__tests__/psychExperiment.test.js.map +1 -0
- package/dist/intros/__tests__/reasons.test.d.ts +2 -0
- package/dist/intros/__tests__/reasons.test.d.ts.map +1 -0
- package/dist/intros/__tests__/reasons.test.js +72 -0
- package/dist/intros/__tests__/reasons.test.js.map +1 -0
- package/dist/intros/__tests__/sharedNotes.test.d.ts +2 -0
- package/dist/intros/__tests__/sharedNotes.test.d.ts.map +1 -0
- package/dist/intros/__tests__/sharedNotes.test.js +19 -0
- package/dist/intros/__tests__/sharedNotes.test.js.map +1 -0
- package/dist/intros/__tests__/transitions.test.d.ts +2 -0
- package/dist/intros/__tests__/transitions.test.d.ts.map +1 -0
- package/dist/intros/__tests__/transitions.test.js +43 -0
- package/dist/intros/__tests__/transitions.test.js.map +1 -0
- package/dist/intros/__tests__/warmDisclosure.test.d.ts +2 -0
- package/dist/intros/__tests__/warmDisclosure.test.d.ts.map +1 -0
- package/dist/intros/__tests__/warmDisclosure.test.js +10 -0
- package/dist/intros/__tests__/warmDisclosure.test.js.map +1 -0
- package/dist/intros/age.d.ts +4 -0
- package/dist/intros/age.d.ts.map +1 -0
- package/dist/intros/age.js +14 -0
- package/dist/intros/age.js.map +1 -0
- package/dist/intros/attendance.d.ts +11 -0
- package/dist/intros/attendance.d.ts.map +1 -0
- package/dist/intros/attendance.js +27 -0
- package/dist/intros/attendance.js.map +1 -0
- package/dist/intros/attributeCatalog.d.ts +17 -0
- package/dist/intros/attributeCatalog.d.ts.map +1 -0
- package/dist/intros/attributeCatalog.js +96 -0
- package/dist/intros/attributeCatalog.js.map +1 -0
- package/dist/intros/index.d.ts +10 -0
- package/dist/intros/index.d.ts.map +1 -0
- package/dist/intros/index.js +10 -0
- package/dist/intros/index.js.map +1 -0
- package/dist/intros/intents.d.ts +8 -0
- package/dist/intros/intents.d.ts.map +1 -0
- package/dist/intros/intents.js +44 -0
- package/dist/intros/intents.js.map +1 -0
- package/dist/intros/psychExperiment.d.ts +29 -0
- package/dist/intros/psychExperiment.d.ts.map +1 -0
- package/dist/intros/psychExperiment.js +82 -0
- package/dist/intros/psychExperiment.js.map +1 -0
- package/dist/intros/reasons.d.ts +38 -0
- package/dist/intros/reasons.d.ts.map +1 -0
- package/dist/intros/reasons.js +162 -0
- package/dist/intros/reasons.js.map +1 -0
- package/dist/intros/sharedNotes.d.ts +10 -0
- package/dist/intros/sharedNotes.d.ts.map +1 -0
- package/dist/intros/sharedNotes.js +56 -0
- package/dist/intros/sharedNotes.js.map +1 -0
- package/dist/intros/transitions.d.ts +29 -0
- package/dist/intros/transitions.d.ts.map +1 -0
- package/dist/intros/transitions.js +128 -0
- package/dist/intros/transitions.js.map +1 -0
- package/dist/intros/validation.d.ts +50 -0
- package/dist/intros/validation.d.ts.map +1 -0
- package/dist/intros/validation.js +212 -0
- package/dist/intros/validation.js.map +1 -0
- package/dist/mirroredPrismaEnums.d.ts +1 -0
- package/dist/mirroredPrismaEnums.d.ts.map +1 -1
- package/dist/mirroredPrismaEnums.js +1 -0
- package/dist/mirroredPrismaEnums.js.map +1 -1
- package/dist/promoCartEngine.d.ts +55 -0
- package/dist/promoCartEngine.d.ts.map +1 -0
- package/dist/promoCartEngine.js +135 -0
- package/dist/promoCartEngine.js.map +1 -0
- package/dist/promoCodeRedemption.d.ts +44 -0
- package/dist/promoCodeRedemption.d.ts.map +1 -0
- package/dist/promoCodeRedemption.js +81 -0
- package/dist/promoCodeRedemption.js.map +1 -0
- package/dist/promoCodeScope.d.ts +91 -0
- package/dist/promoCodeScope.d.ts.map +1 -0
- package/dist/promoCodeScope.js +102 -0
- package/dist/promoCodeScope.js.map +1 -0
- package/dist/utils/__tests__/discountEngine/discountCalculator.test.js +8 -1
- package/dist/utils/__tests__/discountEngine/discountCalculator.test.js.map +1 -1
- package/dist/utils/__tests__/paymentUtils.test.js +87 -4
- package/dist/utils/__tests__/paymentUtils.test.js.map +1 -1
- package/dist/utils/paymentUtils.d.ts +30 -5
- package/dist/utils/paymentUtils.d.ts.map +1 -1
- package/dist/utils/paymentUtils.js +43 -11
- package/dist/utils/paymentUtils.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +427 -6
- package/src/__tests__/appleIapProducts.test.ts +3 -0
- package/src/__tests__/bashSectionTitleForBashType.test.ts +4 -0
- package/src/__tests__/discoveryScope.test.ts +22 -1
- package/src/__tests__/promoCartEngine.test.ts +201 -0
- package/src/__tests__/promoCodeRedemption.test.ts +134 -0
- package/src/__tests__/promoCodeScope.test.ts +119 -0
- package/src/__tests__/statusEnums.test.ts +1 -0
- package/src/appleIapProducts.ts +29 -2
- package/src/definitions.ts +4 -2
- package/src/discoveryScope.ts +30 -20
- package/src/extendedSchemas.ts +1 -0
- package/src/index.ts +4 -0
- package/src/intros/__tests__/introsReleaseGates.test.ts +181 -0
- package/src/intros/__tests__/psychExperiment.test.ts +99 -0
- package/src/intros/__tests__/reasons.test.ts +122 -0
- package/src/intros/__tests__/sharedNotes.test.ts +20 -0
- package/src/intros/__tests__/transitions.test.ts +61 -0
- package/src/intros/__tests__/warmDisclosure.test.ts +10 -0
- package/src/intros/age.ts +13 -0
- package/src/intros/attendance.ts +33 -0
- package/src/intros/attributeCatalog.ts +113 -0
- package/src/intros/index.ts +9 -0
- package/src/intros/intents.ts +49 -0
- package/src/intros/psychExperiment.ts +130 -0
- package/src/intros/reasons.ts +187 -0
- package/src/intros/sharedNotes.ts +59 -0
- package/src/intros/transitions.ts +172 -0
- package/src/intros/validation.ts +248 -0
- package/src/mirroredPrismaEnums.ts +1 -0
- package/src/promoCartEngine.ts +193 -0
- package/src/promoCodeRedemption.ts +123 -0
- package/src/promoCodeScope.ts +180 -0
- package/src/utils/__tests__/discountEngine/discountCalculator.test.ts +8 -0
- package/src/utils/__tests__/paymentUtils.test.ts +100 -6
- package/src/utils/paymentUtils.ts +56 -13
|
@@ -21,6 +21,7 @@ describe("appleIapProducts", () => {
|
|
|
21
21
|
expect(APPLE_BASHPASS_PRODUCTS.length).toBe(3);
|
|
22
22
|
expect(APPLE_FEATURE_BOOST_PRODUCTS.length).toBe(5);
|
|
23
23
|
expect(getAppleIapProduct("community.bash.us.boost.7d")?.family).toBe("feature_boost");
|
|
24
|
+
expect(getAppleIapProduct("community.bash.us.intros.earlyreveal")?.family).toBe("early_reveal");
|
|
24
25
|
});
|
|
25
26
|
it("listAppleIapProductIds filters by family", () => {
|
|
26
27
|
const membershipIds = listAppleIapProductIds("membership");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appleIapProducts.test.js","sourceRoot":"","sources":["../../src/__tests__/appleIapProducts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,MAAM;YACN,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CACJ,kBAAkB,CAAC,4BAA4B,CAAC,EAAE,MAAM,CACzD,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"appleIapProducts.test.js","sourceRoot":"","sources":["../../src/__tests__/appleIapProducts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,MAAM;YACN,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CACJ,kBAAkB,CAAC,4BAA4B,CAAC,EAAE,MAAM,CACzD,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxB,MAAM,CAAC,kBAAkB,CAAC,sCAAsC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAC7E,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,aAAa,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -42,6 +42,8 @@ describe("bashSectionTitleForBashType", () => {
|
|
|
42
42
|
expect(bashSectionTitleForBashType("Ideas")).toBe("Ideas");
|
|
43
43
|
});
|
|
44
44
|
it("scope rows use destination copy", () => {
|
|
45
|
+
expect(bashSectionTitleForBashType("Local")).toBe("City & Community Events");
|
|
46
|
+
expect(bashSectionTitleForBashType("State")).toBe("State Events");
|
|
45
47
|
expect(bashSectionTitleForBashType("National")).toBe("Across the country");
|
|
46
48
|
expect(bashSectionTitleForBashType("International")).toBe("Worth the flight");
|
|
47
49
|
expect(bashSectionTitleForBashType("CrewGoing")).toBe("The crew's going");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bashSectionTitleForBashType.test.js","sourceRoot":"","sources":["../../src/__tests__/bashSectionTitleForBashType.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bashSectionTitleForBashType.test.js","sourceRoot":"","sources":["../../src/__tests__/bashSectionTitleForBashType.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,16 @@ describe("discoveryScope", () => {
|
|
|
6
6
|
expect(isHostSettableDiscoveryScope(DiscoveryScope.National)).toBe(false);
|
|
7
7
|
expect(isHostSettableDiscoveryScope(DiscoveryScope.International)).toBe(false);
|
|
8
8
|
});
|
|
9
|
-
it("infers State from state
|
|
9
|
+
it("infers State from a state-run event, not from travel or sponsorship", () => {
|
|
10
10
|
expect(inferDiscoveryScopeFromText("Utah State Fair")).toBe(DiscoveryScope.State);
|
|
11
|
+
expect(inferDiscoveryScopeFromText("People are coming from statewide")).toBe(DiscoveryScope.Unspecified);
|
|
12
|
+
expect(inferDiscoveryScopeFromText("Sponsored by the Utah state agency office")).toBe(DiscoveryScope.Unspecified);
|
|
13
|
+
expect(inferDiscoveryScopeFromText("Organized by Utah State Parks")).toBe(DiscoveryScope.State);
|
|
14
|
+
expect(inferDiscoveryScopeFromText("Neighborhood party sponsored by the state")).toBe(DiscoveryScope.Unspecified);
|
|
15
|
+
});
|
|
16
|
+
it("infers Local from the organizer, not from how close the party is", () => {
|
|
17
|
+
expect(inferDiscoveryScopeFromText("City of Provo parks and recreation concert")).toBe(DiscoveryScope.Local);
|
|
18
|
+
expect(inferDiscoveryScopeFromText("Sugar House block party")).toBe(DiscoveryScope.Unspecified);
|
|
11
19
|
});
|
|
12
20
|
it("infers National from destination brands", () => {
|
|
13
21
|
expect(inferDiscoveryScopeFromText("EDC Las Vegas")).toBe(DiscoveryScope.National);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryScope.test.js","sourceRoot":"","sources":["../../src/__tests__/discoveryScope.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAE9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACrE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"discoveryScope.test.js","sourceRoot":"","sources":["../../src/__tests__/discoveryScope.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoCartEngine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/promoCartEngine.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { allocateAcrossTickets, allocateProportionally, resolvePromoForCart, } from "../promoCartEngine.js";
|
|
2
|
+
const now = new Date("2026-10-14T12:00:00Z");
|
|
3
|
+
const earlyBird = { ticketTierId: "early", pricing: "USD", quantity: 2, cashSubtotalCents: 2000, pointsSubtotal: 0 };
|
|
4
|
+
const regular = { ticketTierId: "regular", pricing: "USD", quantity: 1, cashSubtotalCents: 2500, pointsSubtotal: 0 };
|
|
5
|
+
const vip = { ticketTierId: "vip", pricing: "USD", quantity: 1, cashSubtotalCents: 7500, pointsSubtotal: 0 };
|
|
6
|
+
const points = { ticketTierId: "points", pricing: "BASHPOINTS", quantity: 2, cashSubtotalCents: 0, pointsSubtotal: 1000 };
|
|
7
|
+
const free = { ticketTierId: "free", pricing: "FREE", quantity: 3, cashSubtotalCents: 0, pointsSubtotal: 0 };
|
|
8
|
+
describe("allocateProportionally", () => {
|
|
9
|
+
it("splits by weight, flooring, with leftover to the largest line then tier id", () => {
|
|
10
|
+
const result = allocateProportionally(1000, [
|
|
11
|
+
{ key: "b", weight: 1000 },
|
|
12
|
+
{ key: "a", weight: 1000 },
|
|
13
|
+
{ key: "c", weight: 1000 },
|
|
14
|
+
]);
|
|
15
|
+
expect([...result.entries()].sort()).toEqual([["a", 334], ["b", 333], ["c", 333]]);
|
|
16
|
+
});
|
|
17
|
+
it("gives leftover cents to the largest line first", () => {
|
|
18
|
+
const result = allocateProportionally(1001, [
|
|
19
|
+
{ key: "small", weight: 1000 },
|
|
20
|
+
{ key: "big", weight: 3000 },
|
|
21
|
+
]);
|
|
22
|
+
expect(result.get("big")).toBe(751);
|
|
23
|
+
expect(result.get("small")).toBe(250);
|
|
24
|
+
});
|
|
25
|
+
it("never allocates more than the eligible total", () => {
|
|
26
|
+
const result = allocateProportionally(9999, [{ key: "a", weight: 500 }]);
|
|
27
|
+
expect(result.get("a")).toBe(500);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe("allocateAcrossTickets", () => {
|
|
31
|
+
it("splits evenly with leftover cents to the lowest ticket ids, summing exactly", () => {
|
|
32
|
+
const result = allocateAcrossTickets(1001, ["t3", "t1", "t2"]);
|
|
33
|
+
expect([...result.entries()]).toEqual([["t1", 334], ["t2", 334], ["t3", 333]]);
|
|
34
|
+
expect([...result.values()].reduce((s, v) => s + v, 0)).toBe(1001);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe("resolvePromoForCart", () => {
|
|
38
|
+
it("attribution-only (NONE) on all tiers counts cash, BashPoints, and free tickets with no discount", () => {
|
|
39
|
+
const result = resolvePromoForCart({
|
|
40
|
+
promo: { eligibilityMode: "ALL_TIERS", discountType: "NONE" },
|
|
41
|
+
cartLines: [earlyBird, points, free],
|
|
42
|
+
now,
|
|
43
|
+
});
|
|
44
|
+
expect(result.status).toBe("applied");
|
|
45
|
+
expect(result.cashDiscountTotalCents).toBe(0);
|
|
46
|
+
expect(result.pointsDiscountTotal).toBe(0);
|
|
47
|
+
expect(result.attributedTicketCount).toBe(7);
|
|
48
|
+
});
|
|
49
|
+
it("attributes cash, hybrid, BashPoints-only, and free lines, including a tier added later, with a 0 guest discount", () => {
|
|
50
|
+
const hybrid = {
|
|
51
|
+
ticketTierId: "hybrid",
|
|
52
|
+
pricing: "USD",
|
|
53
|
+
quantity: 1,
|
|
54
|
+
cashSubtotalCents: 3000,
|
|
55
|
+
pointsSubtotal: 100,
|
|
56
|
+
};
|
|
57
|
+
const addedLater = {
|
|
58
|
+
ticketTierId: "tier_added_later",
|
|
59
|
+
pricing: "USD",
|
|
60
|
+
quantity: 4,
|
|
61
|
+
cashSubtotalCents: 4000,
|
|
62
|
+
pointsSubtotal: 0,
|
|
63
|
+
};
|
|
64
|
+
const result = resolvePromoForCart({
|
|
65
|
+
promo: { eligibilityMode: "ALL_TIERS", discountType: "NONE" },
|
|
66
|
+
cartLines: [earlyBird, hybrid, points, free, addedLater],
|
|
67
|
+
now,
|
|
68
|
+
});
|
|
69
|
+
expect(result.status).toBe("applied");
|
|
70
|
+
expect(result.cashDiscountTotalCents).toBe(0);
|
|
71
|
+
expect(result.pointsDiscountTotal).toBe(0);
|
|
72
|
+
expect(result.lines.map((line) => [line.ticketTierId, line.eligible, line.attributedTicketCount])).toEqual([
|
|
73
|
+
["early", true, 2],
|
|
74
|
+
["hybrid", true, 1],
|
|
75
|
+
["points", true, 2],
|
|
76
|
+
["free", true, 3],
|
|
77
|
+
["tier_added_later", true, 4],
|
|
78
|
+
]);
|
|
79
|
+
expect(result.attributedTicketCount).toBe(12);
|
|
80
|
+
});
|
|
81
|
+
it("percentage on selected tiers discounts only those cash lines", () => {
|
|
82
|
+
const result = resolvePromoForCart({
|
|
83
|
+
promo: {
|
|
84
|
+
eligibilityMode: "SELECTED_TIERS",
|
|
85
|
+
eligibleTiers: [{ ticketTierId: "regular" }, { ticketTierId: "vip" }],
|
|
86
|
+
discountType: "PERCENT",
|
|
87
|
+
discountAmountPercentage: 10,
|
|
88
|
+
},
|
|
89
|
+
cartLines: [earlyBird, regular, vip],
|
|
90
|
+
now,
|
|
91
|
+
});
|
|
92
|
+
expect(result.lines.map((l) => [l.ticketTierId, l.cashDiscountCents])).toEqual([
|
|
93
|
+
["early", 0],
|
|
94
|
+
["regular", 250],
|
|
95
|
+
["vip", 750],
|
|
96
|
+
]);
|
|
97
|
+
expect(result.attributedTicketCount).toBe(2);
|
|
98
|
+
});
|
|
99
|
+
it("percentage leaves BashPoints alone unless the host opts in", () => {
|
|
100
|
+
const off = resolvePromoForCart({
|
|
101
|
+
promo: { eligibilityMode: "ALL_TIERS", discountAmountPercentage: 20 },
|
|
102
|
+
cartLines: [points],
|
|
103
|
+
now,
|
|
104
|
+
});
|
|
105
|
+
expect(off.pointsDiscountTotal).toBe(0);
|
|
106
|
+
expect(off.attributedTicketCount).toBe(2);
|
|
107
|
+
const on = resolvePromoForCart({
|
|
108
|
+
promo: { eligibilityMode: "ALL_TIERS", discountAmountPercentage: 20, discountAppliesToBashPoints: true },
|
|
109
|
+
cartLines: [points],
|
|
110
|
+
now,
|
|
111
|
+
});
|
|
112
|
+
expect(on.pointsDiscountTotal).toBe(200);
|
|
113
|
+
expect(on.lines[0].finalPoints).toBe(800);
|
|
114
|
+
});
|
|
115
|
+
it("fixed cash applies once per order across eligible cash lines, never to points", () => {
|
|
116
|
+
const result = resolvePromoForCart({
|
|
117
|
+
promo: { eligibilityMode: "ALL_TIERS", discountType: "FIXED_CASH", discountAmountInCents: 1000 },
|
|
118
|
+
cartLines: [earlyBird, regular, points],
|
|
119
|
+
now,
|
|
120
|
+
});
|
|
121
|
+
expect(result.cashDiscountTotalCents).toBe(1000);
|
|
122
|
+
expect(result.pointsDiscountTotal).toBe(0);
|
|
123
|
+
const byTier = Object.fromEntries(result.lines.map((l) => [l.ticketTierId, l.cashDiscountCents]));
|
|
124
|
+
expect(byTier).toEqual({ early: 444, regular: 556, points: 0 });
|
|
125
|
+
});
|
|
126
|
+
it("caps a fixed discount at the eligible cash total and floors totals at 0", () => {
|
|
127
|
+
const result = resolvePromoForCart({
|
|
128
|
+
promo: { eligibilityMode: "ALL_TIERS", discountAmountInCents: 99999 },
|
|
129
|
+
cartLines: [regular],
|
|
130
|
+
now,
|
|
131
|
+
});
|
|
132
|
+
expect(result.lines[0].finalCashCents).toBe(0);
|
|
133
|
+
expect(result.cashDiscountTotalCents).toBe(2500);
|
|
134
|
+
});
|
|
135
|
+
it("caps a percentage above 100 at the line price", () => {
|
|
136
|
+
const result = resolvePromoForCart({
|
|
137
|
+
promo: { ticketTierId: "regular", discountAmountPercentage: 150 },
|
|
138
|
+
cartLines: [regular],
|
|
139
|
+
now,
|
|
140
|
+
});
|
|
141
|
+
expect(result.lines[0].cashDiscountCents).toBe(2500);
|
|
142
|
+
});
|
|
143
|
+
it("a legacy single-tier code keeps today's total: whole discount on its one line", () => {
|
|
144
|
+
const result = resolvePromoForCart({
|
|
145
|
+
promo: { ticketTierId: "regular", discountAmountInCents: 500 },
|
|
146
|
+
cartLines: [earlyBird, regular],
|
|
147
|
+
now,
|
|
148
|
+
});
|
|
149
|
+
expect(result.cashDiscountTotalCents).toBe(500);
|
|
150
|
+
expect(result.lines.find((l) => l.ticketTierId === "regular")?.cashDiscountCents).toBe(500);
|
|
151
|
+
});
|
|
152
|
+
it("an all-tiers code covers a tier added after the code was created", () => {
|
|
153
|
+
const result = resolvePromoForCart({
|
|
154
|
+
promo: { eligibilityMode: "ALL_TIERS", discountAmountPercentage: 10 },
|
|
155
|
+
cartLines: [{ ...regular, ticketTierId: "added_later" }],
|
|
156
|
+
now,
|
|
157
|
+
});
|
|
158
|
+
expect(result.lines[0].eligible).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
it("reports not_applicable, expired, and disabled", () => {
|
|
161
|
+
expect(resolvePromoForCart({ promo: { ticketTierId: "vip" }, cartLines: [regular], now }).status).toBe("not_applicable");
|
|
162
|
+
expect(resolvePromoForCart({
|
|
163
|
+
promo: { eligibilityMode: "ALL_TIERS", redeemBy: new Date("2026-10-01") },
|
|
164
|
+
cartLines: [regular],
|
|
165
|
+
now,
|
|
166
|
+
}).status).toBe("expired");
|
|
167
|
+
expect(resolvePromoForCart({
|
|
168
|
+
promo: { eligibilityMode: "ALL_TIERS", disabledAt: now },
|
|
169
|
+
cartLines: [regular],
|
|
170
|
+
now,
|
|
171
|
+
}).status).toBe("disabled");
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=promoCartEngine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoCartEngine.test.js","sourceRoot":"","sources":["../../src/__tests__/promoCartEngine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoCodeRedemption.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/promoCodeRedemption.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { evaluatePromoRedeemability, isPromoCodeRejectReason, normalizePromoRedemptionEmail, pickPromoCodeAmongDuplicates, PROMO_CODE_REJECT_MESSAGES, PROMO_CODE_REJECT_REASONS, } from "../promoCodeRedemption.js";
|
|
2
|
+
const now = new Date("2026-10-14T12:00:00Z");
|
|
3
|
+
function base(overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
redeemBy: null,
|
|
6
|
+
disabledAt: null,
|
|
7
|
+
maxRedemptions: null,
|
|
8
|
+
maxUsesPerAccount: null,
|
|
9
|
+
activeOrderCount: 0,
|
|
10
|
+
accountOrderCount: 0,
|
|
11
|
+
now,
|
|
12
|
+
...overrides,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
describe("evaluatePromoRedeemability", () => {
|
|
16
|
+
it("allows a code with no limits", () => {
|
|
17
|
+
expect(evaluatePromoRedeemability(base())).toBeNull();
|
|
18
|
+
});
|
|
19
|
+
it("rejects a disabled code before anything else", () => {
|
|
20
|
+
expect(evaluatePromoRedeemability(base({ disabledAt: now, redeemBy: new Date("2020-01-01"), activeOrderCount: 99, maxRedemptions: 1 }))).toBe("disabled");
|
|
21
|
+
});
|
|
22
|
+
it("rejects a code past redeemBy and allows one still before it", () => {
|
|
23
|
+
expect(evaluatePromoRedeemability(base({ redeemBy: new Date("2026-10-14T11:59:59Z") }))).toBe("expired");
|
|
24
|
+
expect(evaluatePromoRedeemability(base({ redeemBy: new Date("2026-10-14T12:00:01Z") }))).toBeNull();
|
|
25
|
+
});
|
|
26
|
+
it("counts orders against maxRedemptions: 8 of 10 used leaves room, 10 of 10 is exhausted", () => {
|
|
27
|
+
expect(evaluatePromoRedeemability(base({ maxRedemptions: 10, activeOrderCount: 8 }))).toBeNull();
|
|
28
|
+
expect(evaluatePromoRedeemability(base({ maxRedemptions: 10, activeOrderCount: 10 }))).toBe("exhausted");
|
|
29
|
+
});
|
|
30
|
+
it("treats maxRedemptions 0 or null as unlimited", () => {
|
|
31
|
+
expect(evaluatePromoRedeemability(base({ maxRedemptions: 0, activeOrderCount: 50 }))).toBeNull();
|
|
32
|
+
expect(evaluatePromoRedeemability(base({ maxRedemptions: null, activeOrderCount: 50 }))).toBeNull();
|
|
33
|
+
});
|
|
34
|
+
it("applies the per-account limit only when set", () => {
|
|
35
|
+
expect(evaluatePromoRedeemability(base({ maxUsesPerAccount: 1, accountOrderCount: 1 }))).toBe("already_used");
|
|
36
|
+
expect(evaluatePromoRedeemability(base({ maxUsesPerAccount: 2, accountOrderCount: 1 }))).toBeNull();
|
|
37
|
+
expect(evaluatePromoRedeemability(base({ maxUsesPerAccount: null, accountOrderCount: 9 }))).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
function row(id, overrides = {}) {
|
|
41
|
+
return {
|
|
42
|
+
id,
|
|
43
|
+
ticketTierId: `tier_${id}`,
|
|
44
|
+
promoterId: "promoter_row",
|
|
45
|
+
discountAmountInCents: 500,
|
|
46
|
+
discountAmountPercentage: null,
|
|
47
|
+
redeemBy: null,
|
|
48
|
+
maxRedemptions: null,
|
|
49
|
+
bashPointsRewardPerTicket: null,
|
|
50
|
+
...overrides,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
describe("pickPromoCodeAmongDuplicates", () => {
|
|
54
|
+
it("returns the only row", () => {
|
|
55
|
+
expect(pickPromoCodeAmongDuplicates([row("b")])).toEqual({ row: row("b") });
|
|
56
|
+
});
|
|
57
|
+
it("picks the oldest id among identical rows", () => {
|
|
58
|
+
const result = pickPromoCodeAmongDuplicates([row("c"), row("a"), row("b")]);
|
|
59
|
+
expect("row" in result && result.row.id).toBe("a");
|
|
60
|
+
});
|
|
61
|
+
it("prefers an identical row whose tier is in the cart", () => {
|
|
62
|
+
const result = pickPromoCodeAmongDuplicates([row("a"), row("b")], ["tier_b"]);
|
|
63
|
+
expect("row" in result && result.row.id).toBe("b");
|
|
64
|
+
});
|
|
65
|
+
it("falls back to the oldest row when no duplicate tier is in the cart", () => {
|
|
66
|
+
const result = pickPromoCodeAmongDuplicates([row("b"), row("a")], ["tier_z"]);
|
|
67
|
+
expect("row" in result && result.row.id).toBe("a");
|
|
68
|
+
});
|
|
69
|
+
it.each([
|
|
70
|
+
["promoter", { promoterId: "someone_else" }],
|
|
71
|
+
["discount", { discountAmountInCents: 700 }],
|
|
72
|
+
["percentage", { discountAmountPercentage: 10, discountAmountInCents: null }],
|
|
73
|
+
["expiry", { redeemBy: new Date("2027-01-01") }],
|
|
74
|
+
["limit", { maxRedemptions: 5 }],
|
|
75
|
+
["BashPoints reward", { bashPointsRewardPerTicket: 25 }],
|
|
76
|
+
])("asks the host to review duplicates that differ on %s", (_label, diff) => {
|
|
77
|
+
expect(pickPromoCodeAmongDuplicates([row("a"), row("b", diff)])).toEqual({
|
|
78
|
+
reason: "host_review_required",
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
it("throws on an empty list", () => {
|
|
82
|
+
expect(() => pickPromoCodeAmongDuplicates([])).toThrow();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe("reason helpers", () => {
|
|
86
|
+
it("has a guest message for every reason", () => {
|
|
87
|
+
for (const reason of PROMO_CODE_REJECT_REASONS) {
|
|
88
|
+
expect(PROMO_CODE_REJECT_MESSAGES[reason].length).toBeGreaterThan(0);
|
|
89
|
+
}
|
|
90
|
+
expect(PROMO_CODE_REJECT_MESSAGES.host_review_required).toBe("This code needs the host to review it.");
|
|
91
|
+
});
|
|
92
|
+
it("recognizes reason strings", () => {
|
|
93
|
+
expect(isPromoCodeRejectReason("expired")).toBe(true);
|
|
94
|
+
expect(isPromoCodeRejectReason("nope")).toBe(false);
|
|
95
|
+
expect(isPromoCodeRejectReason(3)).toBe(false);
|
|
96
|
+
});
|
|
97
|
+
it("normalizes emails", () => {
|
|
98
|
+
expect(normalizePromoRedemptionEmail(" Guest@Example.COM ")).toBe("guest@example.com");
|
|
99
|
+
expect(normalizePromoRedemptionEmail(" ")).toBeNull();
|
|
100
|
+
expect(normalizePromoRedemptionEmail(null)).toBeNull();
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=promoCodeRedemption.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoCodeRedemption.test.js","sourceRoot":"","sources":["../../src/__tests__/promoCodeRedemption.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoCodeScope.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/promoCodeScope.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { promoCodeAppliesToTier, promoCodeBashEventId, promoCodeDiscountKind, promoCodeEligibleTierIds, getPromoterShareUrl, promoterCodeInputErrors, } from "../promoCodeScope.js";
|
|
2
|
+
describe("promoCodeDiscountKind", () => {
|
|
3
|
+
it("uses the explicit type, else derives it from legacy amounts", () => {
|
|
4
|
+
expect(promoCodeDiscountKind({ discountType: "NONE", discountAmountPercentage: 10 })).toBe("NONE");
|
|
5
|
+
expect(promoCodeDiscountKind({ discountAmountPercentage: 10 })).toBe("PERCENT");
|
|
6
|
+
expect(promoCodeDiscountKind({ discountAmountInCents: 500 })).toBe("FIXED_CASH");
|
|
7
|
+
expect(promoCodeDiscountKind({})).toBe("NONE");
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
describe("promoCodeBashEventId", () => {
|
|
11
|
+
it("prefers the row's bash, else the legacy tier's bash", () => {
|
|
12
|
+
expect(promoCodeBashEventId({ bashEventId: "evt_1", ticketTier: { bashEventId: "evt_2" } })).toBe("evt_1");
|
|
13
|
+
expect(promoCodeBashEventId({ ticketTier: { bashEventId: "evt_2" } })).toBe("evt_2");
|
|
14
|
+
expect(promoCodeBashEventId({})).toBeNull();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
describe("promoCodeEligibleTierIds", () => {
|
|
18
|
+
it("returns ALL for an all-tiers code, so tiers added later qualify", () => {
|
|
19
|
+
const allTiers = { eligibilityMode: "ALL_TIERS", ticketTierId: "ga" };
|
|
20
|
+
expect(promoCodeEligibleTierIds(allTiers)).toBe("ALL");
|
|
21
|
+
expect(promoCodeAppliesToTier(allTiers, "tier_added_later")).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
it("uses selected tiers, else the legacy tier", () => {
|
|
24
|
+
expect(promoCodeEligibleTierIds({
|
|
25
|
+
eligibilityMode: "SELECTED_TIERS",
|
|
26
|
+
eligibleTiers: [{ ticketTierId: "ga" }, { ticketTierId: "vip" }, { ticketTierId: "ga" }],
|
|
27
|
+
})).toEqual(["ga", "vip"]);
|
|
28
|
+
expect(promoCodeEligibleTierIds({ ticketTierId: "ga" })).toEqual(["ga"]);
|
|
29
|
+
expect(promoCodeEligibleTierIds({})).toEqual([]);
|
|
30
|
+
expect(promoCodeAppliesToTier({ ticketTierId: "ga" }, "vip")).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("getPromoterShareUrl", () => {
|
|
34
|
+
it("uses the active vanity path when there is one", () => {
|
|
35
|
+
expect(getPromoterShareUrl({
|
|
36
|
+
bashEventId: "evt_1",
|
|
37
|
+
slug: "summer-bash",
|
|
38
|
+
vanityPaths: [
|
|
39
|
+
{ segment: "old", status: "Revoked" },
|
|
40
|
+
{ segment: "BashFest", status: "Active" },
|
|
41
|
+
],
|
|
42
|
+
code: " crew 1 ",
|
|
43
|
+
origin: "https://bash.community/",
|
|
44
|
+
})).toBe("https://bash.community/bash/bashfest?promo=CREW%201");
|
|
45
|
+
});
|
|
46
|
+
it("falls back to the id-slug path, never /bashes/", () => {
|
|
47
|
+
const url = getPromoterShareUrl({ bashEventId: "evt_1", slug: "summer-bash", code: "vip" });
|
|
48
|
+
expect(url).toBe("/bash/evt_1-summer-bash?promo=VIP");
|
|
49
|
+
expect(url).not.toContain("/bashes/");
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("promoterCodeInputErrors", () => {
|
|
53
|
+
const ok = {
|
|
54
|
+
code: "CREW",
|
|
55
|
+
discountType: "NONE",
|
|
56
|
+
eligibilityMode: "ALL_TIERS",
|
|
57
|
+
};
|
|
58
|
+
it("accepts an attribution-only all-tiers code", () => {
|
|
59
|
+
expect(promoterCodeInputErrors(ok, ["ga"])).toEqual([]);
|
|
60
|
+
});
|
|
61
|
+
it("allows a guest discount of 0 and rejects negatives, separately from promoter commission", () => {
|
|
62
|
+
expect(promoterCodeInputErrors({ ...ok, discountType: "PERCENT", discountValue: 0 }, [])).toEqual([]);
|
|
63
|
+
expect(promoterCodeInputErrors({ ...ok, discountType: "FIXED_CASH", discountValue: 0 }, [])).toEqual([]);
|
|
64
|
+
expect(promoterCodeInputErrors({ ...ok, discountType: "PERCENT", discountValue: -1 }, [])).toContain("Guest discount must be between 0% and 100%.");
|
|
65
|
+
expect(promoterCodeInputErrors({ ...ok, discountType: "FIXED_CASH", discountValue: -100 }, [])).toContain("Enter a fixed discount of $0 or more.");
|
|
66
|
+
expect(promoterCodeInputErrors({ ...ok, discountType: "PERCENT", discountValue: 100 }, [])).toEqual([]);
|
|
67
|
+
expect(promoterCodeInputErrors({ ...ok, promoterCommissionBps: 0 }, [])).toEqual([]);
|
|
68
|
+
expect(promoterCodeInputErrors({ ...ok, promoterCommissionBps: 10000 }, [])).toEqual([]);
|
|
69
|
+
expect(promoterCodeInputErrors({ ...ok, promoterCommissionBps: 10001 }, [])).toContain("Promoter commission must be between 0% and 100%.");
|
|
70
|
+
});
|
|
71
|
+
it("requires selected tiers on this bash", () => {
|
|
72
|
+
expect(promoterCodeInputErrors({ ...ok, eligibilityMode: "SELECTED_TIERS" }, ["ga"])).toContain("Pick at least one ticket tier.");
|
|
73
|
+
expect(promoterCodeInputErrors({ ...ok, eligibilityMode: "SELECTED_TIERS", eligibleTierIds: ["other"] }, ["ga"])).toContain("A selected tier isn't on this bash.");
|
|
74
|
+
});
|
|
75
|
+
it("blocks saving a promoter code until the reward is reviewed", () => {
|
|
76
|
+
expect(promoterCodeInputErrors({ ...ok, promoterEmail: "p@x.com" }, [])).toContain("Review the promoter reward before saving.");
|
|
77
|
+
expect(promoterCodeInputErrors({ ...ok, promoterEmail: "p@x.com", promoterRewardReviewed: true }, [])).toEqual([]);
|
|
78
|
+
});
|
|
79
|
+
it("accepts BashPoints as a compensation method", () => {
|
|
80
|
+
expect(promoterCodeInputErrors({ ...ok, compensationMethod: "BashPoints" }, [])).toEqual([]);
|
|
81
|
+
expect(promoterCodeInputErrors({ ...ok, compensationMethod: "Wire" }, [])).toContain("Choose Venmo, Zelle, Cash App, or BashPoints.");
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=promoCodeScope.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promoCodeScope.test.js","sourceRoot":"","sources":["../../src/__tests__/promoCodeScope.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusEnums.test.js","sourceRoot":"","sources":["../../src/__tests__/statusEnums.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"statusEnums.test.js","sourceRoot":"","sources":["../../src/__tests__/statusEnums.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { BashPassTier, MembershipTier } from "@prisma/client";
|
|
10
10
|
import { FEATURE_BOOST_DURATIONS } from "./membershipDefinitions.js";
|
|
11
|
-
export type AppleIapProductFamily = "membership" | "listing" | "bashpass" | "feature_boost";
|
|
11
|
+
export type AppleIapProductFamily = "membership" | "listing" | "bashpass" | "feature_boost" | "early_reveal";
|
|
12
12
|
export type AppleMembershipInterval = "monthly" | "yearly" | "lifetime";
|
|
13
13
|
export type AppleListingTier = "Ally" | "Partner" | "Patron";
|
|
14
14
|
export interface AppleMembershipProduct {
|
|
@@ -40,7 +40,13 @@ export interface AppleFeatureBoostProduct {
|
|
|
40
40
|
hours: number;
|
|
41
41
|
priceCents: number;
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
/** Consumable. App Store Connect must exist before a live iOS purchase can complete. */
|
|
44
|
+
export interface AppleEarlyRevealProduct {
|
|
45
|
+
productId: string;
|
|
46
|
+
family: "early_reveal";
|
|
47
|
+
priceCents: number;
|
|
48
|
+
}
|
|
49
|
+
export type AppleIapProduct = AppleMembershipProduct | AppleListingProduct | AppleBashPassProduct | AppleFeatureBoostProduct | AppleEarlyRevealProduct;
|
|
44
50
|
export declare const APPLE_MEMBERSHIP_PRODUCTS: readonly AppleMembershipProduct[];
|
|
45
51
|
/** Listing seat subscriptions. Dollars in SERVICE_SUBSCRIPTION_TIERS → cents. */
|
|
46
52
|
export declare const APPLE_LISTING_PRODUCTS: readonly AppleListingProduct[];
|
|
@@ -51,14 +57,18 @@ export declare const APPLE_LISTING_PRODUCTS: readonly AppleListingProduct[];
|
|
|
51
57
|
export declare const APPLE_BASHPASS_PRICE_CENTS: Record<BashPassTier, number>;
|
|
52
58
|
export declare const APPLE_BASHPASS_PRODUCTS: readonly AppleBashPassProduct[];
|
|
53
59
|
export declare const APPLE_FEATURE_BOOST_PRODUCTS: readonly AppleFeatureBoostProduct[];
|
|
60
|
+
export declare const APPLE_EARLY_REVEAL_PRODUCT: AppleEarlyRevealProduct;
|
|
54
61
|
export declare const APPLE_IAP_PRODUCTS: readonly AppleIapProduct[];
|
|
55
62
|
export declare function getAppleIapProduct(productId: string): AppleIapProduct | undefined;
|
|
56
63
|
export declare function isAppleIapProductId(productId: string): boolean;
|
|
64
|
+
/** Play Console product IDs for this release. Early reveal is excluded. */
|
|
65
|
+
export declare function listPlayBillingProductIds(): string[];
|
|
57
66
|
export declare function listAppleIapProductIds(family?: AppleIapProductFamily): string[];
|
|
58
67
|
export declare function findAppleMembershipProduct(tier: Exclude<MembershipTier, "Basic" | "Guest">, interval: AppleMembershipInterval): AppleMembershipProduct | undefined;
|
|
59
68
|
export declare function findAppleListingProduct(tier: AppleListingTier): AppleListingProduct | undefined;
|
|
60
69
|
export declare function findAppleBashPassProduct(tier: BashPassTier): AppleBashPassProduct | undefined;
|
|
61
70
|
export declare function findAppleFeatureBoostProduct(durationId: (typeof FEATURE_BOOST_DURATIONS)[number]["id"]): AppleFeatureBoostProduct | undefined;
|
|
71
|
+
export declare function findAppleEarlyRevealProduct(): AppleEarlyRevealProduct;
|
|
62
72
|
/** Apple subscription management deep link (Settings → Subscriptions). */
|
|
63
73
|
export declare const APPLE_SUBSCRIPTIONS_MANAGEMENT_URL = "https://apps.apple.com/account/subscriptions";
|
|
64
74
|
//# sourceMappingURL=appleIapProducts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appleIapProducts.d.ts","sourceRoot":"","sources":["../src/appleIapProducts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAsB,MAAM,4BAA4B,CAAC;AAGzF,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GACZ,SAAS,GACT,UAAU,GACV,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"appleIapProducts.d.ts","sourceRoot":"","sources":["../src/appleIapProducts.ts"],"names":[],"mappings":"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"}
|