@stevenkellner/team-conduct-api 2.0.17 → 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.
- package/lib/src/functions/fine/add.d.ts +3 -8
- package/lib/src/functions/fine/add.js +1 -2
- package/lib/src/functions/fine/delete.d.ts +1 -6
- package/lib/src/functions/fine/delete.js +2 -3
- package/lib/src/functions/fine/update.d.ts +2 -8
- package/lib/src/functions/fine/update.js +1 -3
- package/lib/src/functions/fineTemplate/add.d.ts +3 -3
- package/lib/src/functions/fineTemplate/update.d.ts +3 -3
- package/lib/src/functions/firebaseFunctionsContext.d.ts +34 -1
- package/lib/src/functions/firebaseFunctionsContext.js +33 -33
- package/lib/src/functions/index.d.ts +10 -8
- package/lib/src/functions/index.js +11 -8
- package/lib/src/functions/notification/markNotificationAsRead.d.ts +14 -0
- package/lib/src/functions/notification/{subscribe.js → markNotificationAsRead.js} +5 -7
- package/lib/src/functions/person/kickout.d.ts +6 -6
- package/lib/src/functions/person/kickout.js +4 -4
- package/lib/src/functions/person/roleEdit.d.ts +5 -5
- package/lib/src/functions/person/roleEdit.js +3 -3
- package/lib/src/functions/{paypalMe/edit.d.ts → team/delete.d.ts} +5 -7
- package/lib/src/functions/{paypalMe/edit.js → team/delete.js} +4 -5
- package/lib/src/functions/team/new.d.ts +18 -18
- package/lib/src/functions/team/new.js +8 -4
- package/lib/src/functions/team/update.d.ts +34 -0
- package/lib/src/functions/team/update.js +23 -0
- package/lib/src/functions/user/register.d.ts +4 -0
- package/lib/src/functions/user/register.js +3 -1
- package/lib/src/functions/user/update.d.ts +26 -0
- package/lib/src/functions/user/update.js +15 -0
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.js +1 -1
- package/lib/src/locales/de.d.ts +1 -1
- package/lib/src/locales/de.js +6 -2
- package/lib/src/locales/en.d.ts +6 -2
- package/lib/src/locales/en.js +6 -2
- package/lib/src/types/{MoneyAmount.d.ts → Money.d.ts} +23 -23
- package/lib/src/types/{MoneyAmount.js → Money.js} +25 -25
- package/lib/src/types/fine/Fine.d.ts +275 -0
- package/lib/src/types/fine/Fine.js +318 -0
- package/lib/src/types/fine/FineTemplate.d.ts +154 -0
- package/lib/src/types/fine/FineTemplate.js +170 -0
- package/lib/src/types/{PayedState.d.ts → fine/PayedState.d.ts} +1 -1
- package/lib/src/types/{PayedState.js → fine/PayedState.js} +1 -1
- package/lib/src/types/fine/index.d.ts +3 -0
- package/lib/src/{firebase → types/fine}/index.js +3 -6
- package/lib/src/types/index.d.ts +7 -18
- package/lib/src/types/index.js +7 -18
- package/lib/src/types/{Localization.d.ts → localization/Localization.d.ts} +15 -43
- package/lib/src/types/localization/Localization.js +54 -0
- package/lib/src/types/localization/PluralLocalization.d.ts +23 -0
- package/lib/src/types/localization/PluralLocalization.js +35 -0
- package/lib/src/types/{Pluralization.d.ts → localization/Pluralization.d.ts} +1 -0
- package/lib/src/types/{Pluralization.js → localization/Pluralization.js} +1 -0
- package/lib/src/types/localization/ValueLocalization.d.ts +22 -0
- package/lib/src/types/localization/ValueLocalization.js +41 -0
- package/lib/src/types/localization/index.d.ts +5 -0
- package/lib/src/types/localization/index.js +21 -0
- package/lib/src/types/notification/InAppNotification.d.ts +152 -0
- package/lib/src/types/notification/InAppNotification.js +136 -0
- package/lib/src/types/notification/index.d.ts +1 -0
- package/lib/src/types/notification/index.js +17 -0
- package/lib/src/types/{Person.d.ts → person/Person.d.ts} +3 -3
- package/lib/src/types/{Person.js → person/Person.js} +3 -3
- package/lib/src/types/{PersonProperties.d.ts → person/PersonProperties.d.ts} +8 -7
- package/lib/src/types/{PersonProperties.js → person/PersonProperties.js} +7 -6
- package/lib/src/types/{PersonSignInProperties.d.ts → person/PersonSignInProperties.d.ts} +9 -11
- package/lib/src/types/{PersonSignInProperties.js → person/PersonSignInProperties.js} +7 -10
- package/lib/src/types/person/index.d.ts +3 -0
- package/lib/src/types/person/index.js +19 -0
- package/lib/src/types/{Invitation.d.ts → team/Invitation.d.ts} +1 -1
- package/lib/src/types/{Invitation.js → team/Invitation.js} +1 -1
- package/lib/src/types/team/Team.d.ts +144 -0
- package/lib/src/types/team/Team.js +141 -0
- package/lib/src/types/team/TeamRole.d.ts +30 -0
- package/lib/src/types/{UserRole.js → team/TeamRole.js} +16 -15
- package/lib/src/types/team/index.d.ts +3 -0
- package/lib/src/types/team/index.js +19 -0
- package/lib/src/types/{NotificationProperties.d.ts → user/NotificationProperties.d.ts} +8 -3
- package/lib/src/types/{NotificationProperties.js → user/NotificationProperties.js} +4 -0
- package/lib/src/types/user/User.d.ts +328 -0
- package/lib/src/types/user/User.js +355 -0
- package/lib/src/types/user/index.d.ts +2 -0
- package/lib/src/types/user/index.js +18 -0
- package/lib/src/utils/StaticUnionTypeBuilder.d.ts +9 -0
- package/lib/src/utils/StaticUnionTypeBuilder.js +23 -0
- package/lib/src/utils/index.d.ts +1 -0
- package/lib/src/utils/index.js +17 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/src/functions/fine/add.ts +3 -5
- package/src/functions/fine/delete.ts +3 -5
- package/src/functions/fine/update.ts +2 -5
- package/src/functions/firebaseFunctionsContext.ts +40 -40
- package/src/functions/index.ts +11 -9
- package/src/functions/notification/markNotificationAsRead.ts +19 -0
- package/src/functions/person/add.ts +1 -1
- package/src/functions/person/kickout.ts +6 -6
- package/src/functions/person/roleEdit.ts +5 -5
- package/src/functions/{paypalMe/edit.ts → team/delete.ts} +5 -7
- package/src/functions/team/new.ts +19 -11
- package/src/functions/team/update.ts +40 -0
- package/src/functions/user/register.ts +7 -3
- package/src/functions/user/update.ts +29 -0
- package/src/index.ts +1 -1
- package/src/locales/de.ts +7 -3
- package/src/locales/en.ts +7 -3
- package/src/types/{MoneyAmount.ts → Money.ts} +29 -29
- package/src/types/fine/Fine.ts +399 -0
- package/src/types/fine/FineTemplate.ts +219 -0
- package/src/types/{PayedState.ts → fine/PayedState.ts} +2 -2
- package/src/types/fine/index.ts +3 -0
- package/src/types/index.ts +7 -18
- package/src/types/{Localization.ts → localization/Localization.ts} +7 -64
- package/src/types/localization/PluralLocalization.ts +32 -0
- package/src/types/{Pluralization.ts → localization/Pluralization.ts} +1 -0
- package/src/types/localization/ValueLocalization.ts +36 -0
- package/src/types/localization/index.ts +5 -0
- package/src/types/notification/InAppNotification.ts +184 -0
- package/src/types/notification/index.ts +1 -0
- package/src/types/{Person.ts → person/Person.ts} +3 -3
- package/src/types/{PersonProperties.ts → person/PersonProperties.ts} +8 -7
- package/src/types/{PersonSignInProperties.ts → person/PersonSignInProperties.ts} +13 -12
- package/src/types/person/index.ts +3 -0
- package/src/types/{Invitation.ts → team/Invitation.ts} +1 -1
- package/src/types/team/Team.ts +204 -0
- package/src/types/{UserRole.ts → team/TeamRole.ts} +19 -17
- package/src/types/team/index.ts +3 -0
- package/src/types/{NotificationProperties.ts → user/NotificationProperties.ts} +12 -3
- package/src/types/user/User.ts +451 -0
- package/src/types/user/index.ts +2 -0
- package/src/utils/StaticUnionTypeBuilder.ts +23 -0
- package/src/utils/index.ts +1 -0
- package/lib/src/firebase/FirebaseConfiguration.d.ts +0 -64
- package/lib/src/firebase/FirebaseConfiguration.js +0 -79
- package/lib/src/firebase/Firestore.d.ts +0 -201
- package/lib/src/firebase/Firestore.js +0 -244
- package/lib/src/firebase/FirestoreScheme.d.ts +0 -42
- package/lib/src/firebase/FirestoreScheme.js +0 -2
- package/lib/src/firebase/Messaging.d.ts +0 -90
- package/lib/src/firebase/Messaging.js +0 -2
- package/lib/src/firebase/checkAuthentication.d.ts +0 -38
- package/lib/src/firebase/checkAuthentication.js +0 -64
- package/lib/src/firebase/index.d.ts +0 -6
- package/lib/src/firebase/pushNotification.d.ts +0 -39
- package/lib/src/firebase/pushNotification.js +0 -88
- package/lib/src/functions/notification/subscribe.d.ts +0 -18
- package/lib/src/types/Configuration.d.ts +0 -46
- package/lib/src/types/Configuration.js +0 -51
- package/lib/src/types/Fine.d.ts +0 -71
- package/lib/src/types/Fine.js +0 -74
- package/lib/src/types/FineAmount.d.ts +0 -207
- package/lib/src/types/FineAmount.js +0 -238
- package/lib/src/types/FineTemplate.d.ts +0 -69
- package/lib/src/types/FineTemplate.js +0 -72
- package/lib/src/types/FineTemplateRepetition.d.ts +0 -87
- package/lib/src/types/FineTemplateRepetition.js +0 -103
- package/lib/src/types/Localization.js +0 -115
- package/lib/src/types/Team.d.ts +0 -62
- package/lib/src/types/Team.js +0 -64
- package/lib/src/types/User.d.ts +0 -221
- package/lib/src/types/User.js +0 -235
- package/lib/src/types/UserRole.d.ts +0 -29
- package/lib/test/firebase/FirebaseConfiguration.test.d.ts +0 -1
- package/lib/test/firebase/FirebaseConfiguration.test.js +0 -158
- package/lib/test/firebase/Firestore.test.d.ts +0 -1
- package/lib/test/firebase/Firestore.test.js +0 -46
- package/lib/test/firebase/checkAuthentication.test.d.ts +0 -1
- package/lib/test/firebase/checkAuthentication.test.js +0 -356
- package/lib/test/firebase/firebase-utils.d.ts +0 -32
- package/lib/test/firebase/firebase-utils.js +0 -134
- package/lib/test/firebase/pushNotification.test.d.ts +0 -1
- package/lib/test/firebase/pushNotification.test.js +0 -300
- package/lib/test/locales/localization.de.test.d.ts +0 -1
- package/lib/test/locales/localization.de.test.js +0 -144
- package/lib/test/locales/localization.en.test.d.ts +0 -1
- package/lib/test/locales/localization.en.test.js +0 -144
- package/lib/test/types/Configuration.test.d.ts +0 -1
- package/lib/test/types/Configuration.test.js +0 -84
- package/lib/test/types/Currency.test.d.ts +0 -1
- package/lib/test/types/Currency.test.js +0 -41
- package/lib/test/types/Fine.test.d.ts +0 -1
- package/lib/test/types/Fine.test.js +0 -265
- package/lib/test/types/FineAmount.test.d.ts +0 -1
- package/lib/test/types/FineAmount.test.js +0 -445
- package/lib/test/types/FineTemplate.test.d.ts +0 -1
- package/lib/test/types/FineTemplate.test.js +0 -271
- package/lib/test/types/FineTemplateRepetition.test.d.ts +0 -1
- package/lib/test/types/FineTemplateRepetition.test.js +0 -361
- package/lib/test/types/Invitation.test.d.ts +0 -1
- package/lib/test/types/Invitation.test.js +0 -269
- package/lib/test/types/Locale.test.d.ts +0 -1
- package/lib/test/types/Locale.test.js +0 -46
- package/lib/test/types/Localization.test.d.ts +0 -1
- package/lib/test/types/Localization.test.js +0 -241
- package/lib/test/types/MoneyAmount.test.d.ts +0 -1
- package/lib/test/types/MoneyAmount.test.js +0 -276
- package/lib/test/types/NotificationProperties.test.d.ts +0 -1
- package/lib/test/types/NotificationProperties.test.js +0 -258
- package/lib/test/types/PayedState.test.d.ts +0 -1
- package/lib/test/types/PayedState.test.js +0 -136
- package/lib/test/types/Person.test.d.ts +0 -1
- package/lib/test/types/Person.test.js +0 -266
- package/lib/test/types/PersonProperties.test.d.ts +0 -1
- package/lib/test/types/PersonProperties.test.js +0 -155
- package/lib/test/types/PersonSignInProperties.test.d.ts +0 -1
- package/lib/test/types/PersonSignInProperties.test.js +0 -208
- package/lib/test/types/Pluralization.test.d.ts +0 -1
- package/lib/test/types/Pluralization.test.js +0 -206
- package/lib/test/types/Team.test.d.ts +0 -1
- package/lib/test/types/Team.test.js +0 -145
- package/lib/test/types/User.test.d.ts +0 -1
- package/lib/test/types/User.test.js +0 -450
- package/lib/test/types/UserRole.test.d.ts +0 -1
- package/lib/test/types/UserRole.test.js +0 -140
- package/src/firebase/FirebaseConfiguration.ts +0 -99
- package/src/firebase/Firestore.ts +0 -258
- package/src/firebase/FirestoreScheme.ts +0 -41
- package/src/firebase/Messaging.ts +0 -93
- package/src/firebase/checkAuthentication.ts +0 -91
- package/src/firebase/index.ts +0 -7
- package/src/firebase/pushNotification.ts +0 -90
- package/src/functions/notification/subscribe.ts +0 -23
- package/src/types/Configuration.ts +0 -65
- package/src/types/Fine.ts +0 -100
- package/src/types/FineAmount.ts +0 -303
- package/src/types/FineTemplate.ts +0 -96
- package/src/types/FineTemplateRepetition.ts +0 -125
- package/src/types/Team.ts +0 -87
- package/src/types/User.ts +0 -302
- /package/lib/src/types/{Locale.d.ts → localization/Locale.d.ts} +0 -0
- /package/lib/src/types/{Locale.js → localization/Locale.js} +0 -0
- /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;
|