mirror of
https://github.com/appy-one/acebase-core.git
synced 2026-06-30 06:02:04 -06:00
Added serialization tests
This commit is contained in:
parent
e89fef1a0f
commit
c7cc842a7b
1 changed files with 164 additions and 0 deletions
164
spec/transport.spec.js
Normal file
164
spec/transport.spec.js
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
const { Transport } = require('../dist/transport');
|
||||
const { PartialArray } = require('../dist/partial-array')
|
||||
|
||||
describe('Transport (de)serializing', () => {
|
||||
|
||||
it('single values', () => {
|
||||
|
||||
// v1 date
|
||||
let val = new Date();
|
||||
let ser = Transport.serialize(val);
|
||||
expect(ser).toEqual({ map: 'date', val: val.toISOString() });
|
||||
let check = Transport.deserialize(ser);
|
||||
expect(check).toEqual(val);
|
||||
let ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(1);
|
||||
|
||||
// v2 date
|
||||
ser = Transport.serialize2(val);
|
||||
expect(ser).toEqual({ '.type': 'date', '.val': val.toISOString() });
|
||||
check = Transport.deserialize2(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(2);
|
||||
|
||||
});
|
||||
|
||||
it('object values', () => {
|
||||
|
||||
// v1 object with date property
|
||||
let val = { text: 'Some text', date: new Date() };
|
||||
let ser = Transport.serialize(val);
|
||||
expect(ser).toEqual({ map: { 'date': 'date' }, val: { text: val.text, date: val.date.toISOString() } });
|
||||
let check = Transport.deserialize(ser);
|
||||
expect(check).toEqual(val);
|
||||
let ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(1);
|
||||
|
||||
// v2
|
||||
ser = Transport.serialize2(val);
|
||||
expect(ser).toEqual({ text: val.text, date: { '.type': 'date', '.val': val.date.toISOString() } });
|
||||
check = Transport.deserialize2(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(2);
|
||||
|
||||
// v1 object without serializable property
|
||||
val = { text: 'Some text' };
|
||||
ser = Transport.serialize(val);
|
||||
expect(ser).toEqual({ val: { text: val.text } });
|
||||
check = Transport.deserialize(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(1);
|
||||
|
||||
// v2
|
||||
ser = Transport.serialize2(val);
|
||||
expect(ser).toEqual(val);
|
||||
check = Transport.deserialize2(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(2);
|
||||
|
||||
// v1 object with multiple nested properties that need serializing
|
||||
val = {
|
||||
text: 'Some text',
|
||||
date: new Date('2022-04-22'),
|
||||
sub1: {
|
||||
edited: new Date(),
|
||||
sub2: {
|
||||
changed: new Date('2022-06-01')
|
||||
}
|
||||
}
|
||||
};
|
||||
ser = Transport.serialize(val);
|
||||
expect(ser).toEqual({
|
||||
map: {
|
||||
'date': 'date',
|
||||
'sub1/edited': 'date',
|
||||
'sub1/sub2/changed': 'date'
|
||||
},
|
||||
val: {
|
||||
text: val.text,
|
||||
date: val.date.toISOString(),
|
||||
sub1: {
|
||||
edited: val.sub1.edited.toISOString(),
|
||||
sub2: {
|
||||
changed: val.sub1.sub2.changed.toISOString()
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
check = Transport.deserialize(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(1);
|
||||
|
||||
// v2
|
||||
ser = Transport.serialize2(val);
|
||||
expect(ser).toEqual({
|
||||
text: val.text,
|
||||
date: { '.type': 'date', '.val': val.date.toISOString() },
|
||||
sub1: {
|
||||
edited: { '.type': 'date', '.val': val.sub1.edited.toISOString() },
|
||||
sub2: {
|
||||
changed: { '.type': 'date', '.val': val.sub1.sub2.changed.toISOString() }
|
||||
}
|
||||
}
|
||||
});
|
||||
check = Transport.deserialize2(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(2);
|
||||
|
||||
});
|
||||
|
||||
it('partial (sparse) arrays', () => {
|
||||
// v1 partial array:
|
||||
let val = new PartialArray({
|
||||
5: 'text',
|
||||
12: new Date(),
|
||||
26: { date: new Date() }
|
||||
});
|
||||
let ser = Transport.serialize(val);
|
||||
expect(ser).toEqual({
|
||||
map: {
|
||||
'': 'array',
|
||||
'12': 'date',
|
||||
'26/date': 'date'
|
||||
},
|
||||
val: new PartialArray({
|
||||
5: val[5],
|
||||
12: val[12].toISOString(),
|
||||
26: {
|
||||
date: val[26].date.toISOString()
|
||||
}
|
||||
})
|
||||
});
|
||||
let check = Transport.deserialize(ser);
|
||||
expect(check).toEqual(val);
|
||||
let ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(1);
|
||||
|
||||
// v2 date
|
||||
ser = Transport.serialize2(val);
|
||||
expect(ser).toEqual({
|
||||
'.type': 'array',
|
||||
5: val[5],
|
||||
12: {
|
||||
'.type': 'date',
|
||||
'.val': val[12].toISOString()
|
||||
},
|
||||
26: {
|
||||
date: {
|
||||
'.type': 'date',
|
||||
'.val': val[26].date.toISOString()
|
||||
}
|
||||
}
|
||||
});
|
||||
check = Transport.deserialize2(ser);
|
||||
expect(check).toEqual(val);
|
||||
ver = Transport.detectSerializeVersion(ser);
|
||||
expect(ver).toBe(2);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue