flagsmith-nodejs 3.3.3 → 4.0.0-beta.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.
- package/.github/workflows/publish.yml +2 -2
- package/.github/workflows/pull_request.yaml +3 -4
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/environments/models.d.ts +3 -3
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/environments/models.js +20 -13
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/environments/util.d.ts +1 -1
- package/build/cjs/flagsmith-engine/environments/util.js +23 -0
- package/build/cjs/flagsmith-engine/features/models.js +118 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/features/util.d.ts +1 -1
- package/build/cjs/flagsmith-engine/features/util.js +27 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/identities/models.d.ts +2 -2
- package/build/cjs/flagsmith-engine/identities/models.js +48 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/identities/traits/models.js +5 -4
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/identities/util.d.ts +2 -2
- package/build/cjs/flagsmith-engine/identities/util.js +22 -0
- package/build/cjs/flagsmith-engine/index.d.ts +14 -0
- package/build/cjs/flagsmith-engine/index.js +75 -0
- package/build/cjs/flagsmith-engine/organisations/models.js +21 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/organisations/util.d.ts +1 -1
- package/build/cjs/flagsmith-engine/organisations/util.js +8 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/projects/models.d.ts +2 -2
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/projects/models.js +8 -5
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/projects/util.d.ts +1 -1
- package/build/cjs/flagsmith-engine/projects/util.js +15 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/segments/evaluators.d.ts +4 -4
- package/build/cjs/flagsmith-engine/segments/evaluators.js +37 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/segments/models.d.ts +1 -1
- package/build/cjs/flagsmith-engine/segments/models.js +114 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/segments/util.d.ts +1 -1
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/segments/util.js +9 -11
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/utils/collections.d.ts +1 -1
- package/build/cjs/flagsmith-engine/utils/collections.js +6 -0
- package/build/cjs/flagsmith-engine/utils/errors.js +6 -0
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/utils/hashing/index.js +8 -11
- package/build/{flagsmith-engine → cjs/flagsmith-engine}/utils/index.js +5 -5
- package/build/{index.d.ts → cjs/index.d.ts} +3 -3
- package/build/{index.js → cjs/index.js} +17 -17
- package/build/cjs/package.json +1 -0
- package/build/{sdk → cjs/sdk}/analytics.d.ts +3 -0
- package/build/cjs/sdk/analytics.js +73 -0
- package/build/cjs/sdk/errors.js +9 -0
- package/build/{sdk → cjs/sdk}/index.d.ts +19 -18
- package/build/cjs/sdk/index.js +400 -0
- package/build/{sdk → cjs/sdk}/models.d.ts +2 -2
- package/build/cjs/sdk/models.js +101 -0
- package/build/{sdk → cjs/sdk}/offline_handlers.d.ts +1 -1
- package/build/cjs/sdk/offline_handlers.js +46 -0
- package/build/{sdk → cjs/sdk}/polling_manager.d.ts +1 -1
- package/build/cjs/sdk/polling_manager.js +29 -0
- package/build/{sdk → cjs/sdk}/types.d.ts +15 -7
- package/build/cjs/sdk/utils.d.ts +36 -0
- package/build/cjs/sdk/utils.js +63 -0
- package/build/esm/flagsmith-engine/environments/models.d.ts +22 -0
- package/build/esm/flagsmith-engine/environments/models.js +32 -0
- package/build/esm/flagsmith-engine/environments/util.d.ts +3 -0
- package/build/esm/flagsmith-engine/environments/util.js +18 -0
- package/build/esm/flagsmith-engine/features/constants.d.ts +4 -0
- package/build/esm/flagsmith-engine/features/constants.js +4 -0
- package/build/esm/flagsmith-engine/features/models.d.ts +37 -0
- package/build/esm/flagsmith-engine/features/models.js +110 -0
- package/build/esm/flagsmith-engine/features/util.d.ts +4 -0
- package/build/esm/flagsmith-engine/features/util.js +21 -0
- package/build/esm/flagsmith-engine/identities/models.d.ts +15 -0
- package/build/esm/flagsmith-engine/identities/models.js +44 -0
- package/build/esm/flagsmith-engine/identities/traits/models.d.ts +5 -0
- package/build/esm/flagsmith-engine/identities/traits/models.js +8 -0
- package/build/esm/flagsmith-engine/identities/util.d.ts +4 -0
- package/build/esm/flagsmith-engine/identities/util.js +17 -0
- package/build/esm/flagsmith-engine/index.d.ts +14 -0
- package/build/esm/flagsmith-engine/index.js +62 -0
- package/build/esm/flagsmith-engine/organisations/models.d.ts +9 -0
- package/build/esm/flagsmith-engine/organisations/models.js +17 -0
- package/build/esm/flagsmith-engine/organisations/util.d.ts +2 -0
- package/build/esm/flagsmith-engine/organisations/util.js +4 -0
- package/build/esm/flagsmith-engine/projects/models.d.ts +10 -0
- package/build/esm/flagsmith-engine/projects/models.js +13 -0
- package/build/esm/flagsmith-engine/projects/util.d.ts +2 -0
- package/build/esm/flagsmith-engine/projects/util.js +11 -0
- package/build/esm/flagsmith-engine/segments/constants.d.ts +34 -0
- package/build/esm/flagsmith-engine/segments/constants.js +36 -0
- package/build/esm/flagsmith-engine/segments/evaluators.d.ts +7 -0
- package/build/esm/flagsmith-engine/segments/evaluators.js +31 -0
- package/build/esm/flagsmith-engine/segments/models.d.ts +37 -0
- package/build/esm/flagsmith-engine/segments/models.js +102 -0
- package/build/esm/flagsmith-engine/segments/util.d.ts +6 -0
- package/build/esm/flagsmith-engine/segments/util.js +23 -0
- package/build/esm/flagsmith-engine/utils/collections.d.ts +3 -0
- package/build/esm/flagsmith-engine/utils/collections.js +2 -0
- package/build/esm/flagsmith-engine/utils/errors.d.ts +2 -0
- package/build/esm/flagsmith-engine/utils/errors.js +2 -0
- package/build/esm/flagsmith-engine/utils/hashing/index.d.ts +9 -0
- package/build/esm/flagsmith-engine/utils/hashing/index.js +50 -0
- package/build/esm/flagsmith-engine/utils/index.d.ts +1 -0
- package/build/esm/flagsmith-engine/utils/index.js +13 -0
- package/build/esm/index.d.ts +3 -0
- package/build/esm/index.js +4 -0
- package/build/esm/sdk/analytics.d.ts +35 -0
- package/build/esm/sdk/analytics.js +69 -0
- package/build/esm/sdk/errors.d.ts +4 -0
- package/build/esm/sdk/errors.js +4 -0
- package/build/esm/sdk/index.d.ts +131 -0
- package/build/esm/sdk/index.js +390 -0
- package/build/esm/sdk/models.d.ts +55 -0
- package/build/esm/sdk/models.js +94 -0
- package/build/esm/sdk/offline_handlers.d.ts +9 -0
- package/build/esm/sdk/offline_handlers.js +18 -0
- package/build/esm/sdk/polling_manager.d.ts +9 -0
- package/build/esm/sdk/polling_manager.js +25 -0
- package/build/esm/sdk/types.d.ts +38 -0
- package/build/esm/sdk/types.js +1 -0
- package/build/esm/sdk/utils.d.ts +36 -0
- package/build/esm/sdk/utils.js +56 -0
- package/flagsmith-engine/environments/models.ts +3 -3
- package/flagsmith-engine/environments/util.ts +4 -4
- package/flagsmith-engine/features/models.ts +1 -1
- package/flagsmith-engine/features/util.ts +1 -1
- package/flagsmith-engine/identities/models.ts +3 -4
- package/flagsmith-engine/identities/traits/models.ts +0 -1
- package/flagsmith-engine/identities/util.ts +4 -4
- package/flagsmith-engine/index.ts +13 -13
- package/flagsmith-engine/organisations/util.ts +1 -1
- package/flagsmith-engine/projects/models.ts +2 -2
- package/flagsmith-engine/projects/util.ts +4 -4
- package/flagsmith-engine/segments/evaluators.ts +6 -6
- package/flagsmith-engine/segments/models.ts +4 -4
- package/flagsmith-engine/segments/util.ts +3 -3
- package/flagsmith-engine/utils/collections.ts +1 -1
- package/flagsmith-engine/utils/index.ts +1 -1
- package/index.ts +4 -4
- package/package.json +21 -9
- package/sdk/analytics.ts +7 -5
- package/sdk/index.ts +55 -46
- package/sdk/models.ts +2 -3
- package/sdk/offline_handlers.ts +2 -2
- package/sdk/polling_manager.ts +2 -3
- package/sdk/types.ts +35 -24
- package/sdk/utils.ts +49 -37
- package/tests/engine/e2e/engine.test.ts +5 -5
- package/tests/engine/unit/engine.test.ts +5 -5
- package/tests/engine/unit/segments/segment_evaluators.test.ts +9 -9
- package/tests/engine/unit/utils/utils.test.ts +1 -1
- package/tests/sdk/analytics.test.ts +8 -13
- package/tests/sdk/data/identity-with-transient-traits.json +41 -0
- package/tests/sdk/data/transient-identity.json +29 -0
- package/tests/sdk/flagsmith-cache.test.ts +16 -32
- package/tests/sdk/flagsmith-environment-flags.test.ts +21 -36
- package/tests/sdk/flagsmith-identity-flags.test.ts +83 -32
- package/tests/sdk/flagsmith.test.ts +67 -99
- package/tests/sdk/offline-handlers.test.ts +4 -5
- package/tests/sdk/polling.test.ts +6 -8
- package/tests/sdk/utils.ts +19 -15
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.esm.json +7 -0
- package/tsconfig.json +7 -3
- package/vitest.config.ts +17 -0
- package/build/flagsmith-engine/environments/util.js +0 -27
- package/build/flagsmith-engine/features/models.js +0 -132
- package/build/flagsmith-engine/features/util.js +0 -27
- package/build/flagsmith-engine/identities/models.js +0 -113
- package/build/flagsmith-engine/identities/util.js +0 -46
- package/build/flagsmith-engine/index.d.ts +0 -14
- package/build/flagsmith-engine/index.js +0 -127
- package/build/flagsmith-engine/organisations/models.js +0 -21
- package/build/flagsmith-engine/organisations/util.js +0 -8
- package/build/flagsmith-engine/projects/util.js +0 -15
- package/build/flagsmith-engine/segments/evaluators.js +0 -45
- package/build/flagsmith-engine/segments/models.js +0 -147
- package/build/flagsmith-engine/utils/collections.js +0 -26
- package/build/flagsmith-engine/utils/errors.js +0 -26
- package/build/sdk/analytics.js +0 -120
- package/build/sdk/errors.js +0 -34
- package/build/sdk/index.js +0 -594
- package/build/sdk/models.js +0 -149
- package/build/sdk/offline_handlers.js +0 -66
- package/build/sdk/polling_manager.js +0 -72
- package/build/sdk/utils.d.ts +0 -12
- package/build/sdk/utils.js +0 -107
- package/jest.config.js +0 -5
- package/tests/index.js +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/features/constants.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/features/constants.js +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/features/models.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/identities/traits/models.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/organisations/models.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/segments/constants.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/segments/constants.js +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/utils/errors.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/utils/hashing/index.d.ts +0 -0
- /package/build/{flagsmith-engine → cjs/flagsmith-engine}/utils/index.d.ts +0 -0
- /package/build/{sdk → cjs/sdk}/errors.d.ts +0 -0
- /package/build/{sdk → cjs/sdk}/types.js +0 -0
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import Flagsmith from '../../sdk';
|
|
2
|
-
import fetch from '
|
|
3
|
-
import {
|
|
4
|
-
import { DefaultFlag } from '../../sdk/models';
|
|
1
|
+
import Flagsmith from '../../sdk/index.js';
|
|
2
|
+
import { environmentJSON, environmentModel, flagsJSON, flagsmith, fetch } from './utils.js';
|
|
3
|
+
import { DefaultFlag } from '../../sdk/models.js';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
jest.mock('../../sdk/polling_manager');
|
|
8
|
-
const { Response } = jest.requireActual('node-fetch');
|
|
5
|
+
vi.mock('../../sdk/polling_manager');
|
|
9
6
|
|
|
10
7
|
beforeEach(() => {
|
|
11
|
-
|
|
12
|
-
jest.clearAllMocks();
|
|
8
|
+
vi.clearAllMocks();
|
|
13
9
|
});
|
|
14
10
|
|
|
15
11
|
test('test_get_environment_flags_calls_api_when_no_local_environment', async () => {
|
|
16
|
-
|
|
17
|
-
fetch.mockReturnValue(Promise.resolve(new Response(flagsJSON())));
|
|
12
|
+
fetch.mockResolvedValue(new Response(flagsJSON));
|
|
18
13
|
|
|
19
14
|
const flg = flagsmith();
|
|
20
15
|
const allFlags = await (await flg.getEnvironmentFlags()).allFlags();
|
|
@@ -26,11 +21,10 @@ test('test_get_environment_flags_calls_api_when_no_local_environment', async ()
|
|
|
26
21
|
});
|
|
27
22
|
|
|
28
23
|
test('test_get_environment_flags_uses_local_environment_when_available', async () => {
|
|
29
|
-
|
|
30
|
-
fetch.mockReturnValue(Promise.resolve(new Response(flagsJSON())));
|
|
24
|
+
fetch.mockResolvedValue(new Response(flagsJSON));
|
|
31
25
|
|
|
32
26
|
const flg = flagsmith();
|
|
33
|
-
const model = environmentModel(JSON.parse(environmentJSON
|
|
27
|
+
const model = environmentModel(JSON.parse(environmentJSON));
|
|
34
28
|
flg.environment = model;
|
|
35
29
|
|
|
36
30
|
const allFlags = await (await flg.getEnvironmentFlags()).allFlags();
|
|
@@ -41,8 +35,7 @@ test('test_get_environment_flags_uses_local_environment_when_available', async (
|
|
|
41
35
|
});
|
|
42
36
|
|
|
43
37
|
test('test_default_flag_is_used_when_no_environment_flags_returned', async () => {
|
|
44
|
-
|
|
45
|
-
fetch.mockReturnValue(Promise.resolve(new Response(JSON.stringify([]))));
|
|
38
|
+
fetch.mockResolvedValue(new Response(JSON.stringify([])));
|
|
46
39
|
|
|
47
40
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
48
41
|
|
|
@@ -64,14 +57,13 @@ test('test_default_flag_is_used_when_no_environment_flags_returned', async () =>
|
|
|
64
57
|
});
|
|
65
58
|
|
|
66
59
|
test('test_analytics_processor_tracks_flags', async () => {
|
|
67
|
-
|
|
68
|
-
fetch.mockReturnValue(Promise.resolve(new Response(flagsJSON())));
|
|
60
|
+
fetch.mockResolvedValue(new Response(flagsJSON));
|
|
69
61
|
|
|
70
62
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
71
63
|
|
|
72
64
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
73
65
|
|
|
74
|
-
const flg =
|
|
66
|
+
const flg = flagsmith({
|
|
75
67
|
environmentKey: 'key',
|
|
76
68
|
defaultFlagHandler: defaultFlagHandler,
|
|
77
69
|
enableAnalytics: true,
|
|
@@ -86,14 +78,13 @@ test('test_analytics_processor_tracks_flags', async () => {
|
|
|
86
78
|
});
|
|
87
79
|
|
|
88
80
|
test('test_getFeatureValue', async () => {
|
|
89
|
-
|
|
90
|
-
fetch.mockReturnValue(Promise.resolve(new Response(flagsJSON())));
|
|
81
|
+
fetch.mockResolvedValue(new Response(flagsJSON));
|
|
91
82
|
|
|
92
83
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
93
84
|
|
|
94
85
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
95
86
|
|
|
96
|
-
const flg =
|
|
87
|
+
const flg = flagsmith({
|
|
97
88
|
environmentKey: 'key',
|
|
98
89
|
defaultFlagHandler: defaultFlagHandler,
|
|
99
90
|
enableAnalytics: true,
|
|
@@ -106,11 +97,9 @@ test('test_getFeatureValue', async () => {
|
|
|
106
97
|
});
|
|
107
98
|
|
|
108
99
|
test('test_throws_when_no_default_flag_handler_after_multiple_API_errors', async () => {
|
|
109
|
-
fetch
|
|
110
|
-
// @ts-ignore
|
|
111
|
-
.mockRejectedValue(new Error('Error during fetching the API response'));
|
|
100
|
+
fetch.mockRejectedValue('Error during fetching the API response');
|
|
112
101
|
|
|
113
|
-
const flg =
|
|
102
|
+
const flg = flagsmith({
|
|
114
103
|
environmentKey: 'key',
|
|
115
104
|
});
|
|
116
105
|
|
|
@@ -124,8 +113,7 @@ test('test_non_200_response_raises_flagsmith_api_error', async () => {
|
|
|
124
113
|
const errorResponse403 = new Response('403 Forbidden', {
|
|
125
114
|
status: 403
|
|
126
115
|
});
|
|
127
|
-
|
|
128
|
-
fetch.mockReturnValue(Promise.resolve(errorResponse403));
|
|
116
|
+
fetch.mockResolvedValue(errorResponse403);
|
|
129
117
|
|
|
130
118
|
const flg = new Flagsmith({
|
|
131
119
|
environmentKey: 'some'
|
|
@@ -134,14 +122,13 @@ test('test_non_200_response_raises_flagsmith_api_error', async () => {
|
|
|
134
122
|
await expect(flg.getEnvironmentFlags()).rejects.toThrow();
|
|
135
123
|
});
|
|
136
124
|
test('test_default_flag_is_not_used_when_environment_flags_returned', async () => {
|
|
137
|
-
|
|
138
|
-
fetch.mockReturnValue(Promise.resolve(new Response(flagsJSON())));
|
|
125
|
+
fetch.mockResolvedValue(new Response(flagsJSON));
|
|
139
126
|
|
|
140
127
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
141
128
|
|
|
142
129
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
143
130
|
|
|
144
|
-
const flg =
|
|
131
|
+
const flg = flagsmith({
|
|
145
132
|
environmentKey: 'key',
|
|
146
133
|
defaultFlagHandler: defaultFlagHandler
|
|
147
134
|
});
|
|
@@ -155,8 +142,7 @@ test('test_default_flag_is_not_used_when_environment_flags_returned', async () =
|
|
|
155
142
|
});
|
|
156
143
|
|
|
157
144
|
test('test_default_flag_is_used_when_bad_api_response_happens', async () => {
|
|
158
|
-
|
|
159
|
-
fetch.mockReturnValue(Promise.resolve(new Response('bad-data')));
|
|
145
|
+
fetch.mockResolvedValue(new Response('bad-data'));
|
|
160
146
|
|
|
161
147
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
162
148
|
|
|
@@ -175,14 +161,13 @@ test('test_default_flag_is_used_when_bad_api_response_happens', async () => {
|
|
|
175
161
|
});
|
|
176
162
|
|
|
177
163
|
test('test_local_evaluation', async () => {
|
|
178
|
-
|
|
179
|
-
fetch.mockReturnValue(Promise.resolve(new Response(environmentJSON())));
|
|
164
|
+
fetch.mockResolvedValue(new Response(environmentJSON));
|
|
180
165
|
|
|
181
166
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
182
167
|
|
|
183
168
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
184
169
|
|
|
185
|
-
const flg =
|
|
170
|
+
const flg = flagsmith({
|
|
186
171
|
environmentKey: 'ser.key',
|
|
187
172
|
enableLocalEvaluation: true,
|
|
188
173
|
defaultFlagHandler: defaultFlagHandler
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import Flagsmith from '../../sdk';
|
|
2
|
-
import fetch from '
|
|
3
|
-
import {
|
|
4
|
-
import { DefaultFlag } from '../../sdk/models';
|
|
1
|
+
import Flagsmith from '../../sdk/index.js';
|
|
2
|
+
import { fetch, environmentJSON, flagsmith, identitiesJSON, identityWithTransientTraitsJSON, transientIdentityJSON } from './utils.js';
|
|
3
|
+
import { DefaultFlag } from '../../sdk/models.js';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
jest.mock('../../sdk/polling_manager');
|
|
8
|
-
const { Response } = jest.requireActual('node-fetch');
|
|
5
|
+
vi.mock('../../sdk/polling_manager');
|
|
9
6
|
|
|
10
7
|
beforeEach(() => {
|
|
11
|
-
|
|
12
|
-
jest.clearAllMocks();
|
|
8
|
+
vi.clearAllMocks();
|
|
13
9
|
});
|
|
14
10
|
|
|
15
11
|
|
|
16
12
|
test('test_get_identity_flags_calls_api_when_no_local_environment_no_traits', async () => {
|
|
17
|
-
|
|
18
|
-
fetch.mockReturnValue(Promise.resolve(new Response(identitiesJSON())));
|
|
13
|
+
fetch.mockResolvedValue(new Response(identitiesJSON));
|
|
19
14
|
const identifier = 'identifier';
|
|
20
15
|
|
|
21
16
|
const flg = flagsmith();
|
|
@@ -28,14 +23,12 @@ test('test_get_identity_flags_calls_api_when_no_local_environment_no_traits', as
|
|
|
28
23
|
});
|
|
29
24
|
|
|
30
25
|
test('test_get_identity_flags_uses_environment_when_local_environment_no_traits', async () => {
|
|
31
|
-
|
|
32
|
-
fetch.mockReturnValue(Promise.resolve(new Response(environmentJSON())));
|
|
26
|
+
fetch.mockResolvedValue(new Response(environmentJSON))
|
|
33
27
|
const identifier = 'identifier';
|
|
34
28
|
|
|
35
29
|
const flg = flagsmith({
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
environmentKey: 'ser.key',
|
|
31
|
+
enableLocalEvaluation: true,
|
|
39
32
|
});
|
|
40
33
|
|
|
41
34
|
|
|
@@ -47,8 +40,7 @@ test('test_get_identity_flags_uses_environment_when_local_environment_no_traits'
|
|
|
47
40
|
});
|
|
48
41
|
|
|
49
42
|
test('test_get_identity_flags_calls_api_when_no_local_environment_with_traits', async () => {
|
|
50
|
-
|
|
51
|
-
fetch.mockReturnValue(Promise.resolve(new Response(identitiesJSON())));
|
|
43
|
+
fetch.mockResolvedValue(new Response(identitiesJSON))
|
|
52
44
|
const identifier = 'identifier';
|
|
53
45
|
const traits = { some_trait: 'some_value' };
|
|
54
46
|
const flg = flagsmith();
|
|
@@ -61,14 +53,13 @@ test('test_get_identity_flags_calls_api_when_no_local_environment_with_traits',
|
|
|
61
53
|
});
|
|
62
54
|
|
|
63
55
|
test('test_default_flag_is_not_used_when_identity_flags_returned', async () => {
|
|
64
|
-
|
|
65
|
-
fetch.mockReturnValue(Promise.resolve(new Response(identitiesJSON())));
|
|
56
|
+
fetch.mockResolvedValue(new Response(identitiesJSON))
|
|
66
57
|
|
|
67
58
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
68
59
|
|
|
69
60
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
70
61
|
|
|
71
|
-
const flg =
|
|
62
|
+
const flg = flagsmith({
|
|
72
63
|
environmentKey: 'key',
|
|
73
64
|
defaultFlagHandler: defaultFlagHandler
|
|
74
65
|
});
|
|
@@ -82,8 +73,7 @@ test('test_default_flag_is_not_used_when_identity_flags_returned', async () => {
|
|
|
82
73
|
});
|
|
83
74
|
|
|
84
75
|
test('test_default_flag_is_used_when_no_identity_flags_returned', async () => {
|
|
85
|
-
|
|
86
|
-
fetch.mockReturnValue(Promise.resolve(new Response(JSON.stringify({ flags: [], traits: [] }))));
|
|
76
|
+
fetch.mockResolvedValue(new Response(JSON.stringify({ flags: [], traits: [] })));
|
|
87
77
|
|
|
88
78
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
89
79
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
@@ -102,8 +92,7 @@ test('test_default_flag_is_used_when_no_identity_flags_returned', async () => {
|
|
|
102
92
|
});
|
|
103
93
|
|
|
104
94
|
test('test_default_flag_is_used_when_no_identity_flags_returned_due_to_error', async () => {
|
|
105
|
-
|
|
106
|
-
fetch.mockReturnValue(Promise.resolve(new Response('bad data')));
|
|
95
|
+
fetch.mockResolvedValue(new Response('bad data'))
|
|
107
96
|
|
|
108
97
|
const defaultFlag = new DefaultFlag('some-default-value', true);
|
|
109
98
|
const defaultFlagHandler = (featureName: string) => defaultFlag;
|
|
@@ -122,12 +111,10 @@ test('test_default_flag_is_used_when_no_identity_flags_returned_due_to_error', a
|
|
|
122
111
|
});
|
|
123
112
|
|
|
124
113
|
test('test_default_flag_is_used_when_no_identity_flags_returned_and_no_custom_default_flag_handler', async () => {
|
|
125
|
-
|
|
126
|
-
fetch.mockReturnValue(Promise.resolve(new Response(JSON.stringify({ flags: [], traits: [] }))));
|
|
127
|
-
|
|
114
|
+
fetch.mockResolvedValue(new Response(JSON.stringify({ flags: [], traits: [] })))
|
|
128
115
|
|
|
129
|
-
const flg =
|
|
130
|
-
|
|
116
|
+
const flg = flagsmith({
|
|
117
|
+
environmentKey: 'key',
|
|
131
118
|
});
|
|
132
119
|
|
|
133
120
|
const flags = await flg.getIdentityFlags('identifier');
|
|
@@ -140,8 +127,7 @@ test('test_default_flag_is_used_when_no_identity_flags_returned_and_no_custom_de
|
|
|
140
127
|
|
|
141
128
|
|
|
142
129
|
test('test_get_identity_flags_multivariate_value_with_local_evaluation_enabled', async () => {
|
|
143
|
-
|
|
144
|
-
fetch.mockReturnValue(Promise.resolve(new Response(environmentJSON())));
|
|
130
|
+
fetch.mockResolvedValue(new Response(environmentJSON));
|
|
145
131
|
const identifier = 'identifier';
|
|
146
132
|
|
|
147
133
|
const flg = flagsmith({
|
|
@@ -155,3 +141,68 @@ test('test_get_identity_flags_multivariate_value_with_local_evaluation_enabled',
|
|
|
155
141
|
expect(identityFlags.getFeatureValue('mv_feature')).toBe('bar');
|
|
156
142
|
expect(identityFlags.isFeatureEnabled('mv_feature')).toBe(false);
|
|
157
143
|
});
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
test('test_transient_identity', async () => {
|
|
147
|
+
fetch.mockResolvedValue(new Response(transientIdentityJSON));
|
|
148
|
+
const identifier = 'transient_identifier';
|
|
149
|
+
const traits = { some_trait: 'some_value' };
|
|
150
|
+
const traitsInRequest = [{trait_key:Object.keys(traits)[0],trait_value:traits.some_trait}]
|
|
151
|
+
const transient = true;
|
|
152
|
+
const flg = flagsmith();
|
|
153
|
+
const identityFlags = (await flg.getIdentityFlags(identifier, traits, transient)).allFlags();
|
|
154
|
+
|
|
155
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
156
|
+
`https://edge.api.flagsmith.com/api/v1/identities/`,
|
|
157
|
+
expect.objectContaining({
|
|
158
|
+
method: 'POST',
|
|
159
|
+
headers: { 'Content-Type': 'application/json', 'X-Environment-Key': 'sometestfakekey' },
|
|
160
|
+
body: JSON.stringify({identifier, traits: traitsInRequest, transient })
|
|
161
|
+
}
|
|
162
|
+
));
|
|
163
|
+
|
|
164
|
+
expect(identityFlags[0].enabled).toBe(false);
|
|
165
|
+
expect(identityFlags[0].value).toBe('some-transient-identity-value');
|
|
166
|
+
expect(identityFlags[0].featureName).toBe('some_feature');
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
test('test_identity_with_transient_traits', async () => {
|
|
171
|
+
fetch.mockResolvedValue(new Response(identityWithTransientTraitsJSON));
|
|
172
|
+
const identifier = 'transient_trait_identifier';
|
|
173
|
+
const traits = {
|
|
174
|
+
some_trait: 'some_value',
|
|
175
|
+
another_trait: {value: 'another_value', transient: true},
|
|
176
|
+
explicitly_non_transient_trait: {value: 'non_transient_value', transient: false}
|
|
177
|
+
}
|
|
178
|
+
const traitsInRequest = [
|
|
179
|
+
{
|
|
180
|
+
trait_key:Object.keys(traits)[0],
|
|
181
|
+
trait_value:traits.some_trait,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
trait_key:Object.keys(traits)[1],
|
|
185
|
+
trait_value:traits.another_trait.value,
|
|
186
|
+
transient: true,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
trait_key:Object.keys(traits)[2],
|
|
190
|
+
trait_value:traits.explicitly_non_transient_trait.value,
|
|
191
|
+
transient: false,
|
|
192
|
+
},
|
|
193
|
+
]
|
|
194
|
+
const flg = flagsmith();
|
|
195
|
+
|
|
196
|
+
const identityFlags = (await flg.getIdentityFlags(identifier, traits)).allFlags();
|
|
197
|
+
expect(fetch).toHaveBeenCalledWith(
|
|
198
|
+
`https://edge.api.flagsmith.com/api/v1/identities/`,
|
|
199
|
+
expect.objectContaining({
|
|
200
|
+
method: 'POST',
|
|
201
|
+
headers: { 'Content-Type': 'application/json', 'X-Environment-Key': 'sometestfakekey' },
|
|
202
|
+
body: JSON.stringify({identifier, traits: traitsInRequest})
|
|
203
|
+
})
|
|
204
|
+
);
|
|
205
|
+
expect(identityFlags[0].enabled).toBe(true);
|
|
206
|
+
expect(identityFlags[0].value).toBe('some-identity-with-transient-trait-value');
|
|
207
|
+
expect(identityFlags[0].featureName).toBe('some_feature');
|
|
208
|
+
});
|