@adaas/a-concept 0.1.29 → 0.1.31

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.
@@ -0,0 +1,290 @@
1
+ import { A_Fragment } from "@adaas/a-concept/global/A-Fragment/A-Fragment.class";
2
+
3
+ jest.retryTimes(0);
4
+
5
+ describe('A-Fragment Tests', () => {
6
+
7
+ it('It Should be possible to create an A_Fragment instance', async () => {
8
+
9
+ const fragment = new A_Fragment();
10
+
11
+ expect(fragment).toBeDefined();
12
+ expect(fragment.name).toBe('A_Fragment');
13
+ expect(fragment.size()).toBe(0);
14
+ });
15
+
16
+ it('It Should be possible to create an A_Fragment instance with custom name', async () => {
17
+
18
+ const fragment = new A_Fragment({ name: 'CustomFragment' });
19
+
20
+ expect(fragment).toBeDefined();
21
+ expect(fragment.name).toBe('CustomFragment');
22
+ expect(fragment.size()).toBe(0);
23
+ });
24
+
25
+ it('It Should be possible to create a typed A_Fragment instance', async () => {
26
+
27
+ const fragment = new A_Fragment<{ userId: string; role: string }>({
28
+ name: 'UserFragment'
29
+ });
30
+
31
+ expect(fragment).toBeDefined();
32
+ expect(fragment.name).toBe('UserFragment');
33
+ expect(fragment.size()).toBe(0);
34
+ });
35
+
36
+ it('It Should be possible to store and retrieve data from fragment meta', async () => {
37
+
38
+ const fragment = new A_Fragment<{ userId: string; role: string }>({
39
+ name: 'UserFragment'
40
+ });
41
+
42
+ fragment.set('userId', '12345');
43
+ fragment.set('role', 'admin');
44
+
45
+ expect(fragment.get('userId')).toBe('12345');
46
+ expect(fragment.get('role')).toBe('admin');
47
+ expect(fragment.has('userId')).toBe(true);
48
+ expect(fragment.has('role')).toBe(true);
49
+ expect(fragment.size()).toBe(2);
50
+ });
51
+
52
+ it('It Should be possible to check if keys exist in fragment meta', async () => {
53
+
54
+ const fragment = new A_Fragment<{ test: string; value: number }>();
55
+
56
+ expect(fragment.has('test')).toBe(false);
57
+ expect(fragment.has('value')).toBe(false);
58
+
59
+ fragment.set('test', 'hello');
60
+
61
+ expect(fragment.has('test')).toBe(true);
62
+ expect(fragment.has('value')).toBe(false);
63
+ });
64
+
65
+ it('It Should be possible to get all keys from fragment meta', async () => {
66
+
67
+ const fragment = new A_Fragment<{ userId: string; role: string; lastLogin: Date }>();
68
+
69
+ fragment.set('userId', '12345');
70
+ fragment.set('role', 'admin');
71
+
72
+ const keys = fragment.keys();
73
+
74
+ expect(keys).toContain('userId');
75
+ expect(keys).toContain('role');
76
+ expect(keys).not.toContain('lastLogin');
77
+ expect(keys.length).toBe(2);
78
+ });
79
+
80
+ it('It Should be possible to set multiple values at once', async () => {
81
+
82
+ const fragment = new A_Fragment<{ userId: string; role: string; isActive: boolean }>();
83
+
84
+ fragment.setMultiple({
85
+ userId: '12345',
86
+ role: 'admin',
87
+ isActive: true
88
+ });
89
+
90
+ expect(fragment.get('userId')).toBe('12345');
91
+ expect(fragment.get('role')).toBe('admin');
92
+ expect(fragment.get('isActive')).toBe(true);
93
+ expect(fragment.size()).toBe(3);
94
+ });
95
+
96
+ it('It Should be possible to drop specific keys from fragment meta', async () => {
97
+
98
+ const fragment = new A_Fragment<{ userId: string; role: string; temp: string }>();
99
+
100
+ fragment.set('userId', '12345');
101
+ fragment.set('role', 'admin');
102
+ fragment.set('temp', 'temporary');
103
+
104
+ expect(fragment.size()).toBe(3);
105
+
106
+ fragment.drop('temp');
107
+
108
+ expect(fragment.has('temp')).toBe(false);
109
+ expect(fragment.has('userId')).toBe(true);
110
+ expect(fragment.has('role')).toBe(true);
111
+ expect(fragment.size()).toBe(2);
112
+ });
113
+
114
+ it('It Should be possible to clear all data from fragment meta', async () => {
115
+
116
+ const fragment = new A_Fragment<{ userId: string; role: string }>();
117
+
118
+ fragment.set('userId', '12345');
119
+ fragment.set('role', 'admin');
120
+
121
+ expect(fragment.size()).toBe(2);
122
+
123
+ fragment.clear();
124
+
125
+ expect(fragment.size()).toBe(0);
126
+ expect(fragment.has('userId')).toBe(false);
127
+ expect(fragment.has('role')).toBe(false);
128
+ });
129
+
130
+ it('It Should be possible to clone a fragment with its data', async () => {
131
+
132
+ const original = new A_Fragment<{ userId: string; role: string }>({
133
+ name: 'OriginalFragment'
134
+ });
135
+
136
+ original.set('userId', '12345');
137
+ original.set('role', 'admin');
138
+
139
+ const clone = original.clone('ClonedFragment');
140
+
141
+ expect(clone).toBeDefined();
142
+ expect(clone.name).toBe('ClonedFragment');
143
+ expect(clone.get('userId')).toBe('12345');
144
+ expect(clone.get('role')).toBe('admin');
145
+ expect(clone.size()).toBe(2);
146
+
147
+ // Verify they are separate instances
148
+ clone.set('userId', '67890');
149
+ expect(original.get('userId')).toBe('12345');
150
+ expect(clone.get('userId')).toBe('67890');
151
+ });
152
+
153
+ it('It Should be possible to clone a fragment with auto-generated name', async () => {
154
+
155
+ const original = new A_Fragment<{ test: string }>({
156
+ name: 'TestFragment'
157
+ });
158
+
159
+ original.set('test', 'value');
160
+
161
+ const clone = original.clone();
162
+
163
+ expect(clone.name).toBe('TestFragment_copy');
164
+ expect(clone.get('test')).toBe('value');
165
+ });
166
+
167
+ it('It Should be possible to serialize a fragment to JSON', async () => {
168
+
169
+ const fragment = new A_Fragment<{ userId: string; role: string }>({
170
+ name: 'UserFragment'
171
+ });
172
+
173
+ fragment.set('userId', '12345');
174
+ fragment.set('role', 'admin');
175
+
176
+ const json = fragment.toJSON();
177
+
178
+ expect(json).toBeDefined();
179
+ expect(json.name).toBe('UserFragment');
180
+ expect(json.userId).toBe('12345');
181
+ expect(json.role).toBe('admin');
182
+ });
183
+
184
+ it('It Should be possible to create an inherited A_Fragment instance', async () => {
185
+
186
+ class CustomFragment extends A_Fragment<{ sessionId: string; timestamp: number }> {
187
+ constructor() {
188
+ super({ name: 'CustomFragment' });
189
+ }
190
+
191
+ getSessionInfo(): string {
192
+ const sessionId = this.get('sessionId') || 'unknown';
193
+ const timestamp = this.get('timestamp') || 0;
194
+ return `${sessionId}-${timestamp}`;
195
+ }
196
+ }
197
+
198
+ const fragment = new CustomFragment();
199
+
200
+ expect(fragment).toBeDefined();
201
+ expect(fragment.name).toBe('CustomFragment');
202
+ expect(fragment instanceof A_Fragment).toBe(true);
203
+ expect(fragment instanceof CustomFragment).toBe(true);
204
+
205
+ fragment.set('sessionId', 'sess123');
206
+ fragment.set('timestamp', 1698765432);
207
+
208
+ expect(fragment.getSessionInfo()).toBe('sess123-1698765432');
209
+ });
210
+
211
+ it('It Should be possible to create a fragment with custom serialization', async () => {
212
+
213
+ class SessionFragment extends A_Fragment<
214
+ { sessionId: string; timestamp: number },
215
+ { name: string; sessionData: string }
216
+ > {
217
+ constructor() {
218
+ super({ name: 'SessionFragment' });
219
+ }
220
+
221
+ toJSON(): { name: string; sessionData: string } {
222
+ const sessionId = this.get('sessionId') || 'unknown';
223
+ const timestamp = this.get('timestamp') || 0;
224
+ return {
225
+ name: this.name,
226
+ sessionData: `${sessionId}-${timestamp}`
227
+ };
228
+ }
229
+ }
230
+
231
+ const fragment = new SessionFragment();
232
+ fragment.set('sessionId', 'sess123');
233
+ fragment.set('timestamp', 1698765432);
234
+
235
+ const json = fragment.toJSON();
236
+
237
+ expect(json).toBeDefined();
238
+ expect(json.name).toBe('SessionFragment');
239
+ expect(json.sessionData).toBe('sess123-1698765432');
240
+ expect(json).not.toHaveProperty('sessionId');
241
+ expect(json).not.toHaveProperty('timestamp');
242
+ });
243
+
244
+ it('It Should be possible to access the underlying meta object', async () => {
245
+
246
+ const fragment = new A_Fragment<{ test: string; value: number }>();
247
+
248
+ expect(fragment.meta).toBeDefined();
249
+ expect(fragment.meta.size()).toBe(0);
250
+
251
+ fragment.set('test', 'hello');
252
+ fragment.set('value', 42);
253
+
254
+ expect(fragment.meta.size()).toBe(2);
255
+ expect(fragment.meta.has('test')).toBe(true);
256
+ expect(fragment.meta.get('test')).toBe('hello');
257
+ });
258
+
259
+ it('It Should handle undefined values correctly', async () => {
260
+
261
+ const fragment = new A_Fragment<{ optional?: string; required: string }>();
262
+
263
+ expect(fragment.get('optional')).toBeUndefined();
264
+ expect(fragment.get('required')).toBeUndefined();
265
+
266
+ fragment.set('required', 'value');
267
+
268
+ expect(fragment.get('required')).toBe('value');
269
+ expect(fragment.get('optional')).toBeUndefined();
270
+ expect(fragment.has('required')).toBe(true);
271
+ expect(fragment.has('optional')).toBe(false);
272
+ });
273
+
274
+ it('It Should handle setMultiple with undefined values correctly', async () => {
275
+
276
+ const fragment = new A_Fragment<{ a?: string; b?: number; c: boolean }>();
277
+
278
+ fragment.setMultiple({
279
+ a: 'test',
280
+ b: undefined, // Should be ignored
281
+ c: true
282
+ });
283
+
284
+ expect(fragment.has('a')).toBe(true);
285
+ expect(fragment.has('b')).toBe(false);
286
+ expect(fragment.has('c')).toBe(true);
287
+ expect(fragment.size()).toBe(2);
288
+ });
289
+
290
+ });