@stevenkellner/team-conduct-api 1.0.36 → 2.0.1

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 (218) hide show
  1. package/lib/src/firebase/FirebaseConfiguration.d.ts +45 -1
  2. package/lib/src/firebase/FirebaseConfiguration.js +44 -0
  3. package/lib/src/firebase/Firestore.d.ts +196 -0
  4. package/lib/src/firebase/Firestore.js +235 -0
  5. package/lib/src/{FirestoreScheme.d.ts → firebase/FirestoreScheme.d.ts} +15 -1
  6. package/lib/src/firebase/Messaging.d.ts +64 -0
  7. package/lib/src/firebase/checkAuthentication.d.ts +37 -0
  8. package/lib/src/{checkAuthentication.js → firebase/checkAuthentication.js} +26 -1
  9. package/lib/src/firebase/index.d.ts +4 -0
  10. package/lib/src/firebase/index.js +4 -0
  11. package/lib/src/firebase/pushNotification.d.ts +39 -0
  12. package/lib/src/firebase/pushNotification.js +88 -0
  13. package/lib/src/functions/fine/add.d.ts +10 -13
  14. package/lib/src/functions/fine/add.js +3 -30
  15. package/lib/src/functions/fine/delete.d.ts +10 -13
  16. package/lib/src/functions/fine/delete.js +3 -27
  17. package/lib/src/functions/fine/update.d.ts +10 -13
  18. package/lib/src/functions/fine/update.js +3 -28
  19. package/lib/src/functions/fineTemplate/add.d.ts +6 -9
  20. package/lib/src/functions/fineTemplate/add.js +3 -12
  21. package/lib/src/functions/fineTemplate/delete.d.ts +6 -9
  22. package/lib/src/functions/fineTemplate/delete.js +3 -12
  23. package/lib/src/functions/fineTemplate/update.d.ts +6 -9
  24. package/lib/src/functions/fineTemplate/update.js +3 -12
  25. package/lib/src/functions/invitation/getInvitation.d.ts +40 -43
  26. package/lib/src/functions/invitation/getInvitation.js +57 -88
  27. package/lib/src/functions/invitation/invite.d.ts +1 -2
  28. package/lib/src/functions/invitation/invite.js +3 -18
  29. package/lib/src/functions/invitation/register.d.ts +6 -11
  30. package/lib/src/functions/invitation/register.js +3 -39
  31. package/lib/src/functions/invitation/withdraw.d.ts +1 -2
  32. package/lib/src/functions/invitation/withdraw.js +3 -13
  33. package/lib/src/functions/notification/register.d.ts +7 -10
  34. package/lib/src/functions/notification/register.js +3 -15
  35. package/lib/src/functions/notification/subscribe.d.ts +8 -11
  36. package/lib/src/functions/notification/subscribe.js +3 -14
  37. package/lib/src/functions/paypalMe/edit.d.ts +6 -9
  38. package/lib/src/functions/paypalMe/edit.js +3 -14
  39. package/lib/src/functions/person/add.d.ts +7 -10
  40. package/lib/src/functions/person/add.js +3 -12
  41. package/lib/src/functions/person/delete.d.ts +6 -9
  42. package/lib/src/functions/person/delete.js +3 -14
  43. package/lib/src/functions/person/update.d.ts +7 -10
  44. package/lib/src/functions/person/update.js +3 -13
  45. package/lib/src/functions/team/new.d.ts +9 -12
  46. package/lib/src/functions/team/new.js +3 -22
  47. package/lib/src/functions/user/kickout.d.ts +6 -9
  48. package/lib/src/functions/user/kickout.js +3 -25
  49. package/lib/src/functions/user/login.d.ts +1 -2
  50. package/lib/src/functions/user/login.js +3 -13
  51. package/lib/src/functions/user/roleEdit.d.ts +8 -11
  52. package/lib/src/functions/user/roleEdit.js +3 -18
  53. package/lib/src/index.d.ts +0 -5
  54. package/lib/src/index.js +0 -5
  55. package/lib/src/locales/de.d.ts +10 -67
  56. package/lib/src/locales/de.js +8 -0
  57. package/lib/src/locales/en.d.ts +10 -0
  58. package/lib/src/locales/en.js +19 -2
  59. package/lib/src/types/Configuration.d.ts +33 -15
  60. package/lib/src/types/Configuration.js +24 -12
  61. package/lib/src/types/Currency.d.ts +20 -0
  62. package/lib/src/types/Currency.js +19 -0
  63. package/lib/src/types/Fine.d.ts +41 -0
  64. package/lib/src/types/Fine.js +32 -0
  65. package/lib/src/types/FineAmount.d.ts +160 -9
  66. package/lib/src/types/FineAmount.js +128 -7
  67. package/lib/src/types/FineTemplate.d.ts +41 -0
  68. package/lib/src/types/FineTemplate.js +32 -0
  69. package/lib/src/types/FineTemplateRepetition.d.ts +72 -10
  70. package/lib/src/types/FineTemplateRepetition.js +66 -12
  71. package/lib/src/types/Invitation.d.ts +48 -0
  72. package/lib/src/types/Invitation.js +39 -0
  73. package/lib/src/types/Locale.d.ts +16 -0
  74. package/lib/src/types/Locale.js +16 -0
  75. package/lib/src/types/Localization.d.ts +74 -74
  76. package/lib/src/types/Localization.js +80 -41
  77. package/lib/src/types/MoneyAmount.d.ts +67 -1
  78. package/lib/src/types/MoneyAmount.js +62 -0
  79. package/lib/src/types/NotificationProperties.d.ts +70 -9
  80. package/lib/src/types/NotificationProperties.js +49 -5
  81. package/lib/src/types/PayedState.d.ts +25 -9
  82. package/lib/src/types/PayedState.js +17 -27
  83. package/lib/src/types/Person.d.ts +45 -0
  84. package/lib/src/types/Person.js +36 -0
  85. package/lib/src/types/PersonPrivateProperties.d.ts +28 -0
  86. package/lib/src/types/PersonPrivateProperties.js +25 -0
  87. package/lib/src/types/PersonSignInProperties.d.ts +30 -0
  88. package/lib/src/types/PersonSignInProperties.js +27 -0
  89. package/lib/src/types/Pluralization.d.ts +46 -0
  90. package/lib/src/types/Pluralization.js +46 -0
  91. package/lib/src/types/Team.d.ts +38 -0
  92. package/lib/src/types/Team.js +29 -0
  93. package/lib/src/types/User.d.ts +68 -3
  94. package/lib/src/types/User.js +59 -5
  95. package/lib/src/types/UserRole.d.ts +26 -4
  96. package/lib/src/types/UserRole.js +25 -9
  97. package/lib/src/types/index.d.ts +2 -0
  98. package/lib/src/types/index.js +2 -0
  99. package/lib/test/firebase/FirebaseConfiguration.test.js +155 -0
  100. package/lib/test/firebase/Firestore.test.js +46 -0
  101. package/lib/test/firebase/checkAuthentication.test.d.ts +1 -0
  102. package/lib/test/firebase/checkAuthentication.test.js +305 -0
  103. package/lib/test/firebase/firebase-utils.d.ts +32 -0
  104. package/lib/test/firebase/firebase-utils.js +131 -0
  105. package/lib/test/firebase/pushNotification.test.d.ts +1 -0
  106. package/lib/test/firebase/pushNotification.test.js +300 -0
  107. package/lib/test/locales/localization.de.test.d.ts +1 -0
  108. package/lib/test/locales/localization.de.test.js +144 -0
  109. package/lib/test/locales/localization.en.test.d.ts +1 -0
  110. package/lib/test/locales/localization.en.test.js +144 -0
  111. package/lib/test/types/Configuration.test.d.ts +1 -0
  112. package/lib/test/types/Configuration.test.js +84 -0
  113. package/lib/test/types/Currency.test.d.ts +1 -0
  114. package/lib/test/types/Currency.test.js +41 -0
  115. package/lib/test/types/Fine.test.d.ts +1 -0
  116. package/lib/test/types/Fine.test.js +265 -0
  117. package/lib/test/types/FineAmount.test.d.ts +1 -0
  118. package/lib/test/types/FineAmount.test.js +445 -0
  119. package/lib/test/types/FineTemplate.test.d.ts +1 -0
  120. package/lib/test/types/FineTemplate.test.js +271 -0
  121. package/lib/test/types/FineTemplateRepetition.test.d.ts +1 -0
  122. package/lib/test/types/FineTemplateRepetition.test.js +361 -0
  123. package/lib/test/types/Invitation.test.d.ts +1 -0
  124. package/lib/test/types/Invitation.test.js +269 -0
  125. package/lib/test/types/Locale.test.d.ts +1 -0
  126. package/lib/test/types/Locale.test.js +46 -0
  127. package/lib/test/types/Localization.test.d.ts +1 -0
  128. package/lib/test/types/Localization.test.js +241 -0
  129. package/lib/test/types/MoneyAmount.test.d.ts +1 -0
  130. package/lib/test/types/MoneyAmount.test.js +276 -0
  131. package/lib/test/types/NotificationProperties.test.d.ts +1 -0
  132. package/lib/test/types/NotificationProperties.test.js +258 -0
  133. package/lib/test/types/PayedState.test.d.ts +1 -0
  134. package/lib/test/types/PayedState.test.js +105 -0
  135. package/lib/test/types/Person.test.d.ts +1 -0
  136. package/lib/test/types/Person.test.js +266 -0
  137. package/lib/test/types/PersonPrivateProperties.test.d.ts +1 -0
  138. package/lib/test/types/PersonPrivateProperties.test.js +155 -0
  139. package/lib/test/types/PersonSignInProperties.test.d.ts +1 -0
  140. package/lib/test/types/PersonSignInProperties.test.js +208 -0
  141. package/lib/test/types/Pluralization.test.d.ts +1 -0
  142. package/lib/test/types/Pluralization.test.js +206 -0
  143. package/lib/test/types/Team.test.d.ts +1 -0
  144. package/lib/test/types/Team.test.js +145 -0
  145. package/lib/test/types/User.test.d.ts +1 -0
  146. package/lib/test/types/User.test.js +232 -0
  147. package/lib/test/types/UserRole.test.d.ts +1 -0
  148. package/lib/test/types/UserRole.test.js +140 -0
  149. package/lib/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +10 -9
  151. package/src/firebase/FirebaseConfiguration.ts +49 -1
  152. package/src/firebase/Firestore.ts +248 -0
  153. package/src/{FirestoreScheme.ts → firebase/FirestoreScheme.ts} +15 -1
  154. package/src/firebase/Messaging.ts +64 -0
  155. package/src/{checkAuthentication.ts → firebase/checkAuthentication.ts} +39 -1
  156. package/src/firebase/index.ts +5 -0
  157. package/src/firebase/pushNotification.ts +90 -0
  158. package/src/functions/fine/add.ts +10 -48
  159. package/src/functions/fine/delete.ts +9 -43
  160. package/src/functions/fine/update.ts +10 -44
  161. package/src/functions/fineTemplate/add.ts +7 -23
  162. package/src/functions/fineTemplate/delete.ts +7 -23
  163. package/src/functions/fineTemplate/update.ts +7 -24
  164. package/src/functions/index.ts +0 -1
  165. package/src/functions/invitation/getInvitation.ts +81 -118
  166. package/src/functions/invitation/invite.ts +2 -25
  167. package/src/functions/invitation/register.ts +9 -60
  168. package/src/functions/invitation/withdraw.ts +2 -16
  169. package/src/functions/notification/register.ts +7 -26
  170. package/src/functions/notification/subscribe.ts +8 -26
  171. package/src/functions/paypalMe/edit.ts +7 -25
  172. package/src/functions/person/add.ts +8 -24
  173. package/src/functions/person/delete.ts +6 -25
  174. package/src/functions/person/update.ts +8 -25
  175. package/src/functions/team/new.ts +12 -42
  176. package/src/functions/user/kickout.ts +8 -41
  177. package/src/functions/user/login.ts +2 -16
  178. package/src/functions/user/roleEdit.ts +8 -32
  179. package/src/index.ts +0 -5
  180. package/src/locales/de.ts +10 -1
  181. package/src/locales/en.ts +21 -2
  182. package/src/types/Configuration.ts +33 -23
  183. package/src/types/Currency.ts +24 -0
  184. package/src/types/Fine.ts +41 -0
  185. package/src/types/FineAmount.ts +162 -11
  186. package/src/types/FineTemplate.ts +41 -0
  187. package/src/types/FineTemplateRepetition.ts +75 -17
  188. package/src/types/Invitation.ts +48 -0
  189. package/src/types/Locale.ts +20 -0
  190. package/src/types/Localization.ts +96 -41
  191. package/src/types/MoneyAmount.ts +67 -1
  192. package/src/types/NotificationProperties.ts +67 -9
  193. package/src/types/PayedState.ts +25 -30
  194. package/src/types/Person.ts +45 -0
  195. package/src/types/PersonPrivateProperties.ts +28 -1
  196. package/src/types/PersonSignInProperties.ts +30 -0
  197. package/src/types/Pluralization.ts +46 -0
  198. package/src/types/Team.ts +38 -0
  199. package/src/types/User.ts +70 -4
  200. package/src/types/UserRole.ts +32 -16
  201. package/src/types/index.ts +2 -0
  202. package/lib/src/Firestore.d.ts +0 -24
  203. package/lib/src/Firestore.js +0 -62
  204. package/lib/src/checkAuthentication.d.ts +0 -6
  205. package/lib/src/firebaseFunctionsContext.d.ts +0 -39
  206. package/lib/src/firebaseFunctionsContext.js +0 -43
  207. package/lib/src/pushNotification.d.ts +0 -3
  208. package/lib/src/pushNotification.js +0 -35
  209. package/lib/test/localization-utils.d.ts +0 -1
  210. package/lib/test/localization-utils.js +0 -24
  211. package/lib/test/localization.de.test.js +0 -151
  212. package/lib/test/localization.en.test.js +0 -145
  213. package/src/Firestore.ts +0 -75
  214. package/src/firebaseFunctionsContext.ts +0 -48
  215. package/src/pushNotification.ts +0 -37
  216. /package/lib/src/{FirestoreScheme.js → firebase/FirestoreScheme.js} +0 -0
  217. /package/lib/test/{localization.de.test.d.ts → firebase/FirebaseConfiguration.test.d.ts} +0 -0
  218. /package/lib/test/{localization.en.test.d.ts → firebase/Firestore.test.d.ts} +0 -0
@@ -0,0 +1,445 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@assertive-ts/core");
4
+ const FineAmount_1 = require("../../src/types/FineAmount");
5
+ const MoneyAmount_1 = require("../../src/types/MoneyAmount");
6
+ const Configuration_1 = require("../../src/types/Configuration");
7
+ describe('FineAmount', () => {
8
+ describe('FineAmount.Money', () => {
9
+ describe('FineAmount.Money constructor', () => {
10
+ it('should create money fine amount', () => {
11
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
12
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
13
+ (0, core_1.expect)(fineAmount.amount).toBeEqual(amount);
14
+ });
15
+ it('should create money fine amount with zero', () => {
16
+ const amount = MoneyAmount_1.MoneyAmount.zero;
17
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
18
+ (0, core_1.expect)(fineAmount.amount.completeValue).toBeEqual(0);
19
+ });
20
+ it('should create money fine amount with large value', () => {
21
+ const amount = new MoneyAmount_1.MoneyAmount(1000, 99);
22
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
23
+ (0, core_1.expect)(fineAmount.amount.value).toBeEqual(1000);
24
+ (0, core_1.expect)(fineAmount.amount.subunitValue).toBeEqual(99);
25
+ });
26
+ });
27
+ describe('FineAmount.Money.formatted', () => {
28
+ it('should format money with USD and en locale', () => {
29
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
30
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
31
+ const config = new Configuration_1.Configuration('USD', 'en');
32
+ const formatted = fineAmount.formatted(config);
33
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
34
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
35
+ });
36
+ it('should format money with EUR and de locale', () => {
37
+ const amount = new MoneyAmount_1.MoneyAmount(15, 75);
38
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
39
+ const config = new Configuration_1.Configuration('EUR', 'de');
40
+ const formatted = fineAmount.formatted(config);
41
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
42
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
43
+ });
44
+ it('should format zero amount', () => {
45
+ const fineAmount = new FineAmount_1.FineAmount.Money(MoneyAmount_1.MoneyAmount.zero);
46
+ const config = new Configuration_1.Configuration('USD', 'en');
47
+ const formatted = fineAmount.formatted(config);
48
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
49
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
50
+ });
51
+ it('should format large amounts', () => {
52
+ const amount = new MoneyAmount_1.MoneyAmount(1000, 0);
53
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
54
+ const config = new Configuration_1.Configuration('USD', 'en');
55
+ const formatted = fineAmount.formatted(config);
56
+ (0, core_1.expect)(formatted.includes('1000') || formatted.includes('1,000')).toBeTrue();
57
+ });
58
+ });
59
+ describe('FineAmount.Money.multiplied', () => {
60
+ it('should multiply money amount by integer', () => {
61
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
62
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
63
+ const multiplied = fineAmount.multiplied(2);
64
+ (0, core_1.expect)(multiplied.amount.value).toBeEqual(21);
65
+ (0, core_1.expect)(multiplied.amount.subunitValue).toBeEqual(0);
66
+ });
67
+ it('should multiply money amount by zero', () => {
68
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
69
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
70
+ const multiplied = fineAmount.multiplied(0);
71
+ (0, core_1.expect)(multiplied.amount.completeValue).toBeEqual(0);
72
+ });
73
+ it('should multiply money amount by decimal', () => {
74
+ const amount = new MoneyAmount_1.MoneyAmount(10, 0);
75
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
76
+ const multiplied = fineAmount.multiplied(1.5);
77
+ (0, core_1.expect)(multiplied.amount.value).toBeEqual(15);
78
+ });
79
+ it('should not modify original amount', () => {
80
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
81
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
82
+ fineAmount.multiplied(3);
83
+ (0, core_1.expect)(fineAmount.amount.value).toBeEqual(10);
84
+ (0, core_1.expect)(fineAmount.amount.subunitValue).toBeEqual(50);
85
+ });
86
+ it('should return new Money instance', () => {
87
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
88
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
89
+ const multiplied = fineAmount.multiplied(2);
90
+ (0, core_1.expect)(multiplied).not.toBeEqual(fineAmount);
91
+ });
92
+ });
93
+ describe('FineAmount.Money.flatten', () => {
94
+ it('should return flattened representation', () => {
95
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
96
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
97
+ const flattened = fineAmount.flatten;
98
+ (0, core_1.expect)(flattened.type).toBeEqual('money');
99
+ (0, core_1.expect)(flattened.amount).toBeEqual(10.5);
100
+ });
101
+ it('should flatten zero amount', () => {
102
+ const fineAmount = new FineAmount_1.FineAmount.Money(MoneyAmount_1.MoneyAmount.zero);
103
+ const flattened = fineAmount.flatten;
104
+ (0, core_1.expect)(flattened.type).toBeEqual('money');
105
+ (0, core_1.expect)(flattened.amount).toBeEqual(0);
106
+ });
107
+ it('should have correct structure', () => {
108
+ const amount = new MoneyAmount_1.MoneyAmount(15, 75);
109
+ const fineAmount = new FineAmount_1.FineAmount.Money(amount);
110
+ const flattened = fineAmount.flatten;
111
+ (0, core_1.expect)(typeof flattened.type).toBeEqual('string');
112
+ (0, core_1.expect)(typeof flattened.amount).toBeEqual('number');
113
+ });
114
+ });
115
+ describe('FineAmount.Money.TypeBuilder', () => {
116
+ it('should build money from flattened data', () => {
117
+ const flattened = {
118
+ type: 'money',
119
+ amount: 10.5
120
+ };
121
+ const fineAmount = FineAmount_1.FineAmount.Money.builder.build(flattened);
122
+ (0, core_1.expect)(fineAmount.amount.value).toBeEqual(10);
123
+ (0, core_1.expect)(fineAmount.amount.subunitValue).toBeEqual(50);
124
+ });
125
+ it('should build money from zero', () => {
126
+ const flattened = {
127
+ type: 'money',
128
+ amount: 0
129
+ };
130
+ const fineAmount = FineAmount_1.FineAmount.Money.builder.build(flattened);
131
+ (0, core_1.expect)(fineAmount.amount.completeValue).toBeEqual(0);
132
+ });
133
+ it('should round-trip through flatten and build', () => {
134
+ const amount = new MoneyAmount_1.MoneyAmount(15, 75);
135
+ const original = new FineAmount_1.FineAmount.Money(amount);
136
+ const rebuilt = FineAmount_1.FineAmount.Money.builder.build(original.flatten);
137
+ (0, core_1.expect)(rebuilt.amount.value).toBeEqual(original.amount.value);
138
+ (0, core_1.expect)(rebuilt.amount.subunitValue).toBeEqual(original.amount.subunitValue);
139
+ });
140
+ });
141
+ });
142
+ describe('FineAmount.Item', () => {
143
+ describe('FineAmount.Item.Type', () => {
144
+ describe('FineAmount.Item.Type type', () => {
145
+ it('should be valid item type', () => {
146
+ const itemType = 'crateOfBeer';
147
+ (0, core_1.expect)(itemType).toBeEqual('crateOfBeer');
148
+ });
149
+ });
150
+ describe('FineAmount.Item.Type.all', () => {
151
+ it('should contain all item types', () => {
152
+ (0, core_1.expect)(FineAmount_1.FineAmount.Item.Type.all.length).toBeEqual(1);
153
+ });
154
+ it('should contain crateOfBeer', () => {
155
+ (0, core_1.expect)(FineAmount_1.FineAmount.Item.Type.all.includes('crateOfBeer')).toBeTrue();
156
+ });
157
+ it('should be readonly', () => {
158
+ (0, core_1.expect)(Array.isArray(FineAmount_1.FineAmount.Item.Type.all)).toBeTrue();
159
+ });
160
+ });
161
+ describe('FineAmount.Item.Type.formatted', () => {
162
+ it('should format item type with en locale', () => {
163
+ const formatted = FineAmount_1.FineAmount.Item.Type.formatted('crateOfBeer', 'en');
164
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
165
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
166
+ });
167
+ it('should format item type with de locale', () => {
168
+ const formatted = FineAmount_1.FineAmount.Item.Type.formatted('crateOfBeer', 'de');
169
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
170
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
171
+ });
172
+ it('should format all item types', () => {
173
+ FineAmount_1.FineAmount.Item.Type.all.forEach(itemType => {
174
+ const enFormatted = FineAmount_1.FineAmount.Item.Type.formatted(itemType, 'en');
175
+ const deFormatted = FineAmount_1.FineAmount.Item.Type.formatted(itemType, 'de');
176
+ (0, core_1.expect)(enFormatted.length).not.toBeEqual(0);
177
+ (0, core_1.expect)(deFormatted.length).not.toBeEqual(0);
178
+ });
179
+ });
180
+ });
181
+ });
182
+ describe('FineAmount.Item constructor', () => {
183
+ it('should create item fine amount', () => {
184
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
185
+ (0, core_1.expect)(fineAmount.item).toBeEqual('crateOfBeer');
186
+ (0, core_1.expect)(fineAmount.count).toBeEqual(2);
187
+ });
188
+ it('should create item fine amount with zero count', () => {
189
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 0);
190
+ (0, core_1.expect)(fineAmount.count).toBeEqual(0);
191
+ });
192
+ it('should create item fine amount with large count', () => {
193
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 100);
194
+ (0, core_1.expect)(fineAmount.count).toBeEqual(100);
195
+ });
196
+ });
197
+ describe('FineAmount.Item.formatted', () => {
198
+ describe('formatted with locale', () => {
199
+ it('should format item with en locale', () => {
200
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
201
+ const formatted = fineAmount.formatted('en');
202
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
203
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
204
+ });
205
+ it('should format item with de locale', () => {
206
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 3);
207
+ const formatted = fineAmount.formatted('de');
208
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
209
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
210
+ });
211
+ it('should format item with count 1', () => {
212
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 1);
213
+ const formatted = fineAmount.formatted('en');
214
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
215
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
216
+ });
217
+ });
218
+ describe('formatted with configuration', () => {
219
+ it('should format item with USD/en configuration', () => {
220
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
221
+ const config = new Configuration_1.Configuration('USD', 'en');
222
+ const formatted = fineAmount.formatted(config);
223
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
224
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
225
+ });
226
+ it('should format item with EUR/de configuration', () => {
227
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 3);
228
+ const config = new Configuration_1.Configuration('EUR', 'de');
229
+ const formatted = fineAmount.formatted(config);
230
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
231
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
232
+ });
233
+ });
234
+ });
235
+ describe('FineAmount.Item.formattedWithoutCount', () => {
236
+ it('should format item without count with en locale', () => {
237
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
238
+ const formatted = fineAmount.formattedWithoutCount('en');
239
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
240
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
241
+ });
242
+ it('should format item without count with de locale', () => {
243
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 3);
244
+ const formatted = fineAmount.formattedWithoutCount('de');
245
+ (0, core_1.expect)(typeof formatted).toBeEqual('string');
246
+ (0, core_1.expect)(formatted.length).not.toBeEqual(0);
247
+ });
248
+ it('should format all item types', () => {
249
+ FineAmount_1.FineAmount.Item.Type.all.forEach(itemType => {
250
+ const fineAmount = new FineAmount_1.FineAmount.Item(itemType, 5);
251
+ const enFormatted = fineAmount.formattedWithoutCount('en');
252
+ const deFormatted = fineAmount.formattedWithoutCount('de');
253
+ (0, core_1.expect)(enFormatted.length).not.toBeEqual(0);
254
+ (0, core_1.expect)(deFormatted.length).not.toBeEqual(0);
255
+ });
256
+ });
257
+ });
258
+ describe('FineAmount.Item.multiplied', () => {
259
+ it('should multiply item count by integer', () => {
260
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
261
+ const multiplied = fineAmount.multiplied(3);
262
+ (0, core_1.expect)(multiplied.count).toBeEqual(6);
263
+ });
264
+ it('should multiply item count by zero', () => {
265
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 5);
266
+ const multiplied = fineAmount.multiplied(0);
267
+ (0, core_1.expect)(multiplied.count).toBeEqual(0);
268
+ });
269
+ it('should multiply item count by decimal', () => {
270
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 10);
271
+ const multiplied = fineAmount.multiplied(1.5);
272
+ (0, core_1.expect)(multiplied.count).toBeEqual(15);
273
+ });
274
+ it('should not modify original count', () => {
275
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
276
+ fineAmount.multiplied(3);
277
+ (0, core_1.expect)(fineAmount.count).toBeEqual(2);
278
+ });
279
+ it('should return new Item instance', () => {
280
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
281
+ const multiplied = fineAmount.multiplied(2);
282
+ (0, core_1.expect)(multiplied).not.toBeEqual(fineAmount);
283
+ });
284
+ it('should preserve item type', () => {
285
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
286
+ const multiplied = fineAmount.multiplied(3);
287
+ (0, core_1.expect)(multiplied.item).toBeEqual('crateOfBeer');
288
+ });
289
+ });
290
+ describe('FineAmount.Item.flatten', () => {
291
+ it('should return flattened representation', () => {
292
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
293
+ const flattened = fineAmount.flatten;
294
+ (0, core_1.expect)(flattened.type).toBeEqual('item');
295
+ (0, core_1.expect)(flattened.item).toBeEqual('crateOfBeer');
296
+ (0, core_1.expect)(flattened.count).toBeEqual(2);
297
+ });
298
+ it('should flatten with zero count', () => {
299
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 0);
300
+ const flattened = fineAmount.flatten;
301
+ (0, core_1.expect)(flattened.count).toBeEqual(0);
302
+ });
303
+ it('should have correct structure', () => {
304
+ const fineAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 5);
305
+ const flattened = fineAmount.flatten;
306
+ (0, core_1.expect)(typeof flattened.type).toBeEqual('string');
307
+ (0, core_1.expect)(typeof flattened.item).toBeEqual('string');
308
+ (0, core_1.expect)(typeof flattened.count).toBeEqual('number');
309
+ });
310
+ });
311
+ describe('FineAmount.Item.TypeBuilder', () => {
312
+ it('should build item from flattened data', () => {
313
+ const flattened = {
314
+ type: 'item',
315
+ item: 'crateOfBeer',
316
+ count: 2
317
+ };
318
+ const fineAmount = FineAmount_1.FineAmount.Item.builder.build(flattened);
319
+ (0, core_1.expect)(fineAmount.item).toBeEqual('crateOfBeer');
320
+ (0, core_1.expect)(fineAmount.count).toBeEqual(2);
321
+ });
322
+ it('should build item with zero count', () => {
323
+ const flattened = {
324
+ type: 'item',
325
+ item: 'crateOfBeer',
326
+ count: 0
327
+ };
328
+ const fineAmount = FineAmount_1.FineAmount.Item.builder.build(flattened);
329
+ (0, core_1.expect)(fineAmount.count).toBeEqual(0);
330
+ });
331
+ it('should round-trip through flatten and build', () => {
332
+ const original = new FineAmount_1.FineAmount.Item('crateOfBeer', 3);
333
+ const rebuilt = FineAmount_1.FineAmount.Item.builder.build(original.flatten);
334
+ (0, core_1.expect)(rebuilt.item).toBeEqual(original.item);
335
+ (0, core_1.expect)(rebuilt.count).toBeEqual(original.count);
336
+ });
337
+ });
338
+ });
339
+ describe('FineAmount factory functions', () => {
340
+ describe('FineAmount.money', () => {
341
+ it('should create Money instance', () => {
342
+ const amount = new MoneyAmount_1.MoneyAmount(10, 50);
343
+ const fineAmount = FineAmount_1.FineAmount.money(amount);
344
+ (0, core_1.expect)(fineAmount instanceof FineAmount_1.FineAmount.Money).toBeTrue();
345
+ (0, core_1.expect)(fineAmount.amount).toBeEqual(amount);
346
+ });
347
+ });
348
+ describe('FineAmount.item', () => {
349
+ it('should create Item instance', () => {
350
+ const fineAmount = FineAmount_1.FineAmount.item('crateOfBeer', 2);
351
+ (0, core_1.expect)(fineAmount instanceof FineAmount_1.FineAmount.Item).toBeTrue();
352
+ (0, core_1.expect)(fineAmount.item).toBeEqual('crateOfBeer');
353
+ (0, core_1.expect)(fineAmount.count).toBeEqual(2);
354
+ });
355
+ });
356
+ });
357
+ describe('FineAmount.compare', () => {
358
+ describe('compare Money amounts', () => {
359
+ it('should return equal for same money amounts', () => {
360
+ const amount1 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 50));
361
+ const amount2 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 50));
362
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('equal');
363
+ });
364
+ it('should return less when first is smaller', () => {
365
+ const amount1 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(5, 0));
366
+ const amount2 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 0));
367
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('less');
368
+ });
369
+ it('should return greater when first is larger', () => {
370
+ const amount1 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(15, 0));
371
+ const amount2 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 0));
372
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('greater');
373
+ });
374
+ it('should compare with subunit differences', () => {
375
+ const amount1 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 25));
376
+ const amount2 = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 50));
377
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('less');
378
+ });
379
+ });
380
+ describe('compare Item amounts', () => {
381
+ it('should return equal for same item counts', () => {
382
+ const amount1 = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
383
+ const amount2 = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
384
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('equal');
385
+ });
386
+ it('should return less when first has fewer items', () => {
387
+ const amount1 = new FineAmount_1.FineAmount.Item('crateOfBeer', 1);
388
+ const amount2 = new FineAmount_1.FineAmount.Item('crateOfBeer', 3);
389
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('less');
390
+ });
391
+ it('should return greater when first has more items', () => {
392
+ const amount1 = new FineAmount_1.FineAmount.Item('crateOfBeer', 5);
393
+ const amount2 = new FineAmount_1.FineAmount.Item('crateOfBeer', 2);
394
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(amount1, amount2)).toBeEqual('greater');
395
+ });
396
+ });
397
+ describe('compare Money vs Item', () => {
398
+ it('should return greater when Money compared to Item', () => {
399
+ const moneyAmount = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 0));
400
+ const itemAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 5);
401
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(moneyAmount, itemAmount)).toBeEqual('greater');
402
+ });
403
+ it('should return less when Item compared to Money', () => {
404
+ const itemAmount = new FineAmount_1.FineAmount.Item('crateOfBeer', 5);
405
+ const moneyAmount = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(10, 0));
406
+ (0, core_1.expect)(FineAmount_1.FineAmount.compare(itemAmount, moneyAmount)).toBeEqual('less');
407
+ });
408
+ });
409
+ });
410
+ describe('FineAmount.TypeBuilder', () => {
411
+ it('should build Money from flattened data', () => {
412
+ const flattened = {
413
+ type: 'money',
414
+ amount: 10.5
415
+ };
416
+ const fineAmount = FineAmount_1.FineAmount.builder.build(flattened);
417
+ (0, core_1.expect)(fineAmount instanceof FineAmount_1.FineAmount.Money).toBeTrue();
418
+ });
419
+ it('should build Item from flattened data', () => {
420
+ const flattened = {
421
+ type: 'item',
422
+ item: 'crateOfBeer',
423
+ count: 2
424
+ };
425
+ const fineAmount = FineAmount_1.FineAmount.builder.build(flattened);
426
+ (0, core_1.expect)(fineAmount instanceof FineAmount_1.FineAmount.Item).toBeTrue();
427
+ });
428
+ it('should round-trip Money through flatten and build', () => {
429
+ const original = new FineAmount_1.FineAmount.Money(new MoneyAmount_1.MoneyAmount(15, 75));
430
+ const rebuilt = FineAmount_1.FineAmount.builder.build(original.flatten);
431
+ (0, core_1.expect)(rebuilt instanceof FineAmount_1.FineAmount.Money).toBeTrue();
432
+ if (rebuilt instanceof FineAmount_1.FineAmount.Money) {
433
+ (0, core_1.expect)(rebuilt.amount.value).toBeEqual(15);
434
+ (0, core_1.expect)(rebuilt.amount.subunitValue).toBeEqual(75);
435
+ }
436
+ });
437
+ it('should round-trip Item through flatten and build', () => {
438
+ const original = new FineAmount_1.FineAmount.Item('crateOfBeer', 3);
439
+ const rebuilt = FineAmount_1.FineAmount.builder.build(original.flatten);
440
+ (0, core_1.expect)(rebuilt instanceof FineAmount_1.FineAmount.Item).toBeTrue();
441
+ if (rebuilt instanceof FineAmount_1.FineAmount.Item)
442
+ (0, core_1.expect)(rebuilt.count).toBeEqual(3);
443
+ });
444
+ });
445
+ });
@@ -0,0 +1 @@
1
+ export {};