@stamhoofd/structures 2.4.0 → 2.6.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.
Files changed (275) hide show
  1. package/dist/index.d.ts +1 -7
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -7
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/BalanceItemDetailed.d.ts +11 -3
  6. package/dist/src/BalanceItemDetailed.d.ts.map +1 -1
  7. package/dist/src/BalanceItemDetailed.js +15 -7
  8. package/dist/src/BalanceItemDetailed.js.map +1 -1
  9. package/dist/src/DefaultAgeGroup.d.ts +2 -0
  10. package/dist/src/DefaultAgeGroup.d.ts.map +1 -1
  11. package/dist/src/DefaultAgeGroup.js +8 -0
  12. package/dist/src/DefaultAgeGroup.js.map +1 -1
  13. package/dist/src/Event.d.ts +13 -2
  14. package/dist/src/Event.d.ts.map +1 -1
  15. package/dist/src/Event.js +36 -3
  16. package/dist/src/Event.js.map +1 -1
  17. package/dist/src/Group.d.ts +10 -0
  18. package/dist/src/Group.d.ts.map +1 -1
  19. package/dist/src/Group.js +17 -2
  20. package/dist/src/Group.js.map +1 -1
  21. package/dist/src/GroupSettings.d.ts +59 -6
  22. package/dist/src/GroupSettings.d.ts.map +1 -1
  23. package/dist/src/GroupSettings.js +201 -16
  24. package/dist/src/GroupSettings.js.map +1 -1
  25. package/dist/src/Organization.js +2 -2
  26. package/dist/src/Organization.js.map +1 -1
  27. package/dist/src/RegistrationPeriod.d.ts +1 -0
  28. package/dist/src/RegistrationPeriod.d.ts.map +1 -1
  29. package/dist/src/RegistrationPeriod.js +3 -0
  30. package/dist/src/RegistrationPeriod.js.map +1 -1
  31. package/dist/src/StockReservation.d.ts +20 -0
  32. package/dist/src/StockReservation.d.ts.map +1 -0
  33. package/dist/src/StockReservation.js +91 -0
  34. package/dist/src/StockReservation.js.map +1 -0
  35. package/dist/src/Version.d.ts +1 -1
  36. package/dist/src/Version.js +1 -1
  37. package/dist/src/addresses/Address.d.ts +4 -0
  38. package/dist/src/addresses/Address.d.ts.map +1 -1
  39. package/dist/src/addresses/Address.js +6 -0
  40. package/dist/src/addresses/Address.js.map +1 -1
  41. package/dist/src/billing/STPackageBundle.js +6 -6
  42. package/dist/src/billing/STPackageBundle.js.map +1 -1
  43. package/dist/src/email/EditorSmartVariable.d.ts.map +1 -1
  44. package/dist/src/email/EditorSmartVariable.js +6 -11
  45. package/dist/src/email/EditorSmartVariable.js.map +1 -1
  46. package/dist/src/members/Member.d.ts +7 -0
  47. package/dist/src/members/Member.d.ts.map +1 -1
  48. package/dist/src/members/Member.js +34 -1
  49. package/dist/src/members/Member.js.map +1 -1
  50. package/dist/src/members/MemberDetails.d.ts +8 -8
  51. package/dist/src/members/MemberDetails.d.ts.map +1 -1
  52. package/dist/src/members/MemberDetails.js +85 -42
  53. package/dist/src/members/MemberDetails.js.map +1 -1
  54. package/dist/src/members/MemberPlatformMembership.d.ts +1 -0
  55. package/dist/src/members/MemberPlatformMembership.d.ts.map +1 -1
  56. package/dist/src/members/MemberPlatformMembership.js +3 -0
  57. package/dist/src/members/MemberPlatformMembership.js.map +1 -1
  58. package/dist/src/members/OrganizationRecordsConfiguration.d.ts +13 -0
  59. package/dist/src/members/OrganizationRecordsConfiguration.d.ts.map +1 -1
  60. package/dist/src/members/OrganizationRecordsConfiguration.js +49 -0
  61. package/dist/src/members/OrganizationRecordsConfiguration.js.map +1 -1
  62. package/dist/src/members/PaymentDetailed.d.ts +3 -0
  63. package/dist/src/members/PaymentDetailed.d.ts.map +1 -1
  64. package/dist/src/members/PaymentDetailed.js +7 -8
  65. package/dist/src/members/PaymentDetailed.js.map +1 -1
  66. package/dist/src/members/PaymentGeneral.d.ts +5 -2
  67. package/dist/src/members/PaymentGeneral.d.ts.map +1 -1
  68. package/dist/src/members/PaymentGeneral.js +3 -5
  69. package/dist/src/members/PaymentGeneral.js.map +1 -1
  70. package/dist/src/members/PlatformMember.d.ts +9 -6
  71. package/dist/src/members/PlatformMember.d.ts.map +1 -1
  72. package/dist/src/members/PlatformMember.js +50 -35
  73. package/dist/src/members/PlatformMember.js.map +1 -1
  74. package/dist/src/members/Registration.d.ts +12 -0
  75. package/dist/src/members/Registration.d.ts.map +1 -1
  76. package/dist/src/members/Registration.js +17 -3
  77. package/dist/src/members/Registration.js.map +1 -1
  78. package/dist/src/members/RegistrationWithMember.d.ts +3 -2
  79. package/dist/src/members/RegistrationWithMember.d.ts.map +1 -1
  80. package/dist/src/members/RegistrationWithMember.js +7 -1
  81. package/dist/src/members/RegistrationWithMember.js.map +1 -1
  82. package/dist/src/members/checkout/BalanceItemCartItem.d.ts +3 -1
  83. package/dist/src/members/checkout/BalanceItemCartItem.d.ts.map +1 -1
  84. package/dist/src/members/checkout/BalanceItemCartItem.js +11 -9
  85. package/dist/src/members/checkout/BalanceItemCartItem.js.map +1 -1
  86. package/dist/src/members/checkout/RegisterCart.d.ts +17 -1
  87. package/dist/src/members/checkout/RegisterCart.d.ts.map +1 -1
  88. package/dist/src/members/checkout/RegisterCart.js +121 -12
  89. package/dist/src/members/checkout/RegisterCart.js.map +1 -1
  90. package/dist/src/members/checkout/RegisterCheckout.d.ts +46 -3
  91. package/dist/src/members/checkout/RegisterCheckout.d.ts.map +1 -1
  92. package/dist/src/members/checkout/RegisterCheckout.js +85 -4
  93. package/dist/src/members/checkout/RegisterCheckout.js.map +1 -1
  94. package/dist/src/members/checkout/RegisterItem.d.ts +57 -16
  95. package/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
  96. package/dist/src/members/checkout/RegisterItem.js +394 -126
  97. package/dist/src/members/checkout/RegisterItem.js.map +1 -1
  98. package/dist/src/members/records/RecordCategory.d.ts +1 -0
  99. package/dist/src/members/records/RecordCategory.d.ts.map +1 -1
  100. package/dist/src/members/records/RecordCategory.js +3 -0
  101. package/dist/src/members/records/RecordCategory.js.map +1 -1
  102. package/esm/dist/index.d.ts +1 -7
  103. package/esm/dist/index.d.ts.map +1 -1
  104. package/esm/dist/index.js +1 -7
  105. package/esm/dist/index.js.map +1 -1
  106. package/esm/dist/src/BalanceItemDetailed.d.ts +11 -3
  107. package/esm/dist/src/BalanceItemDetailed.d.ts.map +1 -1
  108. package/esm/dist/src/BalanceItemDetailed.js +15 -7
  109. package/esm/dist/src/BalanceItemDetailed.js.map +1 -1
  110. package/esm/dist/src/DefaultAgeGroup.d.ts +2 -0
  111. package/esm/dist/src/DefaultAgeGroup.d.ts.map +1 -1
  112. package/esm/dist/src/DefaultAgeGroup.js +8 -0
  113. package/esm/dist/src/DefaultAgeGroup.js.map +1 -1
  114. package/esm/dist/src/Event.d.ts +13 -2
  115. package/esm/dist/src/Event.d.ts.map +1 -1
  116. package/esm/dist/src/Event.js +34 -2
  117. package/esm/dist/src/Event.js.map +1 -1
  118. package/esm/dist/src/Group.d.ts +10 -0
  119. package/esm/dist/src/Group.d.ts.map +1 -1
  120. package/esm/dist/src/Group.js +18 -3
  121. package/esm/dist/src/Group.js.map +1 -1
  122. package/esm/dist/src/GroupSettings.d.ts +59 -6
  123. package/esm/dist/src/GroupSettings.d.ts.map +1 -1
  124. package/esm/dist/src/GroupSettings.js +201 -16
  125. package/esm/dist/src/GroupSettings.js.map +1 -1
  126. package/esm/dist/src/Organization.js +2 -2
  127. package/esm/dist/src/Organization.js.map +1 -1
  128. package/esm/dist/src/RegistrationPeriod.d.ts +1 -0
  129. package/esm/dist/src/RegistrationPeriod.d.ts.map +1 -1
  130. package/esm/dist/src/RegistrationPeriod.js +3 -0
  131. package/esm/dist/src/RegistrationPeriod.js.map +1 -1
  132. package/esm/dist/src/StockReservation.d.ts +20 -0
  133. package/esm/dist/src/StockReservation.d.ts.map +1 -0
  134. package/esm/dist/src/StockReservation.js +87 -0
  135. package/esm/dist/src/StockReservation.js.map +1 -0
  136. package/esm/dist/src/Version.d.ts +1 -1
  137. package/esm/dist/src/Version.js +1 -1
  138. package/esm/dist/src/addresses/Address.d.ts +4 -0
  139. package/esm/dist/src/addresses/Address.d.ts.map +1 -1
  140. package/esm/dist/src/addresses/Address.js +6 -0
  141. package/esm/dist/src/addresses/Address.js.map +1 -1
  142. package/esm/dist/src/billing/STPackageBundle.js +6 -6
  143. package/esm/dist/src/billing/STPackageBundle.js.map +1 -1
  144. package/esm/dist/src/email/EditorSmartVariable.d.ts.map +1 -1
  145. package/esm/dist/src/email/EditorSmartVariable.js +7 -12
  146. package/esm/dist/src/email/EditorSmartVariable.js.map +1 -1
  147. package/esm/dist/src/members/Member.d.ts +7 -0
  148. package/esm/dist/src/members/Member.d.ts.map +1 -1
  149. package/esm/dist/src/members/Member.js +32 -0
  150. package/esm/dist/src/members/Member.js.map +1 -1
  151. package/esm/dist/src/members/MemberDetails.d.ts +8 -8
  152. package/esm/dist/src/members/MemberDetails.d.ts.map +1 -1
  153. package/esm/dist/src/members/MemberDetails.js +85 -42
  154. package/esm/dist/src/members/MemberDetails.js.map +1 -1
  155. package/esm/dist/src/members/MemberPlatformMembership.d.ts +1 -0
  156. package/esm/dist/src/members/MemberPlatformMembership.d.ts.map +1 -1
  157. package/esm/dist/src/members/MemberPlatformMembership.js +3 -0
  158. package/esm/dist/src/members/MemberPlatformMembership.js.map +1 -1
  159. package/esm/dist/src/members/OrganizationRecordsConfiguration.d.ts +13 -0
  160. package/esm/dist/src/members/OrganizationRecordsConfiguration.d.ts.map +1 -1
  161. package/esm/dist/src/members/OrganizationRecordsConfiguration.js +49 -0
  162. package/esm/dist/src/members/OrganizationRecordsConfiguration.js.map +1 -1
  163. package/esm/dist/src/members/PaymentDetailed.d.ts +3 -0
  164. package/esm/dist/src/members/PaymentDetailed.d.ts.map +1 -1
  165. package/esm/dist/src/members/PaymentDetailed.js +7 -8
  166. package/esm/dist/src/members/PaymentDetailed.js.map +1 -1
  167. package/esm/dist/src/members/PaymentGeneral.d.ts +5 -2
  168. package/esm/dist/src/members/PaymentGeneral.d.ts.map +1 -1
  169. package/esm/dist/src/members/PaymentGeneral.js +3 -5
  170. package/esm/dist/src/members/PaymentGeneral.js.map +1 -1
  171. package/esm/dist/src/members/PlatformMember.d.ts +9 -6
  172. package/esm/dist/src/members/PlatformMember.d.ts.map +1 -1
  173. package/esm/dist/src/members/PlatformMember.js +50 -35
  174. package/esm/dist/src/members/PlatformMember.js.map +1 -1
  175. package/esm/dist/src/members/Registration.d.ts +12 -0
  176. package/esm/dist/src/members/Registration.d.ts.map +1 -1
  177. package/esm/dist/src/members/Registration.js +18 -4
  178. package/esm/dist/src/members/Registration.js.map +1 -1
  179. package/esm/dist/src/members/RegistrationWithMember.d.ts +3 -2
  180. package/esm/dist/src/members/RegistrationWithMember.d.ts.map +1 -1
  181. package/esm/dist/src/members/RegistrationWithMember.js +8 -2
  182. package/esm/dist/src/members/RegistrationWithMember.js.map +1 -1
  183. package/esm/dist/src/members/checkout/BalanceItemCartItem.d.ts +3 -1
  184. package/esm/dist/src/members/checkout/BalanceItemCartItem.d.ts.map +1 -1
  185. package/esm/dist/src/members/checkout/BalanceItemCartItem.js +11 -9
  186. package/esm/dist/src/members/checkout/BalanceItemCartItem.js.map +1 -1
  187. package/esm/dist/src/members/checkout/RegisterCart.d.ts +17 -1
  188. package/esm/dist/src/members/checkout/RegisterCart.d.ts.map +1 -1
  189. package/esm/dist/src/members/checkout/RegisterCart.js +122 -13
  190. package/esm/dist/src/members/checkout/RegisterCart.js.map +1 -1
  191. package/esm/dist/src/members/checkout/RegisterCheckout.d.ts +46 -3
  192. package/esm/dist/src/members/checkout/RegisterCheckout.d.ts.map +1 -1
  193. package/esm/dist/src/members/checkout/RegisterCheckout.js +86 -5
  194. package/esm/dist/src/members/checkout/RegisterCheckout.js.map +1 -1
  195. package/esm/dist/src/members/checkout/RegisterItem.d.ts +57 -16
  196. package/esm/dist/src/members/checkout/RegisterItem.d.ts.map +1 -1
  197. package/esm/dist/src/members/checkout/RegisterItem.js +396 -128
  198. package/esm/dist/src/members/checkout/RegisterItem.js.map +1 -1
  199. package/esm/dist/src/members/records/RecordCategory.d.ts +1 -0
  200. package/esm/dist/src/members/records/RecordCategory.d.ts.map +1 -1
  201. package/esm/dist/src/members/records/RecordCategory.js +3 -0
  202. package/esm/dist/src/members/records/RecordCategory.js.map +1 -1
  203. package/package.json +2 -2
  204. package/dist/src/GroupPrices.d.ts +0 -44
  205. package/dist/src/GroupPrices.d.ts.map +0 -1
  206. package/dist/src/GroupPrices.js +0 -119
  207. package/dist/src/GroupPrices.js.map +0 -1
  208. package/dist/src/members/MemberWithRegistrations.d.ts +0 -52
  209. package/dist/src/members/MemberWithRegistrations.d.ts.map +0 -1
  210. package/dist/src/members/MemberWithRegistrations.js +0 -156
  211. package/dist/src/members/MemberWithRegistrations.js.map +0 -1
  212. package/dist/src/members/checkout/OldRegisterCart.d.ts +0 -50
  213. package/dist/src/members/checkout/OldRegisterCart.d.ts.map +0 -1
  214. package/dist/src/members/checkout/OldRegisterCart.js +0 -207
  215. package/dist/src/members/checkout/OldRegisterCart.js.map +0 -1
  216. package/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts +0 -36
  217. package/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts.map +0 -1
  218. package/dist/src/members/checkout/OldRegisterCartPriceCalculator.js +0 -339
  219. package/dist/src/members/checkout/OldRegisterCartPriceCalculator.js.map +0 -1
  220. package/dist/src/members/checkout/OldRegisterCartValidator.d.ts +0 -35
  221. package/dist/src/members/checkout/OldRegisterCartValidator.d.ts.map +0 -1
  222. package/dist/src/members/checkout/OldRegisterCartValidator.js +0 -309
  223. package/dist/src/members/checkout/OldRegisterCartValidator.js.map +0 -1
  224. package/dist/src/members/checkout/OldRegisterCheckout.d.ts +0 -22
  225. package/dist/src/members/checkout/OldRegisterCheckout.d.ts.map +0 -1
  226. package/dist/src/members/checkout/OldRegisterCheckout.js +0 -46
  227. package/dist/src/members/checkout/OldRegisterCheckout.js.map +0 -1
  228. package/dist/src/members/checkout/OldRegisterItem.d.ts +0 -46
  229. package/dist/src/members/checkout/OldRegisterItem.d.ts.map +0 -1
  230. package/dist/src/members/checkout/OldRegisterItem.js +0 -89
  231. package/dist/src/members/checkout/OldRegisterItem.js.map +0 -1
  232. package/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts +0 -2
  233. package/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts.map +0 -1
  234. package/dist/src/members/checkout/RegisterCartPriceCalculator.test.js +0 -1076
  235. package/dist/src/members/checkout/RegisterCartPriceCalculator.test.js.map +0 -1
  236. package/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts +0 -23
  237. package/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts.map +0 -1
  238. package/dist/src/members/checkout/UnknownMemberWithRegistrations.js +0 -3
  239. package/dist/src/members/checkout/UnknownMemberWithRegistrations.js.map +0 -1
  240. package/esm/dist/src/GroupPrices.d.ts +0 -44
  241. package/esm/dist/src/GroupPrices.d.ts.map +0 -1
  242. package/esm/dist/src/GroupPrices.js +0 -114
  243. package/esm/dist/src/GroupPrices.js.map +0 -1
  244. package/esm/dist/src/members/MemberWithRegistrations.d.ts +0 -52
  245. package/esm/dist/src/members/MemberWithRegistrations.d.ts.map +0 -1
  246. package/esm/dist/src/members/MemberWithRegistrations.js +0 -152
  247. package/esm/dist/src/members/MemberWithRegistrations.js.map +0 -1
  248. package/esm/dist/src/members/checkout/OldRegisterCart.d.ts +0 -50
  249. package/esm/dist/src/members/checkout/OldRegisterCart.d.ts.map +0 -1
  250. package/esm/dist/src/members/checkout/OldRegisterCart.js +0 -202
  251. package/esm/dist/src/members/checkout/OldRegisterCart.js.map +0 -1
  252. package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts +0 -36
  253. package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.d.ts.map +0 -1
  254. package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.js +0 -334
  255. package/esm/dist/src/members/checkout/OldRegisterCartPriceCalculator.js.map +0 -1
  256. package/esm/dist/src/members/checkout/OldRegisterCartValidator.d.ts +0 -35
  257. package/esm/dist/src/members/checkout/OldRegisterCartValidator.d.ts.map +0 -1
  258. package/esm/dist/src/members/checkout/OldRegisterCartValidator.js +0 -305
  259. package/esm/dist/src/members/checkout/OldRegisterCartValidator.js.map +0 -1
  260. package/esm/dist/src/members/checkout/OldRegisterCheckout.d.ts +0 -22
  261. package/esm/dist/src/members/checkout/OldRegisterCheckout.d.ts.map +0 -1
  262. package/esm/dist/src/members/checkout/OldRegisterCheckout.js +0 -41
  263. package/esm/dist/src/members/checkout/OldRegisterCheckout.js.map +0 -1
  264. package/esm/dist/src/members/checkout/OldRegisterItem.d.ts +0 -46
  265. package/esm/dist/src/members/checkout/OldRegisterItem.d.ts.map +0 -1
  266. package/esm/dist/src/members/checkout/OldRegisterItem.js +0 -84
  267. package/esm/dist/src/members/checkout/OldRegisterItem.js.map +0 -1
  268. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts +0 -2
  269. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.d.ts.map +0 -1
  270. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.js +0 -1074
  271. package/esm/dist/src/members/checkout/RegisterCartPriceCalculator.test.js.map +0 -1
  272. package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts +0 -23
  273. package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.d.ts.map +0 -1
  274. package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.js +0 -2
  275. package/esm/dist/src/members/checkout/UnknownMemberWithRegistrations.js.map +0 -1
@@ -1,1074 +0,0 @@
1
- import { Group } from "../../Group";
2
- import { GroupCategory, GroupCategorySettings } from "../../GroupCategory";
3
- import { OldGroupPrice, OldGroupPrices } from "../../OldGroupPrices";
4
- import { GroupSettings } from "../../GroupSettings";
5
- import { PaymentConfiguration } from "../../PaymentConfiguration";
6
- import { MemberDetails } from "../MemberDetails";
7
- import { MemberWithRegistrationsBlob } from "../MemberWithRegistrationsBlob";
8
- import { Registration } from "../Registration";
9
- import { OldIDRegisterCart } from "./OldRegisterCart";
10
- import { OldIDRegisterItem } from "./OldRegisterItem";
11
- const defaultPaymentConfiguration = PaymentConfiguration.create({});
12
- describe("Test register cart price calculations", () => {
13
- test("Family discount best combination", () => {
14
- const group1 = Group.create({
15
- organizationId: 'test',
16
- periodId: 'test',
17
- settings: GroupSettings.create({
18
- registrationStartDate: new Date(),
19
- registrationEndDate: new Date(),
20
- startDate: new Date(),
21
- endDate: new Date(),
22
- oldPrices: [
23
- OldGroupPrices.create({
24
- prices: [
25
- OldGroupPrice.create({
26
- price: 60,
27
- reducedPrice: 10,
28
- }),
29
- OldGroupPrice.create({
30
- price: 40,
31
- reducedPrice: 10,
32
- }),
33
- OldGroupPrice.create({
34
- price: 20,
35
- reducedPrice: 10,
36
- })
37
- ]
38
- })
39
- ]
40
- })
41
- });
42
- //
43
- const group2 = Group.create({
44
- organizationId: 'test',
45
- periodId: 'test',
46
- settings: GroupSettings.create({
47
- registrationStartDate: new Date(),
48
- registrationEndDate: new Date(),
49
- startDate: new Date(),
50
- endDate: new Date(),
51
- oldPrices: [
52
- OldGroupPrices.create({
53
- prices: [
54
- OldGroupPrice.create({
55
- price: 60,
56
- reducedPrice: 10,
57
- }),
58
- OldGroupPrice.create({
59
- price: 40,
60
- reducedPrice: 10,
61
- }),
62
- OldGroupPrice.create({
63
- price: 10,
64
- reducedPrice: 10,
65
- })
66
- ]
67
- })
68
- ]
69
- })
70
- });
71
- const group3 = Group.create({
72
- organizationId: 'test',
73
- periodId: 'test',
74
- settings: GroupSettings.create({
75
- registrationStartDate: new Date(),
76
- registrationEndDate: new Date(),
77
- startDate: new Date(),
78
- endDate: new Date(),
79
- oldPrices: [
80
- OldGroupPrices.create({
81
- prices: [
82
- OldGroupPrice.create({
83
- price: 70,
84
- reducedPrice: 10,
85
- }),
86
- OldGroupPrice.create({
87
- price: 40,
88
- reducedPrice: 10,
89
- }),
90
- OldGroupPrice.create({
91
- price: 20,
92
- reducedPrice: 10,
93
- })
94
- ]
95
- })
96
- ]
97
- })
98
- });
99
- const category = GroupCategory.create({
100
- groupIds: [group1.id, group2.id, group3.id],
101
- settings: GroupCategorySettings.create({
102
- maximumRegistrations: 1
103
- })
104
- });
105
- const bart = MemberWithRegistrationsBlob.create({
106
- details: MemberDetails.create({}),
107
- users: [],
108
- registrations: []
109
- });
110
- const alice = MemberWithRegistrationsBlob.create({
111
- details: MemberDetails.create({}),
112
- users: [],
113
- registrations: []
114
- });
115
- const tom = MemberWithRegistrationsBlob.create({
116
- details: MemberDetails.create({}),
117
- users: [],
118
- registrations: []
119
- });
120
- const cart = OldIDRegisterCart.create({});
121
- cart.items.push(OldIDRegisterItem.create({
122
- groupId: group1.id,
123
- memberId: bart.id,
124
- reduced: false,
125
- waitingList: false
126
- }));
127
- cart.items.push(OldIDRegisterItem.create({
128
- groupId: group2.id,
129
- memberId: alice.id,
130
- reduced: false,
131
- waitingList: false
132
- }));
133
- cart.items.push(OldIDRegisterItem.create({
134
- groupId: group3.id,
135
- memberId: tom.id,
136
- reduced: false,
137
- waitingList: false
138
- }));
139
- cart.calculatePrices([bart, alice, tom], [group1, group2, group3], [category], defaultPaymentConfiguration);
140
- expect(cart.items).toHaveLength(3);
141
- // Check if Bart got the cheapest price
142
- const calculatedBart = cart.items.find(i => i.memberId === bart.id);
143
- expect(calculatedBart).toMatchObject({
144
- calculatedPrice: 60
145
- });
146
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id);
147
- expect(calculatedAlice).toMatchObject({
148
- calculatedPrice: 10
149
- });
150
- const calculatedTom = cart.items.find(i => i.memberId === tom.id);
151
- expect(calculatedTom).toMatchObject({
152
- calculatedPrice: 40
153
- });
154
- // Try in different order
155
- const cached = cart.price;
156
- cart.calculatePrices([tom, bart, alice], [group2, group1, group3], [category], defaultPaymentConfiguration);
157
- expect(cart.price).toEqual(cached);
158
- });
159
- test("Family discount 4 members", () => {
160
- const group1 = Group.create({
161
- organizationId: 'test',
162
- periodId: 'test',
163
- settings: GroupSettings.create({
164
- registrationStartDate: new Date(),
165
- registrationEndDate: new Date(),
166
- startDate: new Date(),
167
- endDate: new Date(),
168
- oldPrices: [
169
- OldGroupPrices.create({
170
- prices: [
171
- OldGroupPrice.create({
172
- price: 60,
173
- reducedPrice: 10,
174
- }),
175
- OldGroupPrice.create({
176
- price: 40,
177
- reducedPrice: 10,
178
- }),
179
- OldGroupPrice.create({
180
- price: 20,
181
- reducedPrice: 10,
182
- })
183
- ]
184
- })
185
- ]
186
- })
187
- });
188
- //
189
- const group2 = Group.create({
190
- organizationId: 'test',
191
- periodId: 'test',
192
- settings: GroupSettings.create({
193
- registrationStartDate: new Date(),
194
- registrationEndDate: new Date(),
195
- startDate: new Date(),
196
- endDate: new Date(),
197
- oldPrices: [
198
- OldGroupPrices.create({
199
- prices: [
200
- OldGroupPrice.create({
201
- price: 60,
202
- reducedPrice: 10,
203
- }),
204
- OldGroupPrice.create({
205
- price: 40,
206
- reducedPrice: 10,
207
- }),
208
- OldGroupPrice.create({
209
- price: 10
210
- })
211
- ]
212
- })
213
- ]
214
- })
215
- });
216
- const group3 = Group.create({
217
- organizationId: 'test',
218
- periodId: 'test',
219
- settings: GroupSettings.create({
220
- registrationStartDate: new Date(),
221
- registrationEndDate: new Date(),
222
- startDate: new Date(),
223
- endDate: new Date(),
224
- oldPrices: [
225
- OldGroupPrices.create({
226
- prices: [
227
- OldGroupPrice.create({
228
- price: 70,
229
- reducedPrice: 10,
230
- }),
231
- OldGroupPrice.create({
232
- price: 40,
233
- reducedPrice: 10,
234
- }),
235
- OldGroupPrice.create({
236
- price: 20,
237
- reducedPrice: 10,
238
- })
239
- ]
240
- })
241
- ]
242
- })
243
- });
244
- const group4 = Group.create({
245
- organizationId: 'test',
246
- periodId: 'test',
247
- settings: GroupSettings.create({
248
- registrationStartDate: new Date(),
249
- registrationEndDate: new Date(),
250
- startDate: new Date(),
251
- endDate: new Date(),
252
- oldPrices: [
253
- OldGroupPrices.create({
254
- prices: [
255
- OldGroupPrice.create({
256
- price: 80,
257
- })
258
- ]
259
- })
260
- ]
261
- })
262
- });
263
- const category = GroupCategory.create({
264
- groupIds: [group1.id, group2.id, group3.id, group4.id],
265
- settings: GroupCategorySettings.create({
266
- maximumRegistrations: 1
267
- })
268
- });
269
- const bart = MemberWithRegistrationsBlob.create({
270
- details: MemberDetails.create({}),
271
- users: [],
272
- registrations: []
273
- });
274
- const alice = MemberWithRegistrationsBlob.create({
275
- details: MemberDetails.create({}),
276
- users: [],
277
- registrations: []
278
- });
279
- const tom = MemberWithRegistrationsBlob.create({
280
- details: MemberDetails.create({}),
281
- users: [],
282
- registrations: []
283
- });
284
- const linda = MemberWithRegistrationsBlob.create({
285
- details: MemberDetails.create({}),
286
- users: [],
287
- registrations: []
288
- });
289
- const cart = OldIDRegisterCart.create({});
290
- cart.items.push(OldIDRegisterItem.create({
291
- groupId: group1.id,
292
- memberId: bart.id,
293
- reduced: false,
294
- waitingList: false
295
- }));
296
- cart.items.push(OldIDRegisterItem.create({
297
- groupId: group2.id,
298
- memberId: alice.id,
299
- reduced: false,
300
- waitingList: false
301
- }));
302
- cart.items.push(OldIDRegisterItem.create({
303
- groupId: group3.id,
304
- memberId: tom.id,
305
- reduced: false,
306
- waitingList: false
307
- }));
308
- cart.items.push(OldIDRegisterItem.create({
309
- groupId: group4.id,
310
- memberId: linda.id,
311
- reduced: false,
312
- waitingList: false
313
- }));
314
- cart.calculatePrices([bart, alice, tom, linda], [group1, group2, group3, group4], [category], defaultPaymentConfiguration);
315
- expect(cart.items).toHaveLength(4);
316
- // Check if Bart got the cheapest price
317
- const calculatedBart = cart.items.find(i => i.memberId === bart.id);
318
- expect(calculatedBart).toMatchObject({
319
- calculatedPrice: 40
320
- });
321
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id);
322
- expect(calculatedAlice).toMatchObject({
323
- calculatedPrice: 10
324
- });
325
- const calculatedTom = cart.items.find(i => i.memberId === tom.id);
326
- expect(calculatedTom).toMatchObject({
327
- calculatedPrice: 20
328
- });
329
- const calculatedLinda = cart.items.find(i => i.memberId === linda.id);
330
- expect(calculatedLinda).toMatchObject({
331
- calculatedPrice: 80
332
- });
333
- // Try in different order
334
- const cached = cart.price;
335
- cart.calculatePrices([tom, bart, alice, linda], [group2, group1, group3, group4], [category], defaultPaymentConfiguration);
336
- expect(cart.price).toEqual(cached);
337
- });
338
- test("With existing registration", () => {
339
- const group1 = Group.create({
340
- organizationId: 'test',
341
- periodId: 'test',
342
- settings: GroupSettings.create({
343
- registrationStartDate: new Date(),
344
- registrationEndDate: new Date(),
345
- startDate: new Date(),
346
- endDate: new Date(),
347
- oldPrices: [
348
- OldGroupPrices.create({
349
- prices: [
350
- OldGroupPrice.create({
351
- price: 60,
352
- reducedPrice: 10,
353
- }),
354
- OldGroupPrice.create({
355
- price: 40,
356
- reducedPrice: 10,
357
- }),
358
- OldGroupPrice.create({
359
- price: 20,
360
- reducedPrice: 10,
361
- })
362
- ]
363
- })
364
- ]
365
- })
366
- });
367
- //
368
- const group2 = Group.create({
369
- organizationId: 'test',
370
- periodId: 'test',
371
- settings: GroupSettings.create({
372
- registrationStartDate: new Date(),
373
- registrationEndDate: new Date(),
374
- startDate: new Date(),
375
- endDate: new Date(),
376
- oldPrices: [
377
- OldGroupPrices.create({
378
- prices: [
379
- OldGroupPrice.create({
380
- price: 60,
381
- reducedPrice: 10,
382
- }),
383
- OldGroupPrice.create({
384
- price: 40,
385
- reducedPrice: 10,
386
- }),
387
- OldGroupPrice.create({
388
- price: 10
389
- })
390
- ]
391
- })
392
- ]
393
- })
394
- });
395
- const group3 = Group.create({
396
- organizationId: 'test',
397
- periodId: 'test',
398
- settings: GroupSettings.create({
399
- registrationStartDate: new Date(),
400
- registrationEndDate: new Date(),
401
- startDate: new Date(),
402
- endDate: new Date(),
403
- oldPrices: [
404
- OldGroupPrices.create({
405
- prices: [
406
- OldGroupPrice.create({
407
- price: 70,
408
- reducedPrice: 10,
409
- }),
410
- OldGroupPrice.create({
411
- price: 40,
412
- reducedPrice: 10,
413
- }),
414
- OldGroupPrice.create({
415
- price: 20,
416
- reducedPrice: 10,
417
- })
418
- ]
419
- })
420
- ]
421
- })
422
- });
423
- const category = GroupCategory.create({
424
- groupIds: [group1.id, group2.id, group3.id],
425
- settings: GroupCategorySettings.create({
426
- maximumRegistrations: 1
427
- })
428
- });
429
- const bart = MemberWithRegistrationsBlob.create({
430
- details: MemberDetails.create({}),
431
- users: [],
432
- registrations: [
433
- Registration.create({
434
- organizationId: group1.organizationId,
435
- group: group1,
436
- cycle: group1.cycle,
437
- registeredAt: new Date()
438
- })
439
- ]
440
- });
441
- const alice = MemberWithRegistrationsBlob.create({
442
- details: MemberDetails.create({}),
443
- users: [],
444
- registrations: []
445
- });
446
- const tom = MemberWithRegistrationsBlob.create({
447
- details: MemberDetails.create({}),
448
- users: [],
449
- registrations: []
450
- });
451
- const cart = OldIDRegisterCart.create({});
452
- cart.items.push(OldIDRegisterItem.create({
453
- groupId: group2.id,
454
- memberId: alice.id,
455
- reduced: false,
456
- waitingList: false
457
- }));
458
- cart.items.push(OldIDRegisterItem.create({
459
- groupId: group3.id,
460
- memberId: tom.id,
461
- reduced: false,
462
- waitingList: false
463
- }));
464
- cart.calculatePrices([bart, alice, tom], [group1, group2, group3], [category], defaultPaymentConfiguration);
465
- expect(cart.items).toHaveLength(2);
466
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id);
467
- expect(calculatedAlice).toMatchObject({
468
- calculatedPrice: 10
469
- });
470
- const calculatedTom = cart.items.find(i => i.memberId === tom.id);
471
- expect(calculatedTom).toMatchObject({
472
- calculatedPrice: 40
473
- });
474
- // Try in different order
475
- const cached = cart.price;
476
- cart.calculatePrices([tom, bart, alice], [group2, group1, group3], [category], defaultPaymentConfiguration);
477
- expect(cart.price).toEqual(cached);
478
- });
479
- test("With two existing registration", () => {
480
- const group1 = Group.create({
481
- organizationId: 'test',
482
- periodId: 'test',
483
- settings: GroupSettings.create({
484
- registrationStartDate: new Date(),
485
- registrationEndDate: new Date(),
486
- startDate: new Date(),
487
- endDate: new Date(),
488
- oldPrices: [
489
- OldGroupPrices.create({
490
- prices: [
491
- OldGroupPrice.create({
492
- price: 60,
493
- reducedPrice: 10,
494
- }),
495
- OldGroupPrice.create({
496
- price: 40,
497
- reducedPrice: 10,
498
- }),
499
- OldGroupPrice.create({
500
- price: 20,
501
- reducedPrice: 10,
502
- })
503
- ]
504
- })
505
- ]
506
- })
507
- });
508
- //
509
- const group2 = Group.create({
510
- organizationId: 'test',
511
- periodId: 'test',
512
- settings: GroupSettings.create({
513
- registrationStartDate: new Date(),
514
- registrationEndDate: new Date(),
515
- startDate: new Date(),
516
- endDate: new Date(),
517
- oldPrices: [
518
- OldGroupPrices.create({
519
- prices: [
520
- OldGroupPrice.create({
521
- price: 60,
522
- reducedPrice: 10,
523
- }),
524
- OldGroupPrice.create({
525
- price: 40,
526
- reducedPrice: 10,
527
- }),
528
- OldGroupPrice.create({
529
- price: 10
530
- })
531
- ]
532
- })
533
- ]
534
- })
535
- });
536
- const group3 = Group.create({
537
- organizationId: 'test',
538
- periodId: 'test',
539
- settings: GroupSettings.create({
540
- registrationStartDate: new Date(),
541
- registrationEndDate: new Date(),
542
- startDate: new Date(),
543
- endDate: new Date(),
544
- oldPrices: [
545
- OldGroupPrices.create({
546
- prices: [
547
- OldGroupPrice.create({
548
- price: 70,
549
- reducedPrice: 10,
550
- }),
551
- OldGroupPrice.create({
552
- price: 40,
553
- reducedPrice: 10,
554
- }),
555
- OldGroupPrice.create({
556
- price: 20,
557
- reducedPrice: 10,
558
- })
559
- ]
560
- })
561
- ]
562
- })
563
- });
564
- const category = GroupCategory.create({
565
- groupIds: [group1.id, group2.id, group3.id],
566
- settings: GroupCategorySettings.create({
567
- maximumRegistrations: 1
568
- })
569
- });
570
- const bart = MemberWithRegistrationsBlob.create({
571
- details: MemberDetails.create({}),
572
- users: [],
573
- registrations: [
574
- Registration.create({
575
- organizationId: group1.organizationId,
576
- group: group1,
577
- cycle: group1.cycle,
578
- registeredAt: new Date()
579
- })
580
- ]
581
- });
582
- const alice = MemberWithRegistrationsBlob.create({
583
- details: MemberDetails.create({}),
584
- users: [],
585
- registrations: [
586
- Registration.create({
587
- organizationId: group1.organizationId,
588
- group: group1,
589
- cycle: group1.cycle,
590
- registeredAt: new Date()
591
- })
592
- ]
593
- });
594
- const tom = MemberWithRegistrationsBlob.create({
595
- details: MemberDetails.create({}),
596
- users: [],
597
- registrations: []
598
- });
599
- const cart = OldIDRegisterCart.create({});
600
- cart.items.push(OldIDRegisterItem.create({
601
- groupId: group2.id,
602
- memberId: alice.id,
603
- reduced: false,
604
- waitingList: false
605
- }));
606
- cart.items.push(OldIDRegisterItem.create({
607
- groupId: group3.id,
608
- memberId: tom.id,
609
- reduced: false,
610
- waitingList: false
611
- }));
612
- cart.calculatePrices([bart, alice, tom], [group1, group2, group3], [category], defaultPaymentConfiguration);
613
- expect(cart.items).toHaveLength(2);
614
- const calculatedTom = cart.items.find(i => i.memberId === tom.id);
615
- expect(calculatedTom).toMatchObject({
616
- calculatedPrice: 20
617
- });
618
- // Try in different order
619
- const cached = cart.price;
620
- cart.calculatePrices([tom, bart, alice], [group2, group1, group3], [category], defaultPaymentConfiguration);
621
- expect(cart.price).toEqual(cached);
622
- });
623
- test("With reduced price", () => {
624
- const group1 = Group.create({
625
- organizationId: 'test',
626
- periodId: 'test',
627
- settings: GroupSettings.create({
628
- registrationStartDate: new Date(),
629
- registrationEndDate: new Date(),
630
- startDate: new Date(),
631
- endDate: new Date(),
632
- oldPrices: [
633
- OldGroupPrices.create({
634
- prices: [
635
- OldGroupPrice.create({
636
- price: 60,
637
- reducedPrice: 50,
638
- }),
639
- OldGroupPrice.create({
640
- price: 40,
641
- }),
642
- OldGroupPrice.create({
643
- price: 20,
644
- })
645
- ]
646
- })
647
- ]
648
- })
649
- });
650
- const category = GroupCategory.create({
651
- groupIds: [group1.id],
652
- settings: GroupCategorySettings.create({
653
- maximumRegistrations: 1
654
- })
655
- });
656
- const bart = MemberWithRegistrationsBlob.create({
657
- details: MemberDetails.create({}),
658
- users: [],
659
- registrations: []
660
- });
661
- const alice = MemberWithRegistrationsBlob.create({
662
- details: MemberDetails.create({}),
663
- users: [],
664
- registrations: []
665
- });
666
- const tom = MemberWithRegistrationsBlob.create({
667
- details: MemberDetails.create({}),
668
- users: [],
669
- registrations: []
670
- });
671
- const cart = OldIDRegisterCart.create({});
672
- cart.items.push(OldIDRegisterItem.create({
673
- groupId: group1.id,
674
- memberId: bart.id,
675
- reduced: false,
676
- waitingList: false
677
- }));
678
- cart.items.push(OldIDRegisterItem.create({
679
- groupId: group1.id,
680
- memberId: alice.id,
681
- reduced: true,
682
- waitingList: false
683
- }));
684
- cart.items.push(OldIDRegisterItem.create({
685
- groupId: group1.id,
686
- memberId: tom.id,
687
- reduced: false,
688
- waitingList: false
689
- }));
690
- cart.calculatePrices([bart, alice, tom], [group1], [category], defaultPaymentConfiguration);
691
- expect(cart.items).toHaveLength(3);
692
- // Check if Bart got the cheapest price
693
- const calculatedBart = cart.items.find(i => i.memberId === bart.id);
694
- expect(calculatedBart).toMatchObject({
695
- calculatedPrice: 40
696
- });
697
- // Alice is the only one with the reduced price, so plan it as the first memebr without family discount
698
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id);
699
- expect(calculatedAlice).toMatchObject({
700
- calculatedPrice: 50
701
- });
702
- const calculatedTom = cart.items.find(i => i.memberId === tom.id);
703
- expect(calculatedTom).toMatchObject({
704
- calculatedPrice: 20
705
- });
706
- // Try in different order
707
- const cached = cart.price;
708
- cart.calculatePrices([tom, bart, alice], [group1], [category], defaultPaymentConfiguration);
709
- expect(cart.price).toEqual(cached);
710
- });
711
- test("Group only discounts", () => {
712
- const group1 = Group.create({
713
- organizationId: 'test',
714
- periodId: 'test',
715
- settings: GroupSettings.create({
716
- registrationStartDate: new Date(),
717
- registrationEndDate: new Date(),
718
- startDate: new Date(),
719
- endDate: new Date(),
720
- oldPrices: [
721
- OldGroupPrices.create({
722
- onlySameGroup: true,
723
- prices: [
724
- OldGroupPrice.create({
725
- price: 60,
726
- reducedPrice: 10,
727
- }),
728
- OldGroupPrice.create({
729
- price: 40,
730
- reducedPrice: 10,
731
- }),
732
- OldGroupPrice.create({
733
- price: 20,
734
- reducedPrice: 10,
735
- })
736
- ]
737
- })
738
- ]
739
- })
740
- });
741
- //
742
- const group2 = Group.create({
743
- organizationId: 'test',
744
- periodId: 'test',
745
- settings: GroupSettings.create({
746
- registrationStartDate: new Date(),
747
- registrationEndDate: new Date(),
748
- startDate: new Date(),
749
- endDate: new Date(),
750
- oldPrices: [
751
- OldGroupPrices.create({
752
- onlySameGroup: true,
753
- prices: [
754
- OldGroupPrice.create({
755
- price: 60,
756
- reducedPrice: 10,
757
- }),
758
- OldGroupPrice.create({
759
- price: 40,
760
- reducedPrice: 10,
761
- }),
762
- OldGroupPrice.create({
763
- price: 10
764
- })
765
- ]
766
- })
767
- ]
768
- })
769
- });
770
- const category = GroupCategory.create({
771
- groupIds: [group1.id, group2.id],
772
- settings: GroupCategorySettings.create({
773
- maximumRegistrations: null
774
- })
775
- });
776
- const bart = MemberWithRegistrationsBlob.create({
777
- details: MemberDetails.create({}),
778
- users: [],
779
- registrations: [
780
- Registration.create({
781
- organizationId: group2.organizationId,
782
- group: group2,
783
- cycle: group2.cycle,
784
- registeredAt: new Date()
785
- })
786
- ]
787
- });
788
- const alice = MemberWithRegistrationsBlob.create({
789
- details: MemberDetails.create({}),
790
- users: [],
791
- registrations: []
792
- });
793
- const tom = MemberWithRegistrationsBlob.create({
794
- details: MemberDetails.create({}),
795
- users: [],
796
- registrations: []
797
- });
798
- const cart = OldIDRegisterCart.create({});
799
- cart.items.push(OldIDRegisterItem.create({
800
- groupId: group1.id,
801
- memberId: bart.id,
802
- reduced: false,
803
- waitingList: false
804
- }));
805
- cart.items.push(OldIDRegisterItem.create({
806
- groupId: group2.id,
807
- memberId: alice.id,
808
- reduced: false,
809
- waitingList: false
810
- }));
811
- cart.items.push(OldIDRegisterItem.create({
812
- groupId: group2.id,
813
- memberId: tom.id,
814
- reduced: false,
815
- waitingList: false
816
- }));
817
- cart.calculatePrices([bart, alice, tom], [group1, group2], [category], defaultPaymentConfiguration);
818
- expect(cart.items).toHaveLength(3);
819
- // Check if Bart got the cheapest price
820
- const calculatedBart = cart.items.find(i => i.memberId === bart.id);
821
- expect(calculatedBart).toMatchObject({
822
- calculatedPrice: 60
823
- });
824
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id);
825
- expect(calculatedAlice).toMatchObject({
826
- calculatedPrice: 40
827
- });
828
- const calculatedTom = cart.items.find(i => i.memberId === tom.id);
829
- expect(calculatedTom).toMatchObject({
830
- calculatedPrice: 10
831
- });
832
- // Try in different order
833
- const cached = cart.price;
834
- cart.calculatePrices([tom, bart, alice], [group2, group1], [category], defaultPaymentConfiguration);
835
- expect(cart.price).toEqual(cached);
836
- });
837
- test("Discount if same member registers for multiple groups", () => {
838
- const group1 = Group.create({
839
- organizationId: 'test',
840
- periodId: 'test',
841
- settings: GroupSettings.create({
842
- registrationStartDate: new Date(),
843
- registrationEndDate: new Date(),
844
- startDate: new Date(),
845
- endDate: new Date(),
846
- oldPrices: [
847
- OldGroupPrices.create({
848
- sameMemberOnlyDiscount: true,
849
- prices: [
850
- OldGroupPrice.create({
851
- price: 60,
852
- }),
853
- OldGroupPrice.create({
854
- price: 40,
855
- }),
856
- OldGroupPrice.create({
857
- price: 20,
858
- }),
859
- OldGroupPrice.create({
860
- price: 10,
861
- })
862
- ]
863
- })
864
- ]
865
- })
866
- });
867
- //
868
- const group2 = Group.create({
869
- organizationId: 'test',
870
- periodId: 'test',
871
- settings: GroupSettings.create({
872
- registrationStartDate: new Date(),
873
- registrationEndDate: new Date(),
874
- startDate: new Date(),
875
- endDate: new Date(),
876
- oldPrices: [
877
- OldGroupPrices.create({
878
- sameMemberOnlyDiscount: true,
879
- prices: [
880
- OldGroupPrice.create({
881
- price: 100,
882
- }),
883
- OldGroupPrice.create({
884
- price: 200,
885
- })
886
- ]
887
- })
888
- ]
889
- })
890
- });
891
- const category = GroupCategory.create({
892
- groupIds: [group1.id, group2.id],
893
- settings: GroupCategorySettings.create({
894
- maximumRegistrations: null
895
- })
896
- });
897
- const bart = MemberWithRegistrationsBlob.create({
898
- details: MemberDetails.create({}),
899
- users: [],
900
- registrations: [
901
- Registration.create({
902
- organizationId: group2.organizationId,
903
- group: group2,
904
- cycle: group2.cycle,
905
- registeredAt: new Date()
906
- })
907
- ]
908
- });
909
- const alice = MemberWithRegistrationsBlob.create({
910
- details: MemberDetails.create({}),
911
- users: [],
912
- registrations: []
913
- });
914
- const cart = OldIDRegisterCart.create({});
915
- cart.items.push(OldIDRegisterItem.create({
916
- groupId: group1.id,
917
- memberId: bart.id,
918
- reduced: false,
919
- waitingList: false
920
- }));
921
- cart.items.push(OldIDRegisterItem.create({
922
- groupId: group2.id,
923
- memberId: alice.id,
924
- reduced: false,
925
- waitingList: false
926
- }));
927
- cart.items.push(OldIDRegisterItem.create({
928
- groupId: group1.id,
929
- memberId: alice.id,
930
- reduced: false,
931
- waitingList: false
932
- }));
933
- cart.calculatePrices([bart, alice], [group1, group2], [category], defaultPaymentConfiguration);
934
- expect(cart.items).toHaveLength(3);
935
- // Check if Bart got the cheapest price
936
- const calculatedBart = cart.items.find(i => i.memberId === bart.id);
937
- expect(calculatedBart).toMatchObject({
938
- calculatedPrice: 40
939
- });
940
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id && i.groupId === group2.id);
941
- expect(calculatedAlice).toMatchObject({
942
- calculatedPrice: 100
943
- });
944
- const calculatedAlice2 = cart.items.find(i => i.memberId === alice.id && i.groupId === group1.id);
945
- expect(calculatedAlice2).toMatchObject({
946
- calculatedPrice: 40
947
- });
948
- // Try in different order
949
- const cached = cart.price;
950
- cart.calculatePrices([bart, alice], [group2, group1], [category], defaultPaymentConfiguration);
951
- expect(cart.price).toEqual(cached);
952
- });
953
- test("Combination of group and category based discounts", () => {
954
- const group1 = Group.create({
955
- organizationId: 'test',
956
- periodId: 'test',
957
- settings: GroupSettings.create({
958
- registrationStartDate: new Date(),
959
- registrationEndDate: new Date(),
960
- startDate: new Date(),
961
- endDate: new Date(),
962
- oldPrices: [
963
- OldGroupPrices.create({
964
- sameMemberOnlyDiscount: false,
965
- onlySameGroup: true,
966
- prices: [
967
- OldGroupPrice.create({
968
- price: 60,
969
- }),
970
- OldGroupPrice.create({
971
- price: 40,
972
- }),
973
- OldGroupPrice.create({
974
- price: 20,
975
- }),
976
- OldGroupPrice.create({
977
- price: 10,
978
- })
979
- ]
980
- })
981
- ]
982
- })
983
- });
984
- //
985
- const group2 = Group.create({
986
- organizationId: 'test',
987
- periodId: 'test',
988
- settings: GroupSettings.create({
989
- registrationStartDate: new Date(),
990
- registrationEndDate: new Date(),
991
- startDate: new Date(),
992
- endDate: new Date(),
993
- oldPrices: [
994
- OldGroupPrices.create({
995
- sameMemberOnlyDiscount: true,
996
- onlySameGroup: false,
997
- prices: [
998
- OldGroupPrice.create({
999
- price: 100,
1000
- }),
1001
- OldGroupPrice.create({
1002
- price: 50,
1003
- }),
1004
- OldGroupPrice.create({
1005
- price: 10,
1006
- })
1007
- ]
1008
- })
1009
- ]
1010
- })
1011
- });
1012
- const category = GroupCategory.create({
1013
- groupIds: [group1.id, group2.id],
1014
- settings: GroupCategorySettings.create({
1015
- maximumRegistrations: null
1016
- })
1017
- });
1018
- const bart = MemberWithRegistrationsBlob.create({
1019
- details: MemberDetails.create({}),
1020
- users: [],
1021
- registrations: [
1022
- Registration.create({
1023
- organizationId: group2.organizationId,
1024
- group: group2,
1025
- cycle: group2.cycle,
1026
- registeredAt: new Date()
1027
- })
1028
- ]
1029
- });
1030
- const alice = MemberWithRegistrationsBlob.create({
1031
- details: MemberDetails.create({}),
1032
- users: [],
1033
- registrations: []
1034
- });
1035
- const cart = OldIDRegisterCart.create({});
1036
- cart.items.push(OldIDRegisterItem.create({
1037
- groupId: group1.id,
1038
- memberId: bart.id,
1039
- reduced: false,
1040
- waitingList: false
1041
- }));
1042
- cart.items.push(OldIDRegisterItem.create({
1043
- groupId: group2.id,
1044
- memberId: alice.id,
1045
- reduced: false,
1046
- waitingList: false
1047
- }));
1048
- cart.items.push(OldIDRegisterItem.create({
1049
- groupId: group1.id,
1050
- memberId: alice.id,
1051
- reduced: false,
1052
- waitingList: false
1053
- }));
1054
- cart.calculatePrices([bart, alice], [group1, group2], [category], defaultPaymentConfiguration);
1055
- expect(cart.items).toHaveLength(3);
1056
- const calculatedBart = cart.items.find(i => i.memberId === bart.id);
1057
- expect(calculatedBart).toMatchObject({
1058
- calculatedPrice: 60
1059
- });
1060
- const calculatedAlice = cart.items.find(i => i.memberId === alice.id && i.groupId === group2.id);
1061
- expect(calculatedAlice).toMatchObject({
1062
- calculatedPrice: 50
1063
- });
1064
- const calculatedAlice2 = cart.items.find(i => i.memberId === alice.id && i.groupId === group1.id);
1065
- expect(calculatedAlice2).toMatchObject({
1066
- calculatedPrice: 40
1067
- });
1068
- // Try in different order
1069
- const cached = cart.price;
1070
- cart.calculatePrices([bart, alice], [group2, group1], [category], defaultPaymentConfiguration);
1071
- expect(cart.price).toEqual(cached);
1072
- });
1073
- });
1074
- //# sourceMappingURL=RegisterCartPriceCalculator.test.js.map