@proteinjs/db 1.3.3 → 1.4.0

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.
@@ -13,81 +13,52 @@ class MockRecord implements Record {
13
13
  describe('ReferenceArray', () => {
14
14
  const createMockRecord = (id: string) => new MockRecord(id, moment(), moment());
15
15
 
16
- it('should initialize with correct ids and objects', () => {
17
- const objects = [createMockRecord('1'), createMockRecord('2')];
18
- const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
19
-
16
+ it('should initialize with correct ids', () => {
17
+ const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2']);
20
18
  expect(refArray._ids).toEqual(['1', '2']);
21
- expect(refArray._objects).toEqual(objects);
19
+ expect(refArray._objects).toBeUndefined();
22
20
  });
23
21
 
24
- it('should update ids when objects are modified', async () => {
25
- const objects = [createMockRecord('1'), createMockRecord('2')];
26
- const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
27
-
28
- // Push a new object
29
- const refArrayObjects = await refArray.get();
30
- if (refArrayObjects) {
31
- refArrayObjects.push(createMockRecord('3'));
32
- expect(refArray._ids).toEqual(['1', '2', '3']);
33
-
34
- // Modify an object
35
- refArrayObjects[1] = createMockRecord('4');
36
- expect(refArray._ids).toEqual(['1', '4', '3']);
22
+ it('should set and get objects', async () => {
23
+ const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2']);
24
+ const mockObjects = [createMockRecord('1'), createMockRecord('2')];
37
25
 
38
- // Delete an object using pop
39
- refArrayObjects.pop();
40
- expect(refArray._ids).toEqual(['1', '4']);
26
+ refArray.set(mockObjects);
27
+ const objects = await refArray.get();
41
28
 
42
- // Delete an object using splice
43
- refArrayObjects.splice(0, 1);
44
- expect(refArray._ids).toEqual(['4']);
45
- } else {
46
- fail('refArrayObjects is undefined');
47
- }
29
+ expect(objects).toEqual(mockObjects);
30
+ expect(refArray._objects).toBeDefined();
48
31
  });
49
32
 
50
- it('should update ids when objects are set', () => {
51
- const objects = [createMockRecord('1'), createMockRecord('2')];
52
- const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2'], objects);
33
+ it('should set objects without updating ids', () => {
34
+ const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2']);
35
+ const newObjects = [createMockRecord('3'), createMockRecord('4')];
53
36
 
54
- const newObjects = [createMockRecord('5'), createMockRecord('6')];
55
37
  refArray.set(newObjects);
56
- expect(refArray._ids).toEqual(['5', '6']);
38
+ expect(refArray._ids).toEqual(['1', '2']); // ids remain unchanged
57
39
  expect(refArray._objects).toEqual(newObjects);
58
40
  });
59
41
 
60
- it('should not leave null or undefined entries in ids array when objects are deleted', () => {
61
- const objects = [createMockRecord('1'), createMockRecord('2'), createMockRecord('3')];
62
- const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2', '3'], objects);
63
-
64
- if (refArray._objects) {
65
- // Delete the second object using splice
66
- refArray._objects.splice(1, 1);
67
- expect(refArray._ids).toEqual(['1', '3']);
68
-
69
- // Delete the first object using splice
70
- refArray._objects.splice(0, 1);
71
- expect(refArray._ids).toEqual(['3']);
72
-
73
- // Delete the remaining object
74
- refArray._objects.pop();
75
- expect(refArray._ids).toEqual([]);
76
- } else {
77
- fail('refArray._objects is undefined');
78
- }
79
- });
80
-
81
42
  it('should handle initializing with an empty array', async () => {
82
43
  const refArray = new ReferenceArray<MockRecord>('mock_table', []);
83
44
 
84
45
  expect(refArray._ids).toEqual([]);
46
+ expect(refArray._objects).toBeUndefined();
47
+
48
+ const objects = await refArray.get();
49
+ expect(objects).toEqual([]);
50
+ });
51
+
52
+ it('should not update ids when objects are modified', async () => {
53
+ const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2']);
54
+ const initialObjects = [createMockRecord('1'), createMockRecord('2')];
55
+ refArray.set(initialObjects);
85
56
 
86
- const refArrayObjects = await refArray.get();
87
- expect(refArrayObjects).toEqual([]);
57
+ const objects = await refArray.get();
58
+ objects.push(createMockRecord('3'));
59
+ objects[1] = createMockRecord('4');
60
+ objects.pop();
88
61
 
89
- refArrayObjects.push(createMockRecord('1'));
90
- expect(refArray._ids).toEqual(['1']);
91
- expect(refArrayObjects.length).toEqual(1);
62
+ expect(refArray._ids).toEqual(['1', '2']); // ids remain unchanged
92
63
  });
93
64
  });
@@ -27,16 +27,57 @@ describe('ReferenceArraySerializer', () => {
27
27
  });
28
28
 
29
29
  const deserialized = serializer.deserialize(serialized);
30
+ expect(deserialized).toBeInstanceOf(ReferenceArray);
30
31
  expect(deserialized._table).toEqual('mock_table');
31
32
  expect(deserialized._ids).toEqual(['1', '2']);
32
33
  expect(deserialized._objects).toEqual(objects);
34
+ });
35
+
36
+ it('should handle empty ReferenceArray', () => {
37
+ const refArray = new ReferenceArray<MockRecord>('mock_table', []);
38
+ const serializer = new ReferenceArraySerializer();
39
+
40
+ const serialized = serializer.serialize(refArray);
41
+ expect(serialized).toEqual({
42
+ _table: 'mock_table',
43
+ _ids: [],
44
+ _objects: undefined,
45
+ });
46
+
47
+ const deserialized = serializer.deserialize(serialized);
48
+ expect(deserialized).toBeInstanceOf(ReferenceArray);
49
+ expect(deserialized._table).toEqual('mock_table');
50
+ expect(deserialized._ids).toEqual([]);
51
+ expect(deserialized._objects).toBeUndefined();
52
+ });
53
+
54
+ it('should handle ReferenceArray with ids but no objects', () => {
55
+ const refArray = new ReferenceArray<MockRecord>('mock_table', ['1', '2']);
56
+ const serializer = new ReferenceArraySerializer();
57
+
58
+ const serialized = serializer.serialize(refArray);
59
+ expect(serialized).toEqual({
60
+ _table: 'mock_table',
61
+ _ids: ['1', '2'],
62
+ _objects: undefined,
63
+ });
64
+
65
+ const deserialized = serializer.deserialize(serialized);
66
+ expect(deserialized).toBeInstanceOf(ReferenceArray);
67
+ expect(deserialized._table).toEqual('mock_table');
68
+ expect(deserialized._ids).toEqual(['1', '2']);
69
+ expect(deserialized._objects).toBeUndefined();
70
+ });
71
+
72
+ it('should maintain separate ids and objects after deserialization', () => {
73
+ const objects = [createMockRecord('1'), createMockRecord('2')];
74
+ const refArray = new ReferenceArray<MockRecord>('mock_table', ['3', '4'], objects);
75
+ const serializer = new ReferenceArraySerializer();
76
+
77
+ const serialized = serializer.serialize(refArray);
78
+ const deserialized = serializer.deserialize(serialized);
33
79
 
34
- // Test if the proxy is correctly applied
35
- if (deserialized._objects) {
36
- deserialized._objects.push(createMockRecord('3'));
37
- expect(deserialized._ids).toEqual(['1', '2', '3']);
38
- } else {
39
- fail('deserialized._objects is undefined');
40
- }
80
+ expect(deserialized._ids).toEqual(['3', '4']);
81
+ expect(deserialized._objects?.map((obj) => obj.id)).toEqual(['1', '2']);
41
82
  });
42
83
  });