@bash-app/bash-common 30.386.0 → 30.393.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__/bashSectionTitleForBashType.test.js +5 -0
- package/dist/__tests__/bashSectionTitleForBashType.test.js.map +1 -1
- package/dist/__tests__/budgetApproval.test.d.ts +2 -0
- package/dist/__tests__/budgetApproval.test.d.ts.map +1 -0
- package/dist/__tests__/budgetApproval.test.js +109 -0
- package/dist/__tests__/budgetApproval.test.js.map +1 -0
- package/dist/__tests__/crewSocialCopy.test.d.ts +2 -0
- package/dist/__tests__/crewSocialCopy.test.d.ts.map +1 -0
- package/dist/__tests__/crewSocialCopy.test.js +21 -0
- package/dist/__tests__/crewSocialCopy.test.js.map +1 -0
- package/dist/__tests__/discoveryScope.test.d.ts +2 -0
- package/dist/__tests__/discoveryScope.test.d.ts.map +1 -0
- package/dist/__tests__/discoveryScope.test.js +40 -0
- package/dist/__tests__/discoveryScope.test.js.map +1 -0
- package/dist/__tests__/scenePulse.test.d.ts +2 -0
- package/dist/__tests__/scenePulse.test.d.ts.map +1 -0
- package/dist/__tests__/scenePulse.test.js +52 -0
- package/dist/__tests__/scenePulse.test.js.map +1 -0
- package/dist/__tests__/suggestedNight.test.d.ts +2 -0
- package/dist/__tests__/suggestedNight.test.d.ts.map +1 -0
- package/dist/__tests__/suggestedNight.test.js +10 -0
- package/dist/__tests__/suggestedNight.test.js.map +1 -0
- package/dist/__tests__/suggestionScore.test.d.ts +2 -0
- package/dist/__tests__/suggestionScore.test.d.ts.map +1 -0
- package/dist/__tests__/suggestionScore.test.js +68 -0
- package/dist/__tests__/suggestionScore.test.js.map +1 -0
- package/dist/__tests__/userTaste.test.d.ts +2 -0
- package/dist/__tests__/userTaste.test.d.ts.map +1 -0
- package/dist/__tests__/userTaste.test.js +21 -0
- package/dist/__tests__/userTaste.test.js.map +1 -0
- package/dist/budgetApproval.d.ts +126 -0
- package/dist/budgetApproval.d.ts.map +1 -0
- package/dist/budgetApproval.js +161 -0
- package/dist/budgetApproval.js.map +1 -0
- package/dist/crewSocialCopy.d.ts +16 -0
- package/dist/crewSocialCopy.d.ts.map +1 -0
- package/dist/crewSocialCopy.js +23 -0
- package/dist/crewSocialCopy.js.map +1 -0
- package/dist/definitions.d.ts +6 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +6 -0
- package/dist/definitions.js.map +1 -1
- package/dist/discoveryScope.d.ts +48 -0
- package/dist/discoveryScope.d.ts.map +1 -0
- package/dist/discoveryScope.js +114 -0
- package/dist/discoveryScope.js.map +1 -0
- package/dist/extendedSchemas.d.ts +7 -0
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js +8 -0
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/home.d.ts +6 -1
- package/dist/home.d.ts.map +1 -1
- package/dist/home.js +5 -1
- package/dist/home.js.map +1 -1
- package/dist/hostCrmCrowdPulse.d.ts +2 -0
- package/dist/hostCrmCrowdPulse.d.ts.map +1 -1
- package/dist/hostCrmCrowdPulse.js.map +1 -1
- package/dist/hostCrmSegments.d.ts +6 -0
- package/dist/hostCrmSegments.d.ts.map +1 -1
- package/dist/hostCrmSegments.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/scenePulse.d.ts +66 -0
- package/dist/scenePulse.d.ts.map +1 -0
- package/dist/scenePulse.js +54 -0
- package/dist/scenePulse.js.map +1 -0
- package/dist/sms/smsTemplates.d.ts +6 -1
- package/dist/sms/smsTemplates.d.ts.map +1 -1
- package/dist/sms/smsTemplates.js +1 -0
- package/dist/sms/smsTemplates.js.map +1 -1
- package/dist/suggestedNight.d.ts +12 -0
- package/dist/suggestedNight.d.ts.map +1 -0
- package/dist/suggestedNight.js +12 -0
- package/dist/suggestedNight.js.map +1 -0
- package/dist/suggestionScore.d.ts +42 -0
- package/dist/suggestionScore.d.ts.map +1 -0
- package/dist/suggestionScore.js +100 -0
- package/dist/suggestionScore.js.map +1 -0
- package/dist/userTaste.d.ts +40 -0
- package/dist/userTaste.d.ts.map +1 -0
- package/dist/userTaste.js +103 -0
- package/dist/userTaste.js.map +1 -0
- package/dist/utils/__tests__/featuredDiscoveryGeo.test.js +9 -1
- package/dist/utils/__tests__/featuredDiscoveryGeo.test.js.map +1 -1
- package/dist/utils/featuredDiscoveryGeo.d.ts +7 -0
- package/dist/utils/featuredDiscoveryGeo.d.ts.map +1 -1
- package/dist/utils/featuredDiscoveryGeo.js +11 -0
- package/dist/utils/featuredDiscoveryGeo.js.map +1 -1
- package/dist/utils/service/__tests__/foodAndBeverageQuote.test.d.ts +2 -0
- package/dist/utils/service/__tests__/foodAndBeverageQuote.test.d.ts.map +1 -0
- package/dist/utils/service/__tests__/foodAndBeverageQuote.test.js +353 -0
- package/dist/utils/service/__tests__/foodAndBeverageQuote.test.js.map +1 -0
- package/dist/utils/service/foodAndBeverageQuote.d.ts +171 -0
- package/dist/utils/service/foodAndBeverageQuote.d.ts.map +1 -0
- package/dist/utils/service/foodAndBeverageQuote.js +467 -0
- package/dist/utils/service/foodAndBeverageQuote.js.map +1 -0
- package/package.json +1 -1
- package/prisma/schema.prisma +185 -53
- package/src/__tests__/bashSectionTitleForBashType.test.ts +10 -0
- package/src/__tests__/budgetApproval.test.ts +153 -0
- package/src/__tests__/crewSocialCopy.test.ts +25 -0
- package/src/__tests__/discoveryScope.test.ts +65 -0
- package/src/__tests__/scenePulse.test.ts +69 -0
- package/src/__tests__/suggestedNight.test.ts +11 -0
- package/src/__tests__/suggestionScore.test.ts +81 -0
- package/src/__tests__/userTaste.test.ts +33 -0
- package/src/budgetApproval.ts +303 -0
- package/src/crewSocialCopy.ts +37 -0
- package/src/definitions.ts +11 -0
- package/src/discoveryScope.ts +170 -0
- package/src/extendedSchemas.ts +8 -0
- package/src/home.ts +15 -0
- package/src/hostCrmCrowdPulse.ts +2 -0
- package/src/hostCrmSegments.ts +6 -0
- package/src/index.ts +18 -3
- package/src/scenePulse.ts +113 -0
- package/src/sms/smsTemplates.ts +6 -0
- package/src/suggestedNight.ts +20 -0
- package/src/suggestionScore.ts +140 -0
- package/src/userTaste.ts +152 -0
- package/src/utils/__tests__/featuredDiscoveryGeo.test.ts +13 -0
- package/src/utils/featuredDiscoveryGeo.ts +15 -0
- package/src/utils/service/__tests__/foodAndBeverageQuote.test.ts +502 -0
- package/src/utils/service/foodAndBeverageQuote.ts +613 -0
|
@@ -41,6 +41,11 @@ describe("bashSectionTitleForBashType", () => {
|
|
|
41
41
|
it("'Ideas' → 'Ideas'", () => {
|
|
42
42
|
expect(bashSectionTitleForBashType("Ideas")).toBe("Ideas");
|
|
43
43
|
});
|
|
44
|
+
it("scope rows use destination copy", () => {
|
|
45
|
+
expect(bashSectionTitleForBashType("National")).toBe("Across the country");
|
|
46
|
+
expect(bashSectionTitleForBashType("International")).toBe("Worth the flight");
|
|
47
|
+
expect(bashSectionTitleForBashType("CrewGoing")).toBe("The crew's going");
|
|
48
|
+
});
|
|
44
49
|
});
|
|
45
50
|
describe("BashEventType enum values get pluralized", () => {
|
|
46
51
|
it("'Rave' enum → 'Raves'", () => {
|
|
@@ -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":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACzD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAClD,oBAAoB,CACrB,CAAC;YACF,MAAM,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACvD,kBAAkB,CACnB,CAAC;YACF,MAAM,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAChE,cAAc,CACf,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC9D,kBAAkB,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CACtE,oBAAoB,CACrB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAChE,eAAe,CAChB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sEAAsE,EAAE,GAAG,EAAE;QACpF,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;YACrF,MAAM,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrE,MAAM,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzE,MAAM,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;QAC5E,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sEAAsE,EAAE,GAAG,EAAE;QACpF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACvD,eAAe,CAChB,CAAC;YACF,MAAM,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC3E,MAAM,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAClD,aAAa,CAAC,UAAU,CACzB,CAAC;QACF,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC7D,aAAa,CAAC,UAAU,CACzB,CAAC;QACF,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgetApproval.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/budgetApproval.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { buildBudgetApprovalSnapshot, budgetApprovalSnapshotsMatch, eventBudgetApprovalWizardPath, formatBudgetCents, isBudgetApprovalExpired, isValidApproverEmail, normalizeApproverEmail, parseBudgetApprovalSnapshot, resolveApproverDisplayName, validateBudgetApprovalDecide, } from "../budgetApproval.js";
|
|
2
|
+
describe("budgetApproval helpers", () => {
|
|
3
|
+
it("normalizes and validates approver emails", () => {
|
|
4
|
+
expect(normalizeApproverEmail(" Pat@Acme.com ")).toBe("pat@acme.com");
|
|
5
|
+
expect(isValidApproverEmail("pat@acme.com")).toBe(true);
|
|
6
|
+
expect(isValidApproverEmail("not-an-email")).toBe(false);
|
|
7
|
+
});
|
|
8
|
+
it("hashes snapshots in a stable, order-independent way", () => {
|
|
9
|
+
const a = buildBudgetApprovalSnapshot([
|
|
10
|
+
{ id: "b", name: "DJ", category: null, totalAllocatedCents: 20000 },
|
|
11
|
+
{ id: "a", name: "Venue", category: "Rentals", totalAllocatedCents: 10000 },
|
|
12
|
+
]);
|
|
13
|
+
const b = buildBudgetApprovalSnapshot([
|
|
14
|
+
{ id: "a", name: "Venue", category: "Rentals", totalAllocatedCents: 10000 },
|
|
15
|
+
{ id: "b", name: "DJ", category: null, totalAllocatedCents: 20000 },
|
|
16
|
+
]);
|
|
17
|
+
expect(a.totalCents).toBe(30000);
|
|
18
|
+
expect(a.hash).toBe(b.hash);
|
|
19
|
+
expect(budgetApprovalSnapshotsMatch(a.lines, parseBudgetApprovalSnapshot(b.lines))).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it("detects drift when an amount changes", () => {
|
|
22
|
+
const original = buildBudgetApprovalSnapshot([
|
|
23
|
+
{ id: "a", name: "Venue", category: null, totalAllocatedCents: 10000 },
|
|
24
|
+
]);
|
|
25
|
+
const changed = buildBudgetApprovalSnapshot([
|
|
26
|
+
{ id: "a", name: "Venue", category: null, totalAllocatedCents: 12000 },
|
|
27
|
+
]);
|
|
28
|
+
expect(budgetApprovalSnapshotsMatch(original.lines, changed.lines)).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it("requires cents on cap-ask approve and a note on request-changes", () => {
|
|
31
|
+
expect(validateBudgetApprovalDecide({
|
|
32
|
+
action: "approve",
|
|
33
|
+
kind: "CapAsk",
|
|
34
|
+
authorizedCents: 0,
|
|
35
|
+
})).toEqual({
|
|
36
|
+
ok: false,
|
|
37
|
+
error: "Enter an authorized amount greater than zero.",
|
|
38
|
+
});
|
|
39
|
+
expect(validateBudgetApprovalDecide({
|
|
40
|
+
action: "approve",
|
|
41
|
+
kind: "CapAsk",
|
|
42
|
+
authorizedCents: 50000,
|
|
43
|
+
}).ok).toBe(true);
|
|
44
|
+
expect(validateBudgetApprovalDecide({
|
|
45
|
+
action: "changes",
|
|
46
|
+
kind: "PlanSignOff",
|
|
47
|
+
})).toEqual({
|
|
48
|
+
ok: false,
|
|
49
|
+
error: "Add an overall note or a note on at least one line.",
|
|
50
|
+
});
|
|
51
|
+
expect(validateBudgetApprovalDecide({
|
|
52
|
+
action: "changes",
|
|
53
|
+
kind: "PlanSignOff",
|
|
54
|
+
lineNotes: [
|
|
55
|
+
{
|
|
56
|
+
nameSnapshot: "Venue",
|
|
57
|
+
allocatedCentsSnapshot: 10000,
|
|
58
|
+
note: "Too high",
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
}).ok).toBe(true);
|
|
62
|
+
expect(validateBudgetApprovalDecide({
|
|
63
|
+
action: "changes",
|
|
64
|
+
kind: "CapAsk",
|
|
65
|
+
lineNotes: [
|
|
66
|
+
{
|
|
67
|
+
nameSnapshot: "Venue",
|
|
68
|
+
allocatedCentsSnapshot: 10000,
|
|
69
|
+
note: "n/a",
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
})).toEqual({
|
|
73
|
+
ok: false,
|
|
74
|
+
error: "A cap ask has no budget lines to annotate.",
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
it("resolves display name decided > hint > email", () => {
|
|
78
|
+
expect(resolveApproverDisplayName({
|
|
79
|
+
decidedName: "Pat Chen",
|
|
80
|
+
hostHintName: "Boss",
|
|
81
|
+
email: "pat@acme.com",
|
|
82
|
+
})).toBe("Pat Chen");
|
|
83
|
+
expect(resolveApproverDisplayName({
|
|
84
|
+
decidedName: " ",
|
|
85
|
+
hostHintName: "Boss",
|
|
86
|
+
email: "pat@acme.com",
|
|
87
|
+
})).toBe("Boss");
|
|
88
|
+
expect(resolveApproverDisplayName({
|
|
89
|
+
decidedName: null,
|
|
90
|
+
hostHintName: null,
|
|
91
|
+
email: "pat@acme.com",
|
|
92
|
+
})).toBe("pat@acme.com");
|
|
93
|
+
});
|
|
94
|
+
it("computes expiry from expiresAt", () => {
|
|
95
|
+
expect(isBudgetApprovalExpired("2020-01-01T00:00:00.000Z", new Date("2026-01-01"))).toBe(true);
|
|
96
|
+
expect(isBudgetApprovalExpired("2030-01-01T00:00:00.000Z", new Date("2026-01-01"))).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
it("formats money and the wizard deep link", () => {
|
|
99
|
+
expect(formatBudgetCents(420000)).toBe("$4,200");
|
|
100
|
+
expect(eventBudgetApprovalWizardPath("evt-1")).toContain("/bash-event-wizard/evt-1/");
|
|
101
|
+
expect(eventBudgetApprovalWizardPath("evt-1")).toContain("budgetTab=lines");
|
|
102
|
+
});
|
|
103
|
+
it("parses invalid snapshot json as empty", () => {
|
|
104
|
+
expect(parseBudgetApprovalSnapshot(null)).toEqual([]);
|
|
105
|
+
expect(parseBudgetApprovalSnapshot("nope")).toEqual([]);
|
|
106
|
+
expect(parseBudgetApprovalSnapshot([{ id: 1 }])).toEqual([]);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=budgetApproval.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgetApproval.test.js","sourceRoot":"","sources":["../../src/__tests__/budgetApproval.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvE,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,2BAA2B,CAAC;YACpC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE;YACnE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE;SAC5E,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,2BAA2B,CAAC;YACpC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE;YAC3E,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE;SACpE,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CACJ,4BAA4B,CAAC,CAAC,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAC5E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG,2BAA2B,CAAC;YAC3C,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE;SACvE,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,2BAA2B,CAAC;YAC1C,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE;SACvE,CAAC,CAAC;QACH,MAAM,CAAC,4BAA4B,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACtE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CACJ,4BAA4B,CAAC;YAC3B,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,QAAQ;YACd,eAAe,EAAE,CAAC;SACnB,CAAC,CACH,CAAC,OAAO,CAAC;YACR,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,+CAA+C;SACvD,CAAC,CAAC;QACH,MAAM,CACJ,4BAA4B,CAAC;YAC3B,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,QAAQ;YACd,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC,EAAE,CACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,4BAA4B,CAAC;YAC3B,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,aAAa;SACpB,CAAC,CACH,CAAC,OAAO,CAAC;YACR,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,qDAAqD;SAC7D,CAAC,CAAC;QACH,MAAM,CACJ,4BAA4B,CAAC;YAC3B,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE;gBACT;oBACE,YAAY,EAAE,OAAO;oBACrB,sBAAsB,EAAE,KAAK;oBAC7B,IAAI,EAAE,UAAU;iBACjB;aACF;SACF,CAAC,CAAC,EAAE,CACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,4BAA4B,CAAC;YAC3B,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE;gBACT;oBACE,YAAY,EAAE,OAAO;oBACrB,sBAAsB,EAAE,KAAK;oBAC7B,IAAI,EAAE,KAAK;iBACZ;aACF;SACF,CAAC,CACH,CAAC,OAAO,CAAC;YACR,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,4CAA4C;SACpD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CACJ,0BAA0B,CAAC;YACzB,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,MAAM;YACpB,KAAK,EAAE,cAAc;SACtB,CAAC,CACH,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnB,MAAM,CACJ,0BAA0B,CAAC;YACzB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,MAAM;YACpB,KAAK,EAAE,cAAc;SACtB,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACf,MAAM,CACJ,0BAA0B,CAAC;YACzB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,cAAc;SACtB,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CACJ,uBAAuB,CAAC,0BAA0B,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAC5E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,uBAAuB,CAAC,0BAA0B,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAC5E,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CACtD,2BAA2B,CAC5B,CAAC;QACF,MAAM,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,2BAA2B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewSocialCopy.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/crewSocialCopy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { crewSocialProofCopy } from "../crewSocialCopy.js";
|
|
2
|
+
describe("crewSocialProofCopy", () => {
|
|
3
|
+
it("names visible crew", () => {
|
|
4
|
+
expect(crewSocialProofCopy([
|
|
5
|
+
{ displayName: "Nico", attendanceVisible: true },
|
|
6
|
+
{ displayName: "Petra", attendanceVisible: true },
|
|
7
|
+
]).line).toBe("Nico and Petra are going");
|
|
8
|
+
});
|
|
9
|
+
it("does not use a count when names are hidden", () => {
|
|
10
|
+
const copy = crewSocialProofCopy([
|
|
11
|
+
{ displayName: "Sam", attendanceVisible: false },
|
|
12
|
+
{ displayName: "Alex", attendanceVisible: false },
|
|
13
|
+
]);
|
|
14
|
+
expect(copy.line).toBe("Your crew's on this one");
|
|
15
|
+
expect(copy.named).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
it("omits the line when nobody is going", () => {
|
|
18
|
+
expect(crewSocialProofCopy([]).line).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=crewSocialCopy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewSocialCopy.test.js","sourceRoot":"","sources":["../../src/__tests__/crewSocialCopy.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CACJ,mBAAmB,CAAC;YAClB,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE;YAChD,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE;SAClD,CAAC,CAAC,IAAI,CACR,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE;YAChD,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE;SAClD,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoveryScope.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/discoveryScope.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DiscoveryScope, inferDiscoveryScopeFromText, isHostSettableDiscoveryScope, resolveDiscoveryScopeForWrite, } from "../discoveryScope.js";
|
|
2
|
+
describe("discoveryScope", () => {
|
|
3
|
+
it("lets hosts set Local and State only", () => {
|
|
4
|
+
expect(isHostSettableDiscoveryScope(DiscoveryScope.Local)).toBe(true);
|
|
5
|
+
expect(isHostSettableDiscoveryScope(DiscoveryScope.State)).toBe(true);
|
|
6
|
+
expect(isHostSettableDiscoveryScope(DiscoveryScope.National)).toBe(false);
|
|
7
|
+
expect(isHostSettableDiscoveryScope(DiscoveryScope.International)).toBe(false);
|
|
8
|
+
});
|
|
9
|
+
it("infers State from state fair copy", () => {
|
|
10
|
+
expect(inferDiscoveryScopeFromText("Utah State Fair")).toBe(DiscoveryScope.State);
|
|
11
|
+
});
|
|
12
|
+
it("infers National from destination brands", () => {
|
|
13
|
+
expect(inferDiscoveryScopeFromText("EDC Las Vegas")).toBe(DiscoveryScope.National);
|
|
14
|
+
});
|
|
15
|
+
it("infers International from world-tour language", () => {
|
|
16
|
+
expect(inferDiscoveryScopeFromText("Tomorrowland world tour")).toBe(DiscoveryScope.International);
|
|
17
|
+
});
|
|
18
|
+
it("clamps host National without a hard signal", () => {
|
|
19
|
+
expect(resolveDiscoveryScopeForWrite({
|
|
20
|
+
requested: DiscoveryScope.National,
|
|
21
|
+
role: "host",
|
|
22
|
+
title: "House party in Sugar House",
|
|
23
|
+
})).toBe(DiscoveryScope.Unspecified);
|
|
24
|
+
});
|
|
25
|
+
it("allows host National when inference already matches", () => {
|
|
26
|
+
expect(resolveDiscoveryScopeForWrite({
|
|
27
|
+
requested: DiscoveryScope.National,
|
|
28
|
+
role: "host",
|
|
29
|
+
title: "Coachella Weekend 1",
|
|
30
|
+
})).toBe(DiscoveryScope.National);
|
|
31
|
+
});
|
|
32
|
+
it("lets scrapers set National", () => {
|
|
33
|
+
expect(resolveDiscoveryScopeForWrite({
|
|
34
|
+
requested: DiscoveryScope.National,
|
|
35
|
+
role: "scraper",
|
|
36
|
+
title: "Random fest",
|
|
37
|
+
})).toBe(DiscoveryScope.National);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=discoveryScope.test.js.map
|
|
@@ -0,0 +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,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CACzD,cAAc,CAAC,KAAK,CACrB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACvD,cAAc,CAAC,QAAQ,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,2BAA2B,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CACjE,cAAc,CAAC,aAAa,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CACJ,6BAA6B,CAAC;YAC5B,SAAS,EAAE,cAAc,CAAC,QAAQ;YAClC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,4BAA4B;SACpC,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CACJ,6BAA6B,CAAC;YAC5B,SAAS,EAAE,cAAc,CAAC,QAAQ;YAClC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,qBAAqB;SAC7B,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CACJ,6BAA6B,CAAC;YAC5B,SAAS,EAAE,cAAc,CAAC,QAAQ;YAClC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,aAAa;SACrB,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenePulse.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scenePulse.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* parseScenePulseScope — city default, invalid → null.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, test } from "@jest/globals";
|
|
5
|
+
import { emptyScenePulseEnergy, normalizeScenePulseGeoOverride, parseScenePulseScope, } from "../scenePulse.js";
|
|
6
|
+
describe("parseScenePulseScope", () => {
|
|
7
|
+
test("defaults missing to city", () => {
|
|
8
|
+
expect(parseScenePulseScope(undefined)).toBe("city");
|
|
9
|
+
expect(parseScenePulseScope(null)).toBe("city");
|
|
10
|
+
expect(parseScenePulseScope("")).toBe("city");
|
|
11
|
+
});
|
|
12
|
+
test("accepts city region world", () => {
|
|
13
|
+
expect(parseScenePulseScope("city")).toBe("city");
|
|
14
|
+
expect(parseScenePulseScope("Region")).toBe("region");
|
|
15
|
+
expect(parseScenePulseScope(" WORLD ")).toBe("world");
|
|
16
|
+
});
|
|
17
|
+
test("rejects unknown values", () => {
|
|
18
|
+
expect(parseScenePulseScope("you")).toBeNull();
|
|
19
|
+
expect(parseScenePulseScope(12)).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe("normalizeScenePulseGeoOverride", () => {
|
|
23
|
+
test("returns null when city and state are blank", () => {
|
|
24
|
+
expect(normalizeScenePulseGeoOverride({})).toBeNull();
|
|
25
|
+
expect(normalizeScenePulseGeoOverride({ city: " ", state: "" })).toBeNull();
|
|
26
|
+
});
|
|
27
|
+
test("trims city and state and ignores empty sibling", () => {
|
|
28
|
+
expect(normalizeScenePulseGeoOverride({ city: " Denver ", state: " " })).toEqual({ city: "Denver", state: null });
|
|
29
|
+
expect(normalizeScenePulseGeoOverride({ city: "", state: "CO" })).toEqual({ city: null, state: "CO" });
|
|
30
|
+
});
|
|
31
|
+
test("caps overly long values", () => {
|
|
32
|
+
const city = "A".repeat(90);
|
|
33
|
+
const parsed = normalizeScenePulseGeoOverride({ city, state: "Utah" });
|
|
34
|
+
expect(parsed?.city).toHaveLength(80);
|
|
35
|
+
expect(parsed?.state).toBe("Utah");
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("emptyScenePulseEnergy", () => {
|
|
39
|
+
test("zeros every energy field", () => {
|
|
40
|
+
expect(emptyScenePulseEnergy()).toEqual({
|
|
41
|
+
liveNow: 0,
|
|
42
|
+
going: 0,
|
|
43
|
+
tonightBashes: 0,
|
|
44
|
+
tonightGoing: 0,
|
|
45
|
+
weekendBashes: 0,
|
|
46
|
+
weekendGoing: 0,
|
|
47
|
+
newThisWeek: 0,
|
|
48
|
+
namesInTheRoom: 0,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=scenePulse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenePulse.test.js","sourceRoot":"","sources":["../../src/__tests__/scenePulse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestedNight.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/suggestedNight.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { unfavoriteSuggestedNightAction } from "../suggestedNight.js";
|
|
2
|
+
describe("unfavoriteSuggestedNightAction", () => {
|
|
3
|
+
it("deletes when never reminded", () => {
|
|
4
|
+
expect(unfavoriteSuggestedNightAction(null)).toBe("delete");
|
|
5
|
+
});
|
|
6
|
+
it("dismisses after a nudge", () => {
|
|
7
|
+
expect(unfavoriteSuggestedNightAction(new Date())).toBe("dismiss");
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=suggestedNight.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestedNight.test.js","sourceRoot":"","sources":["../../src/__tests__/suggestedNight.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,8BAA8B,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestionScore.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/suggestionScore.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { DiscoveryScope } from "../discoveryScope.js";
|
|
2
|
+
import { scoreSuggestion, SUGGESTION_WEIGHTS } from "../suggestionScore.js";
|
|
3
|
+
import { UserTasteKind, UserTasteSource } from "../userTaste.js";
|
|
4
|
+
function base() {
|
|
5
|
+
return {
|
|
6
|
+
connectionsGoingVisible: 0,
|
|
7
|
+
connectionsGoingHidden: 0,
|
|
8
|
+
followedHost: false,
|
|
9
|
+
attendedHost: false,
|
|
10
|
+
eventType: "Festival",
|
|
11
|
+
causeTags: [],
|
|
12
|
+
musicGenre: null,
|
|
13
|
+
discoveryScope: DiscoveryScope.Local,
|
|
14
|
+
artistsToSee: [],
|
|
15
|
+
eventTitle: "Block party",
|
|
16
|
+
distanceMiles: 5,
|
|
17
|
+
radiusMiles: 50,
|
|
18
|
+
isFeatured: false,
|
|
19
|
+
trendingScore: 0,
|
|
20
|
+
paidFeatureTasteOverlap: false,
|
|
21
|
+
tastes: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
describe("scoreSuggestion", () => {
|
|
25
|
+
it("ranks crew going above paid taste overlap", () => {
|
|
26
|
+
const crew = scoreSuggestion({
|
|
27
|
+
...base(),
|
|
28
|
+
connectionsGoingVisible: 1,
|
|
29
|
+
});
|
|
30
|
+
const paid = scoreSuggestion({
|
|
31
|
+
...base(),
|
|
32
|
+
paidFeatureTasteOverlap: true,
|
|
33
|
+
tastes: [
|
|
34
|
+
{
|
|
35
|
+
kind: UserTasteKind.EventType,
|
|
36
|
+
value: "Festival",
|
|
37
|
+
weight: 1,
|
|
38
|
+
source: UserTasteSource.Explicit,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
expect(crew).toBeGreaterThan(SUGGESTION_WEIGHTS.paidFeatureTaste);
|
|
43
|
+
expect(crew).toBeGreaterThan(paid - SUGGESTION_WEIGHTS.explicitTaste);
|
|
44
|
+
});
|
|
45
|
+
it("lets travel taste break radius for National events only", () => {
|
|
46
|
+
const tastes = [
|
|
47
|
+
{
|
|
48
|
+
kind: UserTasteKind.DiscoveryScope,
|
|
49
|
+
value: DiscoveryScope.National,
|
|
50
|
+
weight: 1,
|
|
51
|
+
source: UserTasteSource.Explicit,
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
expect(scoreSuggestion({
|
|
55
|
+
...base(),
|
|
56
|
+
discoveryScope: DiscoveryScope.National,
|
|
57
|
+
distanceMiles: 900,
|
|
58
|
+
tastes,
|
|
59
|
+
})).toBeGreaterThan(0);
|
|
60
|
+
expect(scoreSuggestion({
|
|
61
|
+
...base(),
|
|
62
|
+
discoveryScope: DiscoveryScope.Local,
|
|
63
|
+
distanceMiles: 900,
|
|
64
|
+
tastes,
|
|
65
|
+
})).toBe(Number.NEGATIVE_INFINITY);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=suggestionScore.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestionScore.test.js","sourceRoot":"","sources":["../../src/__tests__/suggestionScore.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEjE,SAAS,IAAI;IACX,OAAO;QACL,uBAAuB,EAAE,CAAC;QAC1B,sBAAsB,EAAE,CAAC;QACzB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,EAAc;QACzB,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,cAAc,CAAC,KAAK;QACpC,YAAY,EAAE,EAAc;QAC5B,UAAU,EAAE,aAAa;QACzB,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,CAAC;QAChB,uBAAuB,EAAE,KAAK;QAC9B,MAAM,EAAE,EAKN;KACH,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,GAAG,IAAI,EAAE;YACT,uBAAuB,EAAE,CAAC;SAC3B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,GAAG,IAAI,EAAE;YACT,uBAAuB,EAAE,IAAI;YAC7B,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,aAAa,CAAC,SAAS;oBAC7B,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,CAAC;oBACT,MAAM,EAAE,eAAe,CAAC,QAAQ;iBACjC;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,CAC1B,IAAI,GAAG,kBAAkB,CAAC,aAAa,CACxC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG;YACb;gBACE,IAAI,EAAE,aAAa,CAAC,cAAc;gBAClC,KAAK,EAAE,cAAc,CAAC,QAAQ;gBAC9B,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,eAAe,CAAC,QAAQ;aACjC;SACF,CAAC;QACF,MAAM,CACJ,eAAe,CAAC;YACd,GAAG,IAAI,EAAE;YACT,cAAc,EAAE,cAAc,CAAC,QAAQ;YACvC,aAAa,EAAE,GAAG;YAClB,MAAM;SACP,CAAC,CACH,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CACJ,eAAe,CAAC;YACd,GAAG,IAAI,EAAE;YACT,cAAc,EAAE,cAAc,CAAC,KAAK;YACpC,aAAa,EAAE,GAAG;YAClB,MAAM;SACP,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userTaste.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/userTaste.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { UserTasteKind, isValidTasteValue, userHasTravelTaste } from "../userTaste.js";
|
|
2
|
+
import { DiscoveryScope } from "../discoveryScope.js";
|
|
3
|
+
describe("userTaste", () => {
|
|
4
|
+
it("accepts Festival event types and rejects junk", () => {
|
|
5
|
+
expect(isValidTasteValue(UserTasteKind.EventType, "Festival")).toBe(true);
|
|
6
|
+
expect(isValidTasteValue(UserTasteKind.EventType, "Networking")).toBe(false);
|
|
7
|
+
});
|
|
8
|
+
it("accepts cause tags and genres", () => {
|
|
9
|
+
expect(isValidTasteValue(UserTasteKind.CauseTag, "lgbtq")).toBe(true);
|
|
10
|
+
expect(isValidTasteValue(UserTasteKind.MusicGenre, "House")).toBe(true);
|
|
11
|
+
expect(isValidTasteValue(UserTasteKind.DiscoveryScope, DiscoveryScope.National)).toBe(true);
|
|
12
|
+
expect(isValidTasteValue(UserTasteKind.DiscoveryScope, DiscoveryScope.Unspecified)).toBe(false);
|
|
13
|
+
});
|
|
14
|
+
it("detects travel taste", () => {
|
|
15
|
+
expect(userHasTravelTaste([
|
|
16
|
+
{ kind: UserTasteKind.DiscoveryScope, value: DiscoveryScope.National },
|
|
17
|
+
])).toBe(true);
|
|
18
|
+
expect(userHasTravelTaste([{ kind: UserTasteKind.EventType, value: "Festival" }])).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=userTaste.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userTaste.test.js","sourceRoot":"","sources":["../../src/__tests__/userTaste.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CACnE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACnF,IAAI,CACL,CAAC;QACF,MAAM,CACJ,iBAAiB,CAAC,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC,WAAW,CAAC,CAC5E,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CACJ,kBAAkB,CAAC;YACjB,EAAE,IAAI,EAAE,aAAa,CAAC,cAAc,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE;SACvE,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAC3E,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event-level budget approval requests — plan sign-off and pre-plan cap asks.
|
|
3
|
+
* Shared types and validation for api + bash-app.
|
|
4
|
+
*/
|
|
5
|
+
export declare const BUDGET_APPROVAL_TTL_DAYS = 14;
|
|
6
|
+
export declare const BudgetApprovalKind: {
|
|
7
|
+
readonly CapAsk: "CapAsk";
|
|
8
|
+
readonly PlanSignOff: "PlanSignOff";
|
|
9
|
+
};
|
|
10
|
+
export type BudgetApprovalKind = (typeof BudgetApprovalKind)[keyof typeof BudgetApprovalKind];
|
|
11
|
+
export declare const BUDGET_APPROVAL_KINDS: readonly ["CapAsk", "PlanSignOff"];
|
|
12
|
+
export type BudgetApprovalKindName = BudgetApprovalKind;
|
|
13
|
+
export declare const BudgetApprovalStatus: {
|
|
14
|
+
readonly Pending: "Pending";
|
|
15
|
+
readonly Approved: "Approved";
|
|
16
|
+
readonly ChangesRequested: "ChangesRequested";
|
|
17
|
+
readonly Declined: "Declined";
|
|
18
|
+
readonly Cancelled: "Cancelled";
|
|
19
|
+
readonly Superseded: "Superseded";
|
|
20
|
+
};
|
|
21
|
+
export type BudgetApprovalStatus = (typeof BudgetApprovalStatus)[keyof typeof BudgetApprovalStatus];
|
|
22
|
+
export declare const BUDGET_APPROVAL_STATUSES: readonly ["Pending", "Approved", "ChangesRequested", "Declined", "Cancelled", "Superseded"];
|
|
23
|
+
export type BudgetApprovalStatusName = BudgetApprovalStatus;
|
|
24
|
+
export declare const BUDGET_APPROVAL_ACTIONS: readonly ["approve", "changes", "decline"];
|
|
25
|
+
export type BudgetApprovalAction = (typeof BUDGET_APPROVAL_ACTIONS)[number];
|
|
26
|
+
export type BudgetApprovalSnapshotLine = {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
category: string | null;
|
|
30
|
+
totalAllocatedCents: number;
|
|
31
|
+
};
|
|
32
|
+
export type BudgetApprovalLineNoteInput = {
|
|
33
|
+
budgetId?: string | null;
|
|
34
|
+
nameSnapshot: string;
|
|
35
|
+
categorySnapshot?: string | null;
|
|
36
|
+
allocatedCentsSnapshot: number;
|
|
37
|
+
note: string;
|
|
38
|
+
};
|
|
39
|
+
export type BudgetApprovalDecideInput = {
|
|
40
|
+
action: BudgetApprovalAction;
|
|
41
|
+
kind: BudgetApprovalKindName;
|
|
42
|
+
approverName?: string | null;
|
|
43
|
+
decisionNote?: string | null;
|
|
44
|
+
authorizedCents?: number | null;
|
|
45
|
+
lineNotes?: BudgetApprovalLineNoteInput[] | null;
|
|
46
|
+
};
|
|
47
|
+
export declare function normalizeApproverEmail(email: string): string;
|
|
48
|
+
export declare function isValidApproverEmail(email: string): boolean;
|
|
49
|
+
export declare function isBudgetApprovalKind(value: string): value is BudgetApprovalKindName;
|
|
50
|
+
export declare function isBudgetApprovalAction(value: string): value is BudgetApprovalAction;
|
|
51
|
+
export declare function isBudgetApprovalExpired(expiresAt: Date | string, now?: Date): boolean;
|
|
52
|
+
export declare function buildBudgetApprovalSnapshot(lines: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
category?: string | null;
|
|
56
|
+
totalAllocatedCents: number;
|
|
57
|
+
}>): {
|
|
58
|
+
lines: BudgetApprovalSnapshotLine[];
|
|
59
|
+
totalCents: number;
|
|
60
|
+
hash: string;
|
|
61
|
+
};
|
|
62
|
+
export declare function budgetApprovalSnapshotHash(lines: BudgetApprovalSnapshotLine[]): string;
|
|
63
|
+
export declare function parseBudgetApprovalSnapshot(json: unknown): BudgetApprovalSnapshotLine[];
|
|
64
|
+
export declare function budgetApprovalSnapshotsMatch(current: BudgetApprovalSnapshotLine[], snapshot: BudgetApprovalSnapshotLine[]): boolean;
|
|
65
|
+
export declare function validateBudgetApprovalDecide(input: BudgetApprovalDecideInput): {
|
|
66
|
+
ok: true;
|
|
67
|
+
} | {
|
|
68
|
+
ok: false;
|
|
69
|
+
error: string;
|
|
70
|
+
};
|
|
71
|
+
export declare function resolveApproverDisplayName(params: {
|
|
72
|
+
decidedName?: string | null;
|
|
73
|
+
hostHintName?: string | null;
|
|
74
|
+
email: string;
|
|
75
|
+
}): string;
|
|
76
|
+
export declare function formatBudgetCents(cents: number): string;
|
|
77
|
+
export declare function eventBudgetApprovalWizardPath(bashEventId: string): string;
|
|
78
|
+
export type BudgetApprovalPublicDto = {
|
|
79
|
+
kind: BudgetApprovalKindName;
|
|
80
|
+
status: BudgetApprovalStatusName;
|
|
81
|
+
hostNote: string | null;
|
|
82
|
+
hostDisplayName: string;
|
|
83
|
+
event: {
|
|
84
|
+
id: string;
|
|
85
|
+
title: string;
|
|
86
|
+
startDateTime: string | null;
|
|
87
|
+
slug: string | null;
|
|
88
|
+
};
|
|
89
|
+
snapshotLines: BudgetApprovalSnapshotLine[];
|
|
90
|
+
snapshotTotalCents: number;
|
|
91
|
+
expiresAt: string;
|
|
92
|
+
expired: boolean;
|
|
93
|
+
alreadyDecided: boolean;
|
|
94
|
+
eventIsPubliclyViewable: boolean;
|
|
95
|
+
};
|
|
96
|
+
export type BudgetApprovalHostDto = {
|
|
97
|
+
id: string;
|
|
98
|
+
kind: BudgetApprovalKindName;
|
|
99
|
+
status: BudgetApprovalStatusName;
|
|
100
|
+
approverEmail: string;
|
|
101
|
+
approverName: string | null;
|
|
102
|
+
hostNote: string | null;
|
|
103
|
+
decisionNote: string | null;
|
|
104
|
+
authorizedCents: number | null;
|
|
105
|
+
snapshotTotalCents: number;
|
|
106
|
+
staleAt: string | null;
|
|
107
|
+
decidedAt: string | null;
|
|
108
|
+
expiresAt: string;
|
|
109
|
+
createdAt: string;
|
|
110
|
+
isExpired: boolean;
|
|
111
|
+
emailError?: boolean;
|
|
112
|
+
lineNotes: Array<{
|
|
113
|
+
budgetId: string | null;
|
|
114
|
+
nameSnapshot: string;
|
|
115
|
+
categorySnapshot: string | null;
|
|
116
|
+
allocatedCentsSnapshot: number;
|
|
117
|
+
note: string;
|
|
118
|
+
}>;
|
|
119
|
+
};
|
|
120
|
+
export type BudgetApprovalHostSummary = {
|
|
121
|
+
latest: BudgetApprovalHostDto | null;
|
|
122
|
+
history: BudgetApprovalHostDto[];
|
|
123
|
+
planMatchesSnapshot: boolean;
|
|
124
|
+
currentAuthorizedCents: number | null;
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=budgetApproval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgetApproval.d.ts","sourceRoot":"","sources":["../src/budgetApproval.ts"],"names":[],"mappings":"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"}
|