@stevenkellner/team-conduct-api 2.0.18 → 2.0.19

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 (231) hide show
  1. package/lib/src/functions/fine/add.d.ts +3 -8
  2. package/lib/src/functions/fine/add.js +1 -2
  3. package/lib/src/functions/fine/delete.d.ts +1 -6
  4. package/lib/src/functions/fine/delete.js +2 -3
  5. package/lib/src/functions/fine/update.d.ts +2 -8
  6. package/lib/src/functions/fine/update.js +1 -3
  7. package/lib/src/functions/fineTemplate/add.d.ts +3 -3
  8. package/lib/src/functions/fineTemplate/update.d.ts +3 -3
  9. package/lib/src/functions/firebaseFunctionsContext.d.ts +34 -1
  10. package/lib/src/functions/firebaseFunctionsContext.js +33 -33
  11. package/lib/src/functions/index.d.ts +10 -8
  12. package/lib/src/functions/index.js +11 -8
  13. package/lib/src/functions/notification/markNotificationAsRead.d.ts +14 -0
  14. package/lib/src/functions/notification/{subscribe.js → markNotificationAsRead.js} +5 -7
  15. package/lib/src/functions/person/kickout.d.ts +6 -6
  16. package/lib/src/functions/person/kickout.js +4 -4
  17. package/lib/src/functions/person/roleEdit.d.ts +5 -5
  18. package/lib/src/functions/person/roleEdit.js +3 -3
  19. package/lib/src/functions/{paypalMe/edit.d.ts → team/delete.d.ts} +5 -7
  20. package/lib/src/functions/{paypalMe/edit.js → team/delete.js} +4 -5
  21. package/lib/src/functions/team/new.d.ts +18 -18
  22. package/lib/src/functions/team/new.js +8 -4
  23. package/lib/src/functions/team/update.d.ts +34 -0
  24. package/lib/src/functions/team/update.js +23 -0
  25. package/lib/src/functions/user/register.d.ts +4 -0
  26. package/lib/src/functions/user/register.js +3 -1
  27. package/lib/src/functions/user/update.d.ts +26 -0
  28. package/lib/src/functions/user/update.js +15 -0
  29. package/lib/src/index.d.ts +1 -1
  30. package/lib/src/index.js +1 -1
  31. package/lib/src/locales/de.d.ts +1 -1
  32. package/lib/src/locales/de.js +6 -2
  33. package/lib/src/locales/en.d.ts +6 -2
  34. package/lib/src/locales/en.js +6 -2
  35. package/lib/src/types/{MoneyAmount.d.ts → Money.d.ts} +23 -23
  36. package/lib/src/types/{MoneyAmount.js → Money.js} +25 -25
  37. package/lib/src/types/fine/Fine.d.ts +275 -0
  38. package/lib/src/types/fine/Fine.js +318 -0
  39. package/lib/src/types/fine/FineTemplate.d.ts +154 -0
  40. package/lib/src/types/fine/FineTemplate.js +170 -0
  41. package/lib/src/types/{PayedState.d.ts → fine/PayedState.d.ts} +1 -1
  42. package/lib/src/types/{PayedState.js → fine/PayedState.js} +1 -1
  43. package/lib/src/types/fine/index.d.ts +3 -0
  44. package/lib/src/{firebase → types/fine}/index.js +3 -6
  45. package/lib/src/types/index.d.ts +7 -18
  46. package/lib/src/types/index.js +7 -18
  47. package/lib/src/types/{Localization.d.ts → localization/Localization.d.ts} +15 -43
  48. package/lib/src/types/localization/Localization.js +54 -0
  49. package/lib/src/types/localization/PluralLocalization.d.ts +23 -0
  50. package/lib/src/types/localization/PluralLocalization.js +35 -0
  51. package/lib/src/types/{Pluralization.d.ts → localization/Pluralization.d.ts} +1 -0
  52. package/lib/src/types/{Pluralization.js → localization/Pluralization.js} +1 -0
  53. package/lib/src/types/localization/ValueLocalization.d.ts +22 -0
  54. package/lib/src/types/localization/ValueLocalization.js +41 -0
  55. package/lib/src/types/localization/index.d.ts +5 -0
  56. package/lib/src/types/localization/index.js +21 -0
  57. package/lib/src/types/notification/InAppNotification.d.ts +152 -0
  58. package/lib/src/types/notification/InAppNotification.js +136 -0
  59. package/lib/src/types/notification/index.d.ts +1 -0
  60. package/lib/src/types/notification/index.js +17 -0
  61. package/lib/src/types/{Person.d.ts → person/Person.d.ts} +3 -3
  62. package/lib/src/types/{Person.js → person/Person.js} +3 -3
  63. package/lib/src/types/{PersonProperties.d.ts → person/PersonProperties.d.ts} +8 -7
  64. package/lib/src/types/{PersonProperties.js → person/PersonProperties.js} +7 -6
  65. package/lib/src/types/{PersonSignInProperties.d.ts → person/PersonSignInProperties.d.ts} +9 -11
  66. package/lib/src/types/{PersonSignInProperties.js → person/PersonSignInProperties.js} +7 -10
  67. package/lib/src/types/person/index.d.ts +3 -0
  68. package/lib/src/types/person/index.js +19 -0
  69. package/lib/src/types/{Invitation.d.ts → team/Invitation.d.ts} +1 -1
  70. package/lib/src/types/{Invitation.js → team/Invitation.js} +1 -1
  71. package/lib/src/types/team/Team.d.ts +144 -0
  72. package/lib/src/types/team/Team.js +141 -0
  73. package/lib/src/types/team/TeamRole.d.ts +30 -0
  74. package/lib/src/types/{UserRole.js → team/TeamRole.js} +16 -15
  75. package/lib/src/types/team/index.d.ts +3 -0
  76. package/lib/src/types/team/index.js +19 -0
  77. package/lib/src/types/{NotificationProperties.d.ts → user/NotificationProperties.d.ts} +8 -3
  78. package/lib/src/types/{NotificationProperties.js → user/NotificationProperties.js} +4 -0
  79. package/lib/src/types/user/User.d.ts +328 -0
  80. package/lib/src/types/user/User.js +355 -0
  81. package/lib/src/types/user/index.d.ts +2 -0
  82. package/lib/src/types/user/index.js +18 -0
  83. package/lib/src/utils/StaticUnionTypeBuilder.d.ts +9 -0
  84. package/lib/src/utils/StaticUnionTypeBuilder.js +23 -0
  85. package/lib/src/utils/index.d.ts +1 -0
  86. package/lib/src/utils/index.js +17 -0
  87. package/lib/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +4 -3
  89. package/src/functions/fine/add.ts +3 -5
  90. package/src/functions/fine/delete.ts +3 -5
  91. package/src/functions/fine/update.ts +2 -5
  92. package/src/functions/firebaseFunctionsContext.ts +40 -40
  93. package/src/functions/index.ts +11 -9
  94. package/src/functions/notification/markNotificationAsRead.ts +19 -0
  95. package/src/functions/person/add.ts +1 -1
  96. package/src/functions/person/kickout.ts +6 -6
  97. package/src/functions/person/roleEdit.ts +5 -5
  98. package/src/functions/{paypalMe/edit.ts → team/delete.ts} +5 -7
  99. package/src/functions/team/new.ts +19 -11
  100. package/src/functions/team/update.ts +40 -0
  101. package/src/functions/user/register.ts +7 -3
  102. package/src/functions/user/update.ts +29 -0
  103. package/src/index.ts +1 -1
  104. package/src/locales/de.ts +7 -3
  105. package/src/locales/en.ts +7 -3
  106. package/src/types/{MoneyAmount.ts → Money.ts} +29 -29
  107. package/src/types/fine/Fine.ts +399 -0
  108. package/src/types/fine/FineTemplate.ts +219 -0
  109. package/src/types/{PayedState.ts → fine/PayedState.ts} +2 -2
  110. package/src/types/fine/index.ts +3 -0
  111. package/src/types/index.ts +7 -18
  112. package/src/types/{Localization.ts → localization/Localization.ts} +7 -64
  113. package/src/types/localization/PluralLocalization.ts +32 -0
  114. package/src/types/{Pluralization.ts → localization/Pluralization.ts} +1 -0
  115. package/src/types/localization/ValueLocalization.ts +36 -0
  116. package/src/types/localization/index.ts +5 -0
  117. package/src/types/notification/InAppNotification.ts +184 -0
  118. package/src/types/notification/index.ts +1 -0
  119. package/src/types/{Person.ts → person/Person.ts} +3 -3
  120. package/src/types/{PersonProperties.ts → person/PersonProperties.ts} +8 -7
  121. package/src/types/{PersonSignInProperties.ts → person/PersonSignInProperties.ts} +13 -12
  122. package/src/types/person/index.ts +3 -0
  123. package/src/types/{Invitation.ts → team/Invitation.ts} +1 -1
  124. package/src/types/team/Team.ts +204 -0
  125. package/src/types/{UserRole.ts → team/TeamRole.ts} +19 -17
  126. package/src/types/team/index.ts +3 -0
  127. package/src/types/{NotificationProperties.ts → user/NotificationProperties.ts} +12 -3
  128. package/src/types/user/User.ts +451 -0
  129. package/src/types/user/index.ts +2 -0
  130. package/src/utils/StaticUnionTypeBuilder.ts +23 -0
  131. package/src/utils/index.ts +1 -0
  132. package/lib/src/firebase/FirebaseConfiguration.d.ts +0 -64
  133. package/lib/src/firebase/FirebaseConfiguration.js +0 -79
  134. package/lib/src/firebase/Firestore.d.ts +0 -201
  135. package/lib/src/firebase/Firestore.js +0 -244
  136. package/lib/src/firebase/FirestoreScheme.d.ts +0 -42
  137. package/lib/src/firebase/FirestoreScheme.js +0 -2
  138. package/lib/src/firebase/Messaging.d.ts +0 -90
  139. package/lib/src/firebase/Messaging.js +0 -2
  140. package/lib/src/firebase/checkAuthentication.d.ts +0 -38
  141. package/lib/src/firebase/checkAuthentication.js +0 -64
  142. package/lib/src/firebase/index.d.ts +0 -6
  143. package/lib/src/firebase/pushNotification.d.ts +0 -39
  144. package/lib/src/firebase/pushNotification.js +0 -88
  145. package/lib/src/functions/notification/subscribe.d.ts +0 -18
  146. package/lib/src/types/Configuration.d.ts +0 -46
  147. package/lib/src/types/Configuration.js +0 -51
  148. package/lib/src/types/Fine.d.ts +0 -71
  149. package/lib/src/types/Fine.js +0 -74
  150. package/lib/src/types/FineAmount.d.ts +0 -207
  151. package/lib/src/types/FineAmount.js +0 -238
  152. package/lib/src/types/FineTemplate.d.ts +0 -69
  153. package/lib/src/types/FineTemplate.js +0 -72
  154. package/lib/src/types/FineTemplateRepetition.d.ts +0 -87
  155. package/lib/src/types/FineTemplateRepetition.js +0 -103
  156. package/lib/src/types/Localization.js +0 -115
  157. package/lib/src/types/Team.d.ts +0 -62
  158. package/lib/src/types/Team.js +0 -64
  159. package/lib/src/types/User.d.ts +0 -221
  160. package/lib/src/types/User.js +0 -235
  161. package/lib/src/types/UserRole.d.ts +0 -29
  162. package/lib/test/firebase/FirebaseConfiguration.test.d.ts +0 -1
  163. package/lib/test/firebase/FirebaseConfiguration.test.js +0 -158
  164. package/lib/test/firebase/Firestore.test.d.ts +0 -1
  165. package/lib/test/firebase/Firestore.test.js +0 -46
  166. package/lib/test/firebase/checkAuthentication.test.d.ts +0 -1
  167. package/lib/test/firebase/checkAuthentication.test.js +0 -356
  168. package/lib/test/firebase/firebase-utils.d.ts +0 -32
  169. package/lib/test/firebase/firebase-utils.js +0 -134
  170. package/lib/test/firebase/pushNotification.test.d.ts +0 -1
  171. package/lib/test/firebase/pushNotification.test.js +0 -300
  172. package/lib/test/locales/localization.de.test.d.ts +0 -1
  173. package/lib/test/locales/localization.de.test.js +0 -144
  174. package/lib/test/locales/localization.en.test.d.ts +0 -1
  175. package/lib/test/locales/localization.en.test.js +0 -144
  176. package/lib/test/types/Configuration.test.d.ts +0 -1
  177. package/lib/test/types/Configuration.test.js +0 -84
  178. package/lib/test/types/Currency.test.d.ts +0 -1
  179. package/lib/test/types/Currency.test.js +0 -41
  180. package/lib/test/types/Fine.test.d.ts +0 -1
  181. package/lib/test/types/Fine.test.js +0 -265
  182. package/lib/test/types/FineAmount.test.d.ts +0 -1
  183. package/lib/test/types/FineAmount.test.js +0 -445
  184. package/lib/test/types/FineTemplate.test.d.ts +0 -1
  185. package/lib/test/types/FineTemplate.test.js +0 -271
  186. package/lib/test/types/FineTemplateRepetition.test.d.ts +0 -1
  187. package/lib/test/types/FineTemplateRepetition.test.js +0 -361
  188. package/lib/test/types/Invitation.test.d.ts +0 -1
  189. package/lib/test/types/Invitation.test.js +0 -269
  190. package/lib/test/types/Locale.test.d.ts +0 -1
  191. package/lib/test/types/Locale.test.js +0 -46
  192. package/lib/test/types/Localization.test.d.ts +0 -1
  193. package/lib/test/types/Localization.test.js +0 -241
  194. package/lib/test/types/MoneyAmount.test.d.ts +0 -1
  195. package/lib/test/types/MoneyAmount.test.js +0 -276
  196. package/lib/test/types/NotificationProperties.test.d.ts +0 -1
  197. package/lib/test/types/NotificationProperties.test.js +0 -258
  198. package/lib/test/types/PayedState.test.d.ts +0 -1
  199. package/lib/test/types/PayedState.test.js +0 -136
  200. package/lib/test/types/Person.test.d.ts +0 -1
  201. package/lib/test/types/Person.test.js +0 -266
  202. package/lib/test/types/PersonProperties.test.d.ts +0 -1
  203. package/lib/test/types/PersonProperties.test.js +0 -155
  204. package/lib/test/types/PersonSignInProperties.test.d.ts +0 -1
  205. package/lib/test/types/PersonSignInProperties.test.js +0 -208
  206. package/lib/test/types/Pluralization.test.d.ts +0 -1
  207. package/lib/test/types/Pluralization.test.js +0 -206
  208. package/lib/test/types/Team.test.d.ts +0 -1
  209. package/lib/test/types/Team.test.js +0 -145
  210. package/lib/test/types/User.test.d.ts +0 -1
  211. package/lib/test/types/User.test.js +0 -450
  212. package/lib/test/types/UserRole.test.d.ts +0 -1
  213. package/lib/test/types/UserRole.test.js +0 -140
  214. package/src/firebase/FirebaseConfiguration.ts +0 -99
  215. package/src/firebase/Firestore.ts +0 -258
  216. package/src/firebase/FirestoreScheme.ts +0 -41
  217. package/src/firebase/Messaging.ts +0 -93
  218. package/src/firebase/checkAuthentication.ts +0 -91
  219. package/src/firebase/index.ts +0 -7
  220. package/src/firebase/pushNotification.ts +0 -90
  221. package/src/functions/notification/subscribe.ts +0 -23
  222. package/src/types/Configuration.ts +0 -65
  223. package/src/types/Fine.ts +0 -100
  224. package/src/types/FineAmount.ts +0 -303
  225. package/src/types/FineTemplate.ts +0 -96
  226. package/src/types/FineTemplateRepetition.ts +0 -125
  227. package/src/types/Team.ts +0 -87
  228. package/src/types/User.ts +0 -302
  229. /package/lib/src/types/{Locale.d.ts → localization/Locale.d.ts} +0 -0
  230. /package/lib/src/types/{Locale.js → localization/Locale.js} +0 -0
  231. /package/src/types/{Locale.ts → localization/Locale.ts} +0 -0
@@ -1,158 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@assertive-ts/core");
4
- const FirebaseConfiguration_1 = require("../../src/firebase/FirebaseConfiguration");
5
- describe('FirebaseConfiguration', () => {
6
- describe('FirebaseConfiguration.shared', () => {
7
- it('should return a singleton instance', () => {
8
- const instance1 = FirebaseConfiguration_1.FirebaseConfiguration.shared;
9
- const instance2 = FirebaseConfiguration_1.FirebaseConfiguration.shared;
10
- (0, core_1.expect)(instance1).toBeEqual(instance2);
11
- });
12
- it('should be an instance of FirebaseConfiguration', () => {
13
- const instance = FirebaseConfiguration_1.FirebaseConfiguration.shared;
14
- (0, core_1.expect)(instance instanceof FirebaseConfiguration_1.FirebaseConfiguration).toBeTrue();
15
- });
16
- });
17
- describe('FirebaseConfiguration.configure', () => {
18
- // Note: Since FirebaseConfiguration is a singleton and maintains state,
19
- // we need to be careful with testing. In a real-world scenario, you might
20
- // need to add a reset method for testing purposes or use dependency injection.
21
- // For now, we'll test the error cases that don't require full configuration.
22
- it('should throw error when configuring twice', () => {
23
- // Create a mock configuration
24
- const mockFirebaseFirestore = {};
25
- const mockFirestore = {};
26
- const mockMessaging = {
27
- sendEachForMulticast: async () => ({
28
- responses: [],
29
- successCount: 0,
30
- failureCount: 0
31
- })
32
- };
33
- // We can't actually configure the shared instance in tests without affecting other tests
34
- // This test documents the expected behavior
35
- (0, core_1.expect)(() => {
36
- // If already configured, this should throw
37
- try {
38
- FirebaseConfiguration_1.FirebaseConfiguration.shared.configure({
39
- firebaseFirestore: mockFirebaseFirestore,
40
- baseFirestoreDocument: mockFirestore,
41
- messaging: mockMessaging
42
- });
43
- // If it succeeds, try configuring again to test the double-configuration error
44
- FirebaseConfiguration_1.FirebaseConfiguration.shared.configure({
45
- firebaseFirestore: mockFirebaseFirestore,
46
- baseFirestoreDocument: mockFirestore,
47
- messaging: mockMessaging
48
- });
49
- }
50
- catch (error) {
51
- if (error instanceof Error && error.message === 'Configuration is already configured')
52
- throw error;
53
- // If it's the "not configured" error, the first configure worked
54
- // but we can't test double-configuration in this test environment
55
- }
56
- }).toThrow();
57
- });
58
- });
59
- describe('FirebaseConfiguration getters', () => {
60
- describe('baseFirestoreDocument', () => {
61
- it('should throw error when not configured', () => {
62
- // Create a fresh test to check unconfigured state
63
- // Note: In practice, the shared instance might already be configured
64
- try {
65
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
66
- const _ = FirebaseConfiguration_1.FirebaseConfiguration.shared.baseFirestoreDocument;
67
- // If we get here, it was already configured (expected in normal operation)
68
- }
69
- catch (error) {
70
- (0, core_1.expect)(error instanceof Error).toBeTrue();
71
- if (error instanceof Error)
72
- (0, core_1.expect)(error.message).toBeEqual('Configuration.baseFirestoreDocument is not configured');
73
- }
74
- });
75
- });
76
- describe('messaging', () => {
77
- it('should throw error when not configured', () => {
78
- // Create a fresh test to check unconfigured state
79
- try {
80
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
81
- const _ = FirebaseConfiguration_1.FirebaseConfiguration.shared.messaging;
82
- // If we get here, it was already configured (expected in normal operation)
83
- }
84
- catch (error) {
85
- (0, core_1.expect)(error instanceof Error).toBeTrue();
86
- if (error instanceof Error)
87
- (0, core_1.expect)(error.message).toBeEqual('Configuration.messaging is not configured');
88
- }
89
- });
90
- });
91
- });
92
- describe('FirebaseConfiguration behavior', () => {
93
- it('should maintain singleton pattern', () => {
94
- const instance = FirebaseConfiguration_1.FirebaseConfiguration.shared;
95
- (0, core_1.expect)(instance).not.toBeNull();
96
- (0, core_1.expect)(instance).not.toBeUndefined();
97
- });
98
- it('should have configure method', () => {
99
- (0, core_1.expect)(typeof FirebaseConfiguration_1.FirebaseConfiguration.shared.configure).toBeEqual('function');
100
- });
101
- it('should have baseFirestoreDocument getter', () => {
102
- const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(FirebaseConfiguration_1.FirebaseConfiguration.shared), 'baseFirestoreDocument');
103
- (0, core_1.expect)(descriptor).not.toBeEqual(undefined);
104
- (0, core_1.expect)(descriptor?.get).not.toBeEqual(undefined);
105
- });
106
- it('should have messaging getter', () => {
107
- const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(FirebaseConfiguration_1.FirebaseConfiguration.shared), 'messaging');
108
- (0, core_1.expect)(descriptor).not.toBeEqual(undefined);
109
- (0, core_1.expect)(descriptor?.get).not.toBeEqual(undefined);
110
- });
111
- });
112
- describe('FirebaseConfiguration configuration object', () => {
113
- it('should accept valid configuration structure', () => {
114
- const mockFirestore = {};
115
- const mockMessaging = {
116
- sendEachForMulticast: async () => ({
117
- responses: [],
118
- successCount: 0,
119
- failureCount: 0
120
- })
121
- };
122
- const configuration = {
123
- baseFirestoreDocument: mockFirestore,
124
- messaging: mockMessaging
125
- };
126
- (0, core_1.expect)(configuration.baseFirestoreDocument).toBeEqual(mockFirestore);
127
- (0, core_1.expect)(configuration.messaging).toBeEqual(mockMessaging);
128
- });
129
- it('should require baseFirestoreDocument in configuration', () => {
130
- const mockMessaging = {
131
- sendEachForMulticast: async () => ({
132
- responses: [],
133
- successCount: 0,
134
- failureCount: 0
135
- })
136
- };
137
- const configuration = {
138
- baseFirestoreDocument: {},
139
- messaging: mockMessaging
140
- };
141
- (0, core_1.expect)(configuration.baseFirestoreDocument).not.toBeUndefined();
142
- });
143
- it('should require messaging in configuration', () => {
144
- const mockFirestore = {};
145
- const configuration = {
146
- baseFirestoreDocument: mockFirestore,
147
- messaging: {
148
- sendEachForMulticast: async () => ({
149
- responses: [],
150
- successCount: 0,
151
- failureCount: 0
152
- })
153
- }
154
- };
155
- (0, core_1.expect)(configuration.messaging).not.toBeUndefined();
156
- });
157
- });
158
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@assertive-ts/core");
4
- const Firestore_1 = require("../../src/firebase/Firestore");
5
- describe('Firestore', () => {
6
- describe('shared singleton', () => {
7
- it('should return the same instance on multiple calls', () => {
8
- const instance1 = Firestore_1.Firestore.shared;
9
- const instance2 = Firestore_1.Firestore.shared;
10
- (0, core_1.expect)(instance1).toBe(instance2);
11
- });
12
- it('should create an instance', () => {
13
- const instance = Firestore_1.Firestore.shared;
14
- (0, core_1.expect)(instance).toBeInstanceOf(Firestore_1.Firestore);
15
- });
16
- });
17
- describe('accessor methods', () => {
18
- it('should have team method', () => {
19
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.team).toBeEqual('function');
20
- });
21
- it('should have user method', () => {
22
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.user).toBeEqual('function');
23
- });
24
- it('should have invitation method', () => {
25
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.invitation).toBeEqual('function');
26
- });
27
- it('should have persons method', () => {
28
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.persons).toBeEqual('function');
29
- });
30
- it('should have person method', () => {
31
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.person).toBeEqual('function');
32
- });
33
- it('should have fineTemplates method', () => {
34
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.fineTemplates).toBeEqual('function');
35
- });
36
- it('should have fineTemplate method', () => {
37
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.fineTemplate).toBeEqual('function');
38
- });
39
- it('should have fines method', () => {
40
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.fines).toBeEqual('function');
41
- });
42
- it('should have fine method', () => {
43
- (0, core_1.expect)(typeof Firestore_1.Firestore.shared.fine).toBeEqual('function');
44
- });
45
- });
46
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,356 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const mocha_1 = require("mocha");
4
- const core_1 = require("@assertive-ts/core");
5
- const checkAuthentication_1 = require("../../src/firebase/checkAuthentication");
6
- const index_1 = require("../../src/types/index");
7
- const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
8
- const firebase_utils_1 = require("./firebase-utils");
9
- const firebase_function_1 = require("@stevenkellner/firebase-function");
10
- (0, mocha_1.describe)('checkAuthentication', () => {
11
- const teamId = index_1.Team.Id.builder.build('11111111-1111-4111-1111-111111111111');
12
- const personId = index_1.Person.Id.builder.build('22222222-2222-4222-2222-222222222222');
13
- const userAuthId = firebase_function_1.UserAuthId.builder.build('auth-123');
14
- const userId = index_1.User.Id.builder.build('user123');
15
- (0, mocha_1.describe)('checkAuthentication - basic validation', () => {
16
- (0, mocha_1.it)('should throw "unauthenticated" error if rawUserId is null', async () => {
17
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
18
- await (0, checkAuthentication_1.checkAuthentication)(null, teamId, 'team-manager');
19
- }, 'unauthenticated', 'User is not authenticated');
20
- });
21
- (0, mocha_1.it)('should throw "permission-denied" if user authentication does not exist', async () => {
22
- (0, firebase_utils_1.configureFirebase)({
23
- userAuthIdDict: firebase_utils_1.Collection.docs({
24
- [userAuthId.value]: firebase_utils_1.Document.empty()
25
- })
26
- });
27
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
28
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
29
- }, 'permission-denied', 'User authentication does not exist');
30
- });
31
- (0, mocha_1.it)('should throw "permission-denied" if user does not exist', async () => {
32
- (0, firebase_utils_1.configureFirebase)({
33
- userAuthIdDict: firebase_utils_1.Collection.docs({
34
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
35
- }),
36
- users: firebase_utils_1.Collection.docs({
37
- [userId.value]: firebase_utils_1.Document.empty()
38
- })
39
- });
40
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
41
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
42
- }, 'permission-denied', 'User does not exist');
43
- });
44
- (0, mocha_1.it)('should throw "permission-denied" if user is not a member of the team', async () => {
45
- const emptyTeams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
46
- (0, firebase_utils_1.configureFirebase)({
47
- userAuthIdDict: firebase_utils_1.Collection.docs({
48
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
49
- }),
50
- users: firebase_utils_1.Collection.docs({
51
- [userId.value]: firebase_utils_1.Document.user(userId, emptyTeams)
52
- })
53
- });
54
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
55
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
56
- }, 'permission-denied', 'User is not a member of the team');
57
- });
58
- (0, mocha_1.it)('should throw "permission-denied" if person does not exist', async () => {
59
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
60
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
61
- teamId: teamId.guidString,
62
- teamName: 'Test Team',
63
- personId: personId.guidString
64
- }));
65
- (0, firebase_utils_1.configureFirebase)({
66
- userAuthIdDict: firebase_utils_1.Collection.docs({
67
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
68
- }),
69
- users: firebase_utils_1.Collection.docs({
70
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
71
- }),
72
- teams: firebase_utils_1.Collection.docs({
73
- [teamId.guidString]: firebase_utils_1.Document.colls({
74
- persons: firebase_utils_1.Collection.docs({
75
- [personId.guidString]: firebase_utils_1.Document.empty()
76
- })
77
- })
78
- })
79
- });
80
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
81
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
82
- }, 'permission-denied', 'Person does not exist');
83
- });
84
- (0, mocha_1.it)('should throw "permission-denied" if person is not signed in', async () => {
85
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
86
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
87
- teamId: teamId.guidString,
88
- teamName: 'Test Team',
89
- personId: personId.guidString
90
- }));
91
- (0, firebase_utils_1.configureFirebase)({
92
- userAuthIdDict: firebase_utils_1.Collection.docs({
93
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
94
- }),
95
- users: firebase_utils_1.Collection.docs({
96
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
97
- }),
98
- teams: firebase_utils_1.Collection.docs({
99
- [teamId.guidString]: firebase_utils_1.Document.colls({
100
- persons: firebase_utils_1.Collection.docs({
101
- [personId.guidString]: firebase_utils_1.Document.personNotSignedIn(personId)
102
- })
103
- })
104
- })
105
- });
106
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
107
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
108
- }, 'permission-denied', 'Person is not signed in');
109
- });
110
- });
111
- (0, mocha_1.describe)('checkAuthentication - role validation', () => {
112
- (0, mocha_1.it)('should throw "permission-denied" if user does not have required single role', async () => {
113
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
114
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
115
- teamId: teamId.guidString,
116
- teamName: 'Test Team',
117
- personId: personId.guidString
118
- }));
119
- (0, firebase_utils_1.configureFirebase)({
120
- userAuthIdDict: firebase_utils_1.Collection.docs({
121
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
122
- }),
123
- users: firebase_utils_1.Collection.docs({
124
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
125
- }),
126
- teams: firebase_utils_1.Collection.docs({
127
- [teamId.guidString]: firebase_utils_1.Document.colls({
128
- persons: firebase_utils_1.Collection.docs({
129
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['person-manager'])
130
- })
131
- })
132
- })
133
- });
134
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
135
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
136
- }, 'permission-denied', 'User does not have the required roles');
137
- });
138
- (0, mocha_1.it)('should return userId if user has required single role', async () => {
139
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
140
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
141
- teamId: teamId.guidString,
142
- teamName: 'Test Team',
143
- personId: personId.guidString
144
- }));
145
- (0, firebase_utils_1.configureFirebase)({
146
- userAuthIdDict: firebase_utils_1.Collection.docs({
147
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
148
- }),
149
- users: firebase_utils_1.Collection.docs({
150
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
151
- }),
152
- teams: firebase_utils_1.Collection.docs({
153
- [teamId.guidString]: firebase_utils_1.Document.colls({
154
- persons: firebase_utils_1.Collection.docs({
155
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['team-manager', 'person-manager'])
156
- })
157
- })
158
- })
159
- });
160
- const result = await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'team-manager');
161
- (0, core_1.expect)(result).toBeEqual(userId);
162
- });
163
- (0, mocha_1.it)('should throw "permission-denied" if user does not have all required roles (AND logic)', async () => {
164
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
165
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
166
- teamId: teamId.guidString,
167
- teamName: 'Test Team',
168
- personId: personId.guidString
169
- }));
170
- (0, firebase_utils_1.configureFirebase)({
171
- userAuthIdDict: firebase_utils_1.Collection.docs({
172
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
173
- }),
174
- users: firebase_utils_1.Collection.docs({
175
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
176
- }),
177
- teams: firebase_utils_1.Collection.docs({
178
- [teamId.guidString]: firebase_utils_1.Document.colls({
179
- persons: firebase_utils_1.Collection.docs({
180
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['person-manager'])
181
- })
182
- })
183
- })
184
- });
185
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
186
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, ['person-manager', 'team-manager']);
187
- }, 'permission-denied', 'User does not have the required roles');
188
- });
189
- (0, mocha_1.it)('should return userId if user has all required roles (AND logic)', async () => {
190
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
191
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
192
- teamId: teamId.guidString,
193
- teamName: 'Test Team',
194
- personId: personId.guidString
195
- }));
196
- (0, firebase_utils_1.configureFirebase)({
197
- userAuthIdDict: firebase_utils_1.Collection.docs({
198
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
199
- }),
200
- users: firebase_utils_1.Collection.docs({
201
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
202
- }),
203
- teams: firebase_utils_1.Collection.docs({
204
- [teamId.guidString]: firebase_utils_1.Document.colls({
205
- persons: firebase_utils_1.Collection.docs({
206
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['person-manager', 'team-manager', 'fine-manager'])
207
- })
208
- })
209
- })
210
- });
211
- const result = await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, ['person-manager', 'team-manager']);
212
- (0, core_1.expect)(result).toBeEqual(userId);
213
- });
214
- (0, mocha_1.it)('should return userId if user has at least one required role (OR logic)', async () => {
215
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
216
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
217
- teamId: teamId.guidString,
218
- teamName: 'Test Team',
219
- personId: personId.guidString
220
- }));
221
- (0, firebase_utils_1.configureFirebase)({
222
- userAuthIdDict: firebase_utils_1.Collection.docs({
223
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
224
- }),
225
- users: firebase_utils_1.Collection.docs({
226
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
227
- }),
228
- teams: firebase_utils_1.Collection.docs({
229
- [teamId.guidString]: firebase_utils_1.Document.colls({
230
- persons: firebase_utils_1.Collection.docs({
231
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['person-manager'])
232
- })
233
- })
234
- })
235
- });
236
- const result = await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, { anyOf: ['person-manager', 'team-manager'] });
237
- (0, core_1.expect)(result).toBeEqual(userId);
238
- });
239
- (0, mocha_1.it)('should throw "permission-denied" if user does not have any required role (OR logic)', async () => {
240
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
241
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
242
- teamId: teamId.guidString,
243
- teamName: 'Test Team',
244
- personId: personId.guidString
245
- }));
246
- (0, firebase_utils_1.configureFirebase)({
247
- userAuthIdDict: firebase_utils_1.Collection.docs({
248
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
249
- }),
250
- users: firebase_utils_1.Collection.docs({
251
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
252
- }),
253
- teams: firebase_utils_1.Collection.docs({
254
- [teamId.guidString]: firebase_utils_1.Document.colls({
255
- persons: firebase_utils_1.Collection.docs({
256
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['fine-manager'])
257
- })
258
- })
259
- })
260
- });
261
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
262
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, { anyOf: ['person-manager', 'team-manager'] });
263
- }, 'permission-denied', 'User does not have the required roles');
264
- });
265
- (0, mocha_1.it)('should handle complex nested role requirements (AND with OR)', async () => {
266
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
267
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
268
- teamId: teamId.guidString,
269
- teamName: 'Test Team',
270
- personId: personId.guidString
271
- }));
272
- (0, firebase_utils_1.configureFirebase)({
273
- userAuthIdDict: firebase_utils_1.Collection.docs({
274
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
275
- }),
276
- users: firebase_utils_1.Collection.docs({
277
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
278
- }),
279
- teams: firebase_utils_1.Collection.docs({
280
- [teamId.guidString]: firebase_utils_1.Document.colls({
281
- persons: firebase_utils_1.Collection.docs({
282
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['person-manager', 'fine-manager'])
283
- })
284
- })
285
- })
286
- });
287
- const result = await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, [
288
- 'person-manager',
289
- { anyOf: ['fine-manager', 'team-manager'] }
290
- ]);
291
- (0, core_1.expect)(result).toBeEqual(userId);
292
- });
293
- (0, mocha_1.it)('should throw for complex nested requirements when not satisfied', async () => {
294
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
295
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
296
- teamId: teamId.guidString,
297
- teamName: 'Test Team',
298
- personId: personId.guidString
299
- }));
300
- (0, firebase_utils_1.configureFirebase)({
301
- userAuthIdDict: firebase_utils_1.Collection.docs({
302
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
303
- }),
304
- users: firebase_utils_1.Collection.docs({
305
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
306
- }),
307
- teams: firebase_utils_1.Collection.docs({
308
- [teamId.guidString]: firebase_utils_1.Document.colls({
309
- persons: firebase_utils_1.Collection.docs({
310
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, ['person-manager'])
311
- })
312
- })
313
- })
314
- });
315
- await (0, firebase_utils_1.expectThrowsFunctionsError)(async () => {
316
- await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, [
317
- 'person-manager',
318
- { anyOf: ['fine-manager', 'team-manager'] }
319
- ]);
320
- }, 'permission-denied', 'User does not have the required roles');
321
- });
322
- });
323
- (0, mocha_1.describe)('checkAuthentication - comprehensive success scenarios', () => {
324
- (0, mocha_1.it)('should return userId for fully authenticated user with all permissions', async () => {
325
- const teams = new typescript_common_functionality_1.Dictionary(index_1.Team.Id.builder);
326
- teams.set(teamId, index_1.User.TeamProperties.builder.build({
327
- teamId: teamId.guidString,
328
- teamName: 'Test Team',
329
- personId: personId.guidString
330
- }));
331
- (0, firebase_utils_1.configureFirebase)({
332
- userAuthIdDict: firebase_utils_1.Collection.docs({
333
- [userAuthId.value]: firebase_utils_1.Document.data({ userId: userId.value })
334
- }),
335
- users: firebase_utils_1.Collection.docs({
336
- [userId.value]: firebase_utils_1.Document.user(userId, teams)
337
- }),
338
- teams: firebase_utils_1.Collection.docs({
339
- [teamId.guidString]: firebase_utils_1.Document.colls({
340
- persons: firebase_utils_1.Collection.docs({
341
- [personId.guidString]: firebase_utils_1.Document.person(personId, userId, [
342
- 'person-manager',
343
- 'team-manager',
344
- 'fine-manager',
345
- 'fine-can-add',
346
- 'fineTemplate-manager'
347
- ])
348
- })
349
- })
350
- })
351
- });
352
- const result = await (0, checkAuthentication_1.checkAuthentication)(userAuthId, teamId, 'fine-can-add');
353
- (0, core_1.expect)(result).toBeEqual(userId);
354
- });
355
- });
356
- });
@@ -1,32 +0,0 @@
1
- import { User, Team, Person, NotificationProperties, UserRole } from '../../src/types/index';
2
- import { Dictionary } from '@stevenkellner/typescript-common-functionality';
3
- import type { FunctionsErrorCode } from '@stevenkellner/firebase-function';
4
- import { FunctionsError } from '@stevenkellner/firebase-function';
5
- import { Messaging } from '../../src';
6
- export declare class Collection {
7
- readonly documents: Record<string, Document>;
8
- private constructor();
9
- document(key: string): Document;
10
- static docs(documents: Record<string, Document>): Collection;
11
- }
12
- export declare class Document {
13
- readonly collections: Record<string, Collection>;
14
- data: any;
15
- private constructor();
16
- collection(key: string): Collection;
17
- snapshot(): {
18
- exists: boolean;
19
- data: any;
20
- };
21
- set(values: any): void;
22
- static colls(collections: Record<string, Collection>): Document;
23
- static data(data: any): Document;
24
- static empty(): Document;
25
- static collsAndData(collections: Record<string, Collection>, data: any): Document;
26
- static user(id: User.Id, teams: Dictionary<Team.Id, User.TeamProperties>): Document;
27
- static personNotSignedIn(id: Person.Id): Document;
28
- static person(id: Person.Id, userId: User.Id, roles: UserRole[]): Document;
29
- static personWithSubscriptions(id: Person.Id, subscriptions: NotificationProperties.Subscription[], tokens?: Dictionary<NotificationProperties.TokenId, string>): Document;
30
- }
31
- export declare function expectThrowsFunctionsError(fn: () => Promise<any>, expectedCode: FunctionsErrorCode, message?: string | null): Promise<FunctionsError>;
32
- export declare function configureFirebase(collections: Record<string, Collection>, messaging?: Messaging): void;