@nymphjs/nymph 1.0.0-beta.8 → 1.0.0-beta.81
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/CHANGELOG.md +382 -0
- package/README.md +9 -19
- package/dist/Entity.d.ts +269 -7
- package/dist/Entity.js +491 -105
- package/dist/Entity.js.map +1 -1
- package/dist/Entity.test.js +25 -3
- package/dist/Entity.test.js.map +1 -1
- package/dist/Entity.types.d.ts +225 -19
- package/dist/Nymph.d.ts +430 -11
- package/dist/Nymph.js +686 -168
- package/dist/Nymph.js.map +1 -1
- package/dist/Nymph.types.d.ts +65 -7
- package/dist/Nymph.types.js +2 -1
- package/dist/Nymph.types.js.map +1 -1
- package/dist/conf/d.d.ts +30 -0
- package/dist/conf/defaults.js +27 -0
- package/dist/conf/defaults.js.map +1 -1
- package/dist/driver/NymphDriver.d.ts +136 -38
- package/dist/driver/NymphDriver.js +264 -131
- package/dist/driver/NymphDriver.js.map +1 -1
- package/dist/driver/testArtifacts.d.ts +1 -1
- package/dist/driver/testArtifacts.js +499 -51
- package/dist/driver/testArtifacts.js.map +1 -1
- package/dist/errors/EntityInvalidDataError.d.ts +6 -0
- package/dist/errors/EntityInvalidDataError.js +7 -1
- package/dist/errors/EntityInvalidDataError.js.map +1 -1
- package/dist/errors/EntityUniqueConstraintError.d.ts +3 -0
- package/dist/errors/EntityUniqueConstraintError.js +11 -0
- package/dist/errors/EntityUniqueConstraintError.js.map +1 -0
- package/dist/errors/InvalidStateError.d.ts +3 -0
- package/dist/errors/InvalidStateError.js +11 -0
- package/dist/errors/InvalidStateError.js.map +1 -0
- package/dist/errors/QueryFailedError.js +1 -0
- package/dist/errors/QueryFailedError.js.map +1 -1
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.js +2 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/testArtifacts.d.ts +17 -5
- package/dist/testArtifacts.js +31 -27
- package/dist/testArtifacts.js.map +1 -1
- package/dist/testMocks.d.ts +13 -10
- package/dist/testMocks.js +32 -13
- package/dist/testMocks.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +21 -5
- package/dist/utils.js.map +1 -1
- package/package.json +16 -14
- package/src/Entity.test.ts +22 -5
- package/src/Entity.ts +423 -134
- package/src/Entity.types.ts +32 -66
- package/src/Nymph.ts +609 -176
- package/src/Nymph.types.ts +131 -26
- package/src/conf/d.ts +12 -0
- package/src/conf/defaults.ts +31 -0
- package/src/driver/NymphDriver.ts +289 -311
- package/src/driver/testArtifacts.ts +572 -181
- package/src/errors/EntityUniqueConstraintError.ts +6 -0
- package/src/errors/InvalidStateError.ts +6 -0
- package/src/errors/index.ts +4 -0
- package/src/nymphJoiProps.ts +2 -2
- package/src/testArtifacts.ts +18 -19
- package/src/testMocks.ts +55 -30
- package/src/utils.ts +22 -8
- package/tsconfig.json +3 -3
- package/typedoc.json +4 -0
|
@@ -3,32 +3,40 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ExportImportTest = exports.UIDTest = exports.
|
|
6
|
+
exports.ExportImportTest = exports.UIDTest = exports.EntitiesTest = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const strtotime_1 = __importDefault(require("locutus/php/datetime/strtotime"));
|
|
9
9
|
const guid_1 = require("@nymphjs/guid");
|
|
10
|
+
const errors_1 = require("../errors");
|
|
10
11
|
const testArtifacts_1 = require("../testArtifacts");
|
|
11
|
-
function
|
|
12
|
+
function EntitiesTest(nymph, it) {
|
|
12
13
|
const TestModel = nymph.addEntityClass(testArtifacts_1.TestModel);
|
|
13
14
|
const TestBModel = nymph.addEntityClass(testArtifacts_1.TestBModel);
|
|
15
|
+
const TestEmptyModel = nymph.addEntityClass(testArtifacts_1.TestEmptyModel);
|
|
14
16
|
let testEntity;
|
|
15
17
|
let testGuid;
|
|
16
18
|
let refGuid;
|
|
17
19
|
let createdMultiple = false;
|
|
20
|
+
// The entities created by this function are required by many of the tests.
|
|
18
21
|
async function createTestEntities() {
|
|
19
22
|
if (testGuid != null) {
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
25
|
+
// Creating entity...
|
|
22
26
|
testEntity = await TestModel.factory();
|
|
27
|
+
// Saving entity...
|
|
23
28
|
testEntity.name = 'Entity Test ' + new Date().toLocaleString();
|
|
24
29
|
testEntity.null = null;
|
|
25
30
|
testEntity.string = 'test';
|
|
26
|
-
testEntity.array = [
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
testEntity.array = [
|
|
32
|
+
'full',
|
|
33
|
+
'of',
|
|
34
|
+
'values',
|
|
35
|
+
500,
|
|
36
|
+
{ test: true },
|
|
37
|
+
{ nullbyte: '\\\x00\u0000 \x00' },
|
|
38
|
+
];
|
|
39
|
+
testEntity.match = matchValue;
|
|
32
40
|
testEntity.number = 30;
|
|
33
41
|
testEntity.numberString = '30';
|
|
34
42
|
testEntity.timestamp = Date.now();
|
|
@@ -45,38 +53,53 @@ This one's zip code is 92064.`;
|
|
|
45
53
|
expect(await testEntity.$save()).toEqual(true);
|
|
46
54
|
entityReferenceTest.test = 'good';
|
|
47
55
|
expect(await entityReferenceTest.$save()).toEqual(true);
|
|
48
|
-
|
|
49
|
-
expect(testEntity).toBeInstanceOf(TestModel);
|
|
50
|
-
expect(testEntity.guid).toEqual(testGuid);
|
|
56
|
+
// Test asynchronous getEntity.
|
|
51
57
|
testEntity = (await nymph.getEntity({ class: TestModel }, testGuid));
|
|
52
58
|
expect(testEntity).toBeInstanceOf(TestModel);
|
|
53
59
|
expect(testEntity.guid).toEqual(testGuid);
|
|
54
60
|
}
|
|
61
|
+
// The entities created by this function are required by many of the tests.
|
|
55
62
|
async function createMultipleTestEntities() {
|
|
56
63
|
if (!createdMultiple) {
|
|
57
64
|
createdMultiple = true;
|
|
65
|
+
// Creating 100 entities...
|
|
58
66
|
for (let i = 0; i < 100; i++) {
|
|
59
67
|
const testEntity = await TestModel.factory();
|
|
60
68
|
testEntity.name = `Multi Test ${i}`;
|
|
69
|
+
// Reverse the number for sort testing.
|
|
70
|
+
testEntity.number = 100 - i;
|
|
61
71
|
testEntity.$removeTag('test');
|
|
62
72
|
testEntity.$addTag('multiTest');
|
|
63
73
|
expect(await testEntity.$save()).toEqual(true);
|
|
74
|
+
// Pause for a few milliseconds so the cdate and mdate can be sorted.
|
|
64
75
|
await new Promise((res) => setTimeout(() => res(1), 5));
|
|
65
76
|
}
|
|
66
77
|
}
|
|
67
78
|
}
|
|
68
79
|
it('delete old test data', async () => {
|
|
69
|
-
let
|
|
70
|
-
expect(Array.isArray(
|
|
71
|
-
for (const cur of
|
|
80
|
+
let amodels = await nymph.getEntities({ class: TestModel });
|
|
81
|
+
expect(Array.isArray(amodels)).toEqual(true);
|
|
82
|
+
for (const cur of amodels) {
|
|
72
83
|
expect(await cur.$delete()).toEqual(true);
|
|
73
84
|
}
|
|
74
|
-
|
|
75
|
-
expect(
|
|
85
|
+
amodels = await nymph.getEntities({ class: TestModel });
|
|
86
|
+
expect(amodels.length).toEqual(0);
|
|
87
|
+
let bmodels = await nymph.getEntities({ class: TestBModel });
|
|
88
|
+
expect(Array.isArray(bmodels)).toEqual(true);
|
|
89
|
+
for (const cur of bmodels) {
|
|
90
|
+
expect(await cur.$delete()).toEqual(true);
|
|
91
|
+
}
|
|
92
|
+
bmodels = await nymph.getEntities({ class: TestBModel });
|
|
93
|
+
expect(bmodels.length).toEqual(0);
|
|
76
94
|
});
|
|
77
95
|
it('create entity', async () => {
|
|
78
96
|
await createTestEntities();
|
|
79
97
|
});
|
|
98
|
+
it("doesn't create empty entity", async () => {
|
|
99
|
+
const testEntity = await TestEmptyModel.factory();
|
|
100
|
+
expect(await testEntity.$save()).toBeFalsy();
|
|
101
|
+
expect(testEntity.guid).toBeNull();
|
|
102
|
+
});
|
|
80
103
|
it('update mdate on save', async () => {
|
|
81
104
|
await createTestEntities();
|
|
82
105
|
const oldMdate = testEntity.mdate ?? Infinity;
|
|
@@ -89,15 +112,19 @@ This one's zip code is 92064.`;
|
|
|
89
112
|
});
|
|
90
113
|
it('by guid', async () => {
|
|
91
114
|
await createTestEntities();
|
|
115
|
+
// Retrieving entity by GUID...
|
|
92
116
|
let resultEntity = await nymph.getEntity({ class: TestModel }, testGuid);
|
|
93
117
|
expect(testEntity.$is(resultEntity)).toEqual(true);
|
|
118
|
+
// Using class constructor...
|
|
94
119
|
resultEntity = await TestModel.factory(testGuid);
|
|
95
120
|
expect(testEntity.$is(resultEntity)).toEqual(true);
|
|
121
|
+
// Testing wrong GUID...
|
|
96
122
|
resultEntity = await nymph.getEntity({ class: TestModel }, (0, guid_1.guid)());
|
|
97
123
|
expect(testEntity.$is(resultEntity)).toEqual(false);
|
|
98
124
|
});
|
|
99
125
|
it('transactions', async () => {
|
|
100
126
|
await createTestEntities();
|
|
127
|
+
// Verify not in a transaction.
|
|
101
128
|
expect(await nymph.inTransaction()).toEqual(false);
|
|
102
129
|
let transaction = await nymph.startTransaction('test');
|
|
103
130
|
testEntity.$nymph = transaction;
|
|
@@ -106,37 +133,56 @@ This one's zip code is 92064.`;
|
|
|
106
133
|
await transaction.rollback('test');
|
|
107
134
|
return;
|
|
108
135
|
}
|
|
136
|
+
// Change a value in the test entity.
|
|
109
137
|
testEntity.string = 'bad value';
|
|
110
138
|
expect(await testEntity.$save()).toEqual(true);
|
|
139
|
+
// Rollback the transaction.
|
|
111
140
|
await transaction.rollback('test');
|
|
141
|
+
// Verify not in a transaction.
|
|
112
142
|
expect(await transaction.inTransaction()).toEqual(false);
|
|
143
|
+
// Verify the value is correct.
|
|
113
144
|
await testEntity.$refresh();
|
|
114
145
|
expect(testEntity.string).toEqual('test');
|
|
146
|
+
// Start a new transaction.
|
|
115
147
|
transaction = await nymph.startTransaction('test');
|
|
116
148
|
testEntity.$nymph = transaction;
|
|
149
|
+
// Verify in a transaction.
|
|
117
150
|
expect(await transaction.inTransaction()).toEqual(true);
|
|
151
|
+
// Delete the entity.
|
|
118
152
|
expect(await testEntity.$delete()).toEqual(true);
|
|
119
153
|
const resultEntity = await transaction.getEntity({ class: TestModel }, testGuid);
|
|
120
154
|
expect(resultEntity).toBeNull();
|
|
155
|
+
// Rollback the transaction.
|
|
121
156
|
await transaction.rollback('test');
|
|
157
|
+
// Verify not in a transaction.
|
|
122
158
|
expect(await transaction.inTransaction()).toEqual(false);
|
|
159
|
+
// Verify it's back.
|
|
123
160
|
testEntity = (await transaction.getEntity({ class: TestModel }, testGuid));
|
|
124
161
|
expect(testEntity.guid).toEqual(testGuid);
|
|
125
|
-
transaction
|
|
162
|
+
// Start a new transaction with a dot in the name.
|
|
163
|
+
transaction = await nymph.startTransaction('test.1');
|
|
126
164
|
testEntity.$nymph = transaction;
|
|
165
|
+
// Verify in a transaction.
|
|
127
166
|
expect(await transaction.inTransaction()).toEqual(true);
|
|
167
|
+
// Make a change.
|
|
128
168
|
testEntity.string = 'fish';
|
|
129
169
|
expect(await testEntity.$save()).toEqual(true);
|
|
130
|
-
|
|
170
|
+
// Commit the transaction.
|
|
171
|
+
await transaction.commit('test.1');
|
|
131
172
|
testEntity.$nymph = nymph;
|
|
173
|
+
// Verify not in a transaction.
|
|
132
174
|
expect(await transaction.inTransaction()).toEqual(false);
|
|
175
|
+
// Verify the value is correct.
|
|
133
176
|
await testEntity.$refresh();
|
|
134
177
|
expect(testEntity.string).toEqual('fish');
|
|
178
|
+
// Finally, change it back.
|
|
135
179
|
testEntity.string = 'test';
|
|
136
180
|
expect(await testEntity.$save()).toEqual(true);
|
|
181
|
+
// TODO: nested transactions
|
|
137
182
|
});
|
|
138
183
|
it('options', async () => {
|
|
139
184
|
await createTestEntities();
|
|
185
|
+
// Testing entity order, offset, limit...
|
|
140
186
|
const resultEntities = await nymph.getEntities({
|
|
141
187
|
class: TestModel,
|
|
142
188
|
reverse: true,
|
|
@@ -149,99 +195,149 @@ This one's zip code is 92064.`;
|
|
|
149
195
|
});
|
|
150
196
|
it('guid and tags', async () => {
|
|
151
197
|
await createTestEntities();
|
|
198
|
+
// Retrieving entity by GUID and tags...
|
|
152
199
|
const resultEntity = await nymph.getEntity({ class: TestModel }, { type: '&', guid: testGuid, tag: 'test' });
|
|
153
200
|
expect(testEntity.$is(resultEntity)).toEqual(true);
|
|
154
201
|
});
|
|
155
202
|
it('or selector', async () => {
|
|
156
203
|
await createTestEntities();
|
|
204
|
+
// Retrieving entity by GUID and tags...
|
|
157
205
|
const resultEntity = await nymph.getEntity({ class: TestModel }, { type: '|', guid: [testGuid, (0, guid_1.guid)()] });
|
|
158
206
|
expect(testEntity.$is(resultEntity)).toEqual(true);
|
|
159
207
|
});
|
|
160
208
|
it('wrong or selector', async () => {
|
|
161
209
|
await createTestEntities();
|
|
210
|
+
// Retrieving entity by GUID and tags...
|
|
162
211
|
const resultEntity = await nymph.getEntity({ class: TestModel }, { type: '|', guid: [(0, guid_1.guid)(), (0, guid_1.guid)()] });
|
|
163
212
|
expect(testEntity.$is(resultEntity)).toEqual(false);
|
|
164
213
|
});
|
|
165
214
|
it('not guid', async () => {
|
|
166
215
|
await createTestEntities();
|
|
216
|
+
// Retrieving entity by !GUID...
|
|
167
217
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', '!guid': (0, guid_1.guid)(), tag: 'test' });
|
|
168
218
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
169
219
|
});
|
|
170
220
|
it('not tags', async () => {
|
|
171
221
|
await createTestEntities();
|
|
222
|
+
// Retrieving entity by !tags...
|
|
172
223
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', guid: testGuid, '!tag': ['barbecue', 'pickles'] });
|
|
173
224
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
174
225
|
});
|
|
175
226
|
it('guid and wrong tags', async () => {
|
|
176
227
|
await createTestEntities();
|
|
228
|
+
// Testing GUID and wrong tags...
|
|
177
229
|
const resultEntity = await nymph.getEntity({ class: TestModel }, { type: '&', guid: testGuid, tag: ['pickles'] });
|
|
178
230
|
expect(resultEntity).toBeNull();
|
|
179
231
|
});
|
|
180
232
|
it('tags', async () => {
|
|
181
233
|
await createTestEntities();
|
|
234
|
+
// Retrieving entity by tags...
|
|
182
235
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' });
|
|
183
236
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
184
237
|
});
|
|
185
238
|
it('wrong tags', async () => {
|
|
186
239
|
await createTestEntities();
|
|
240
|
+
// Testing wrong tags...
|
|
187
241
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'pickles' });
|
|
188
242
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
189
243
|
});
|
|
190
244
|
it('inclusive tags', async () => {
|
|
191
245
|
await createTestEntities();
|
|
246
|
+
// Retrieving entity by tags inclusively...
|
|
192
247
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '|', tag: ['pickles', 'test', 'barbecue'] });
|
|
193
248
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
194
249
|
});
|
|
195
250
|
it('wrong inclusive tags', async () => {
|
|
196
251
|
await createTestEntities();
|
|
252
|
+
// Testing wrong inclusive tags...
|
|
197
253
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '|', tag: ['pickles', 'barbecue'] });
|
|
198
254
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
199
255
|
});
|
|
200
256
|
it('mixed tags', async () => {
|
|
201
257
|
await createTestEntities();
|
|
258
|
+
// Retrieving entity by mixed tags...
|
|
202
259
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' }, { type: '|', tag: ['pickles', 'test', 'barbecue'] });
|
|
203
260
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
204
261
|
});
|
|
205
262
|
it('wrong inclusive mixed tags', async () => {
|
|
206
263
|
await createTestEntities();
|
|
264
|
+
// Testing wrong inclusive mixed tags...
|
|
207
265
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' }, { type: '|', tag: ['pickles', 'barbecue'] });
|
|
208
266
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
209
267
|
});
|
|
210
268
|
it('wrong exclusive mixed tags', async () => {
|
|
211
269
|
await createTestEntities();
|
|
270
|
+
// Testing wrong exclusive mixed tags...
|
|
212
271
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'pickles' }, { type: '|', tag: ['test', 'barbecue'] });
|
|
213
272
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
214
273
|
});
|
|
215
274
|
it('defined', async () => {
|
|
216
275
|
await createTestEntities();
|
|
276
|
+
// Retrieving entity by defined...
|
|
217
277
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', defined: 'string' });
|
|
218
278
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
219
279
|
});
|
|
220
280
|
it('not defined', async () => {
|
|
221
281
|
await createTestEntities();
|
|
282
|
+
// Retrieving entity by !defined...
|
|
222
283
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', '!defined': 'pickles' });
|
|
223
284
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
224
285
|
});
|
|
225
286
|
it('defined in a not and clause', async () => {
|
|
226
287
|
await createTestEntities();
|
|
288
|
+
// Retrieving entity by defined in not and clause...
|
|
227
289
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '!&', defined: 'pickles' }, { type: '&', tag: 'test' });
|
|
228
290
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
229
291
|
});
|
|
230
292
|
it('equal', async () => {
|
|
231
293
|
await createTestEntities();
|
|
232
|
-
|
|
294
|
+
// Retrieving entity by equal...
|
|
295
|
+
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', equal: ['string', 'test'] });
|
|
296
|
+
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
297
|
+
// Retrieving entity by equal...
|
|
298
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', equal: ['null', null] });
|
|
299
|
+
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
300
|
+
// Retrieving entity by equal...
|
|
301
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', equal: ['boolean', true] });
|
|
302
|
+
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
303
|
+
// Retrieving entity by equal...
|
|
304
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', equal: ['number', 30] });
|
|
305
|
+
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
306
|
+
// Retrieving entity by equal...
|
|
307
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
308
|
+
type: '&',
|
|
309
|
+
equal: [
|
|
310
|
+
'array',
|
|
311
|
+
[
|
|
312
|
+
'full',
|
|
313
|
+
'of',
|
|
314
|
+
'values',
|
|
315
|
+
500,
|
|
316
|
+
{ test: true },
|
|
317
|
+
{ nullbyte: '\\\x00\u0000 \x00' },
|
|
318
|
+
],
|
|
319
|
+
],
|
|
320
|
+
});
|
|
321
|
+
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
322
|
+
// Retrieving entity by equal...
|
|
323
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
324
|
+
type: '&',
|
|
325
|
+
equal: ['match', matchValue],
|
|
326
|
+
});
|
|
233
327
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
234
328
|
});
|
|
235
329
|
it('not equal', async () => {
|
|
236
330
|
await createTestEntities();
|
|
237
331
|
const referenceEntity = await TestModel.factory(refGuid);
|
|
238
332
|
expect(referenceEntity.guid).toEqual(refGuid);
|
|
333
|
+
// Retrieving entity by !equal...
|
|
239
334
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', '!equal': ['string', 'wrong'] });
|
|
240
335
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
241
336
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
242
337
|
});
|
|
243
338
|
it('like', async () => {
|
|
244
339
|
await createTestEntities();
|
|
340
|
+
// Retrieving entity by like...
|
|
245
341
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', like: ['string', 't_s%'] });
|
|
246
342
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
247
343
|
});
|
|
@@ -249,12 +345,14 @@ This one's zip code is 92064.`;
|
|
|
249
345
|
await createTestEntities();
|
|
250
346
|
const referenceEntity = await TestModel.factory(refGuid);
|
|
251
347
|
expect(referenceEntity.guid).toEqual(refGuid);
|
|
348
|
+
// Retrieving entity by !like...
|
|
252
349
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', '!like': ['string', 'wr_n%'] });
|
|
253
350
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
254
351
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
255
352
|
});
|
|
256
353
|
it('ilike', async () => {
|
|
257
354
|
await createTestEntities();
|
|
355
|
+
// Retrieving entity by ilike...
|
|
258
356
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', ilike: ['string', 'T_s%'] });
|
|
259
357
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
260
358
|
});
|
|
@@ -262,56 +360,71 @@ This one's zip code is 92064.`;
|
|
|
262
360
|
await createTestEntities();
|
|
263
361
|
const referenceEntity = await TestModel.factory(refGuid);
|
|
264
362
|
expect(referenceEntity.guid).toEqual(refGuid);
|
|
363
|
+
// Retrieving entity by !ilike...
|
|
265
364
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', '!ilike': ['string', 'wr_n%'] });
|
|
266
365
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
267
366
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
268
367
|
});
|
|
269
368
|
it('like with wrong case', async () => {
|
|
270
369
|
await createTestEntities();
|
|
370
|
+
// Retrieving entity by like...
|
|
271
371
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', like: ['string', 'T_s%'] });
|
|
272
372
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
273
373
|
});
|
|
274
374
|
it('tags and equal', async () => {
|
|
275
375
|
await createTestEntities();
|
|
376
|
+
// Retrieving entity by tags and equal...
|
|
276
377
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', equal: ['string', 'test'] });
|
|
277
378
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
278
379
|
});
|
|
279
380
|
it('wrong tags right equal', async () => {
|
|
280
381
|
await createTestEntities();
|
|
382
|
+
// Testing wrong tags and right equal...
|
|
281
383
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'pickles', equal: ['string', 'test'] });
|
|
282
384
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
283
385
|
});
|
|
284
386
|
it('right tags wrong equal', async () => {
|
|
285
387
|
await createTestEntities();
|
|
388
|
+
// Testing right tags and wrong equal...
|
|
286
389
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', equal: ['string', 'pickles'] });
|
|
287
390
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
288
391
|
});
|
|
289
392
|
it('wrong tags wrong equal', async () => {
|
|
290
393
|
await createTestEntities();
|
|
394
|
+
// Testing wrong tags and wrong equal...
|
|
291
395
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'pickles', equal: ['string', 'pickles'] });
|
|
292
396
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
293
397
|
});
|
|
294
398
|
it('contain', async () => {
|
|
295
399
|
await createTestEntities();
|
|
400
|
+
// Retrieving entity by contain...
|
|
296
401
|
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', contain: ['array', 'values'] });
|
|
297
402
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
298
|
-
|
|
403
|
+
// Retrieving entity by contain...
|
|
404
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', contain: ['array', 500] });
|
|
405
|
+
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
406
|
+
// Retrieving entity by contain...
|
|
407
|
+
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', contain: ['array', { test: true }] });
|
|
299
408
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
300
409
|
});
|
|
301
410
|
it('not contain', async () => {
|
|
302
411
|
await createTestEntities();
|
|
412
|
+
// Retrieving entity by !contain...
|
|
303
413
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' }, { type: '!&', contain: ['array', 'pickles'] });
|
|
304
414
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
305
415
|
});
|
|
306
416
|
it('wrong contain', async () => {
|
|
307
417
|
await createTestEntities();
|
|
418
|
+
// Testing wrong contain...
|
|
308
419
|
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', contain: ['array', 'pickles'] });
|
|
309
420
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
421
|
+
// Testing wrong contain...
|
|
310
422
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', contain: ['string', 'pickles'] });
|
|
311
423
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
312
424
|
});
|
|
313
425
|
it('match', async () => {
|
|
314
426
|
await createTestEntities();
|
|
427
|
+
// Retrieving entity by regex match...
|
|
315
428
|
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', match: ['match', '.*'] });
|
|
316
429
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
317
430
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', match: ['match', 'Edward McCheese'] });
|
|
@@ -339,12 +452,14 @@ This one's zip code is 92064.`;
|
|
|
339
452
|
});
|
|
340
453
|
it('imatch', async () => {
|
|
341
454
|
await createTestEntities();
|
|
455
|
+
// Retrieving entity by regex match...
|
|
342
456
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', imatch: ['match', 'edward mccheese'] });
|
|
343
457
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
344
458
|
});
|
|
345
459
|
it('wrong match', async () => {
|
|
346
460
|
await createTestEntities();
|
|
347
|
-
|
|
461
|
+
// Testing wrong regex match...
|
|
462
|
+
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', match: ['match', '='] });
|
|
348
463
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
349
464
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'pickle', match: ['match', '.*'] });
|
|
350
465
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
@@ -359,16 +474,19 @@ This one's zip code is 92064.`;
|
|
|
359
474
|
});
|
|
360
475
|
it('match wrong case', async () => {
|
|
361
476
|
await createTestEntities();
|
|
477
|
+
// Retrieving entity by regex match...
|
|
362
478
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', match: ['match', 'edward mccheese'] });
|
|
363
479
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
364
480
|
});
|
|
365
481
|
it('match and equal inclusive', async () => {
|
|
366
482
|
await createTestEntities();
|
|
483
|
+
// Retrieving entity by regex + equal inclusively...
|
|
367
484
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' }, { type: '|', equal: ['string', 'pickles'], match: ['string', 'test'] });
|
|
368
485
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
369
486
|
});
|
|
370
487
|
it('greater than', async () => {
|
|
371
488
|
await createTestEntities();
|
|
489
|
+
// Retrieving entity by inequality...
|
|
372
490
|
let resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
373
491
|
type: '|',
|
|
374
492
|
gt: [
|
|
@@ -377,6 +495,7 @@ This one's zip code is 92064.`;
|
|
|
377
495
|
],
|
|
378
496
|
});
|
|
379
497
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
498
|
+
// Retrieving entity by inequality...
|
|
380
499
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
381
500
|
type: '|',
|
|
382
501
|
gt: [
|
|
@@ -385,6 +504,7 @@ This one's zip code is 92064.`;
|
|
|
385
504
|
],
|
|
386
505
|
});
|
|
387
506
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
507
|
+
// Retrieving entity by inequality...
|
|
388
508
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
389
509
|
type: '|',
|
|
390
510
|
gt: [
|
|
@@ -393,6 +513,7 @@ This one's zip code is 92064.`;
|
|
|
393
513
|
],
|
|
394
514
|
});
|
|
395
515
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
516
|
+
// Retrieving entity by inequality...
|
|
396
517
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
397
518
|
type: '|',
|
|
398
519
|
gt: [
|
|
@@ -401,6 +522,7 @@ This one's zip code is 92064.`;
|
|
|
401
522
|
],
|
|
402
523
|
});
|
|
403
524
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
525
|
+
// Retrieving entity by inequality...
|
|
404
526
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
405
527
|
type: '|',
|
|
406
528
|
gt: [
|
|
@@ -409,6 +531,7 @@ This one's zip code is 92064.`;
|
|
|
409
531
|
],
|
|
410
532
|
});
|
|
411
533
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
534
|
+
// Retrieving entity by inequality...
|
|
412
535
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
413
536
|
type: '|',
|
|
414
537
|
gt: [
|
|
@@ -420,6 +543,7 @@ This one's zip code is 92064.`;
|
|
|
420
543
|
});
|
|
421
544
|
it('greater than or equal', async () => {
|
|
422
545
|
await createTestEntities();
|
|
546
|
+
// Retrieving entity by inequality...
|
|
423
547
|
let resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
424
548
|
type: '|',
|
|
425
549
|
gte: [
|
|
@@ -428,6 +552,7 @@ This one's zip code is 92064.`;
|
|
|
428
552
|
],
|
|
429
553
|
});
|
|
430
554
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
555
|
+
// Retrieving entity by inequality...
|
|
431
556
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
432
557
|
type: '|',
|
|
433
558
|
gte: [
|
|
@@ -436,6 +561,7 @@ This one's zip code is 92064.`;
|
|
|
436
561
|
],
|
|
437
562
|
});
|
|
438
563
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
564
|
+
// Retrieving entity by inequality...
|
|
439
565
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
440
566
|
type: '|',
|
|
441
567
|
gte: [
|
|
@@ -444,6 +570,7 @@ This one's zip code is 92064.`;
|
|
|
444
570
|
],
|
|
445
571
|
});
|
|
446
572
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
573
|
+
// Retrieving entity by inequality...
|
|
447
574
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
448
575
|
type: '|',
|
|
449
576
|
gte: [
|
|
@@ -452,6 +579,7 @@ This one's zip code is 92064.`;
|
|
|
452
579
|
],
|
|
453
580
|
});
|
|
454
581
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
582
|
+
// Retrieving entity by inequality...
|
|
455
583
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
456
584
|
type: '|',
|
|
457
585
|
gte: [
|
|
@@ -460,6 +588,7 @@ This one's zip code is 92064.`;
|
|
|
460
588
|
],
|
|
461
589
|
});
|
|
462
590
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
591
|
+
// Retrieving entity by inequality...
|
|
463
592
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
464
593
|
type: '|',
|
|
465
594
|
gte: [
|
|
@@ -471,6 +600,7 @@ This one's zip code is 92064.`;
|
|
|
471
600
|
});
|
|
472
601
|
it('less than', async () => {
|
|
473
602
|
await createTestEntities();
|
|
603
|
+
// Retrieving entity by inequality...
|
|
474
604
|
let resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
475
605
|
type: '|',
|
|
476
606
|
lt: [
|
|
@@ -479,6 +609,7 @@ This one's zip code is 92064.`;
|
|
|
479
609
|
],
|
|
480
610
|
});
|
|
481
611
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
612
|
+
// Retrieving entity by inequality...
|
|
482
613
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
483
614
|
type: '|',
|
|
484
615
|
lt: [
|
|
@@ -487,6 +618,7 @@ This one's zip code is 92064.`;
|
|
|
487
618
|
],
|
|
488
619
|
});
|
|
489
620
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
621
|
+
// Retrieving entity by inequality...
|
|
490
622
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
491
623
|
type: '|',
|
|
492
624
|
lt: [
|
|
@@ -495,6 +627,7 @@ This one's zip code is 92064.`;
|
|
|
495
627
|
],
|
|
496
628
|
});
|
|
497
629
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
630
|
+
// Retrieving entity by inequality...
|
|
498
631
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
499
632
|
type: '|',
|
|
500
633
|
lt: [
|
|
@@ -503,6 +636,7 @@ This one's zip code is 92064.`;
|
|
|
503
636
|
],
|
|
504
637
|
});
|
|
505
638
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
639
|
+
// Retrieving entity by inequality...
|
|
506
640
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
507
641
|
type: '|',
|
|
508
642
|
lt: [
|
|
@@ -511,6 +645,7 @@ This one's zip code is 92064.`;
|
|
|
511
645
|
],
|
|
512
646
|
});
|
|
513
647
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
648
|
+
// Retrieving entity by inequality...
|
|
514
649
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
515
650
|
type: '|',
|
|
516
651
|
lt: [
|
|
@@ -522,6 +657,7 @@ This one's zip code is 92064.`;
|
|
|
522
657
|
});
|
|
523
658
|
it('less than or equal', async () => {
|
|
524
659
|
await createTestEntities();
|
|
660
|
+
// Retrieving entity by inequality...
|
|
525
661
|
let resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
526
662
|
type: '|',
|
|
527
663
|
lte: [
|
|
@@ -530,6 +666,7 @@ This one's zip code is 92064.`;
|
|
|
530
666
|
],
|
|
531
667
|
});
|
|
532
668
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
669
|
+
// Retrieving entity by inequality...
|
|
533
670
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
534
671
|
type: '|',
|
|
535
672
|
lte: [
|
|
@@ -538,6 +675,7 @@ This one's zip code is 92064.`;
|
|
|
538
675
|
],
|
|
539
676
|
});
|
|
540
677
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
678
|
+
// Retrieving entity by inequality...
|
|
541
679
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
542
680
|
type: '|',
|
|
543
681
|
lte: [
|
|
@@ -546,6 +684,7 @@ This one's zip code is 92064.`;
|
|
|
546
684
|
],
|
|
547
685
|
});
|
|
548
686
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
687
|
+
// Retrieving entity by inequality...
|
|
549
688
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
550
689
|
type: '|',
|
|
551
690
|
lte: [
|
|
@@ -554,6 +693,7 @@ This one's zip code is 92064.`;
|
|
|
554
693
|
],
|
|
555
694
|
});
|
|
556
695
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
696
|
+
// Retrieving entity by inequality...
|
|
557
697
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
558
698
|
type: '|',
|
|
559
699
|
lte: [
|
|
@@ -562,6 +702,7 @@ This one's zip code is 92064.`;
|
|
|
562
702
|
],
|
|
563
703
|
});
|
|
564
704
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
705
|
+
// Retrieving entity by inequality...
|
|
565
706
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
566
707
|
type: '|',
|
|
567
708
|
lte: [
|
|
@@ -573,30 +714,36 @@ This one's zip code is 92064.`;
|
|
|
573
714
|
});
|
|
574
715
|
it('not inequality', async () => {
|
|
575
716
|
await createTestEntities();
|
|
717
|
+
// Retrieving entity by !inequality...
|
|
576
718
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' }, { type: '!&', gte: ['number', 60] });
|
|
577
719
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
578
720
|
});
|
|
579
721
|
it('wrong inequality', async () => {
|
|
580
722
|
await createTestEntities();
|
|
723
|
+
// Testing wrong inequality...
|
|
581
724
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', lte: ['number', 29.99] });
|
|
582
725
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
583
726
|
});
|
|
584
727
|
it('greater than cdate', async () => {
|
|
585
728
|
await createTestEntities();
|
|
729
|
+
// Retrieving entity by time...
|
|
586
730
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', gt: ['cdate', (testEntity.cdate ?? 0) - 120] });
|
|
587
731
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
588
732
|
});
|
|
589
733
|
it('wrong cdate', async () => {
|
|
590
734
|
await createTestEntities();
|
|
735
|
+
// Testing wrong time...
|
|
591
736
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', gte: ['cdate', (testEntity.cdate ?? 0) + 1] });
|
|
592
737
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
593
738
|
});
|
|
594
739
|
it('time selector', async () => {
|
|
595
740
|
await createTestEntities();
|
|
596
741
|
const referenceEntity = await TestModel.factory(refGuid);
|
|
742
|
+
// Retrieving entity by relative time...
|
|
597
743
|
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', gt: ['timestamp', null, '-1 day'] });
|
|
598
744
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
599
745
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
746
|
+
// Retrieving entity by relative time inclusively...
|
|
600
747
|
resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
601
748
|
type: '|',
|
|
602
749
|
gt: [
|
|
@@ -606,9 +753,11 @@ This one's zip code is 92064.`;
|
|
|
606
753
|
});
|
|
607
754
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
608
755
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
756
|
+
// Retrieving entity by relative time...
|
|
609
757
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', gt: ['timestamp', null, '-3 days'] });
|
|
610
758
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
611
759
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(true);
|
|
760
|
+
// Retrieving entity by relative time...
|
|
612
761
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', gt: ['cdate', null, '-1 day'] });
|
|
613
762
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
614
763
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(true);
|
|
@@ -616,43 +765,55 @@ This one's zip code is 92064.`;
|
|
|
616
765
|
it('wrong time selector', async () => {
|
|
617
766
|
await createTestEntities();
|
|
618
767
|
const referenceEntity = await TestModel.factory(refGuid);
|
|
768
|
+
// Retrieving entity by relative time...
|
|
619
769
|
let resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', gt: ['timestamp', null, '+1 day'] });
|
|
620
770
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
621
771
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
772
|
+
// Retrieving entity by relative time...
|
|
622
773
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', lt: ['timestamp', null, '-3 days'] });
|
|
623
774
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
624
775
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
776
|
+
// Retrieving entity by relative time...
|
|
625
777
|
resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test', gt: ['cdate', null, '+1 day'] });
|
|
626
778
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
627
779
|
expect(referenceEntity.$inArray(resultEntity)).toEqual(false);
|
|
628
780
|
});
|
|
629
781
|
it('references', async () => {
|
|
630
782
|
await createTestEntities();
|
|
783
|
+
// Testing referenced entities...
|
|
784
|
+
await testEntity.reference?.$wake();
|
|
631
785
|
expect(testEntity.reference?.test).toEqual('good');
|
|
786
|
+
// Testing referenced entity arrays...
|
|
787
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
632
788
|
expect(testEntity.refArray?.[0].test).toEqual('good');
|
|
633
789
|
});
|
|
634
790
|
it('ref', async () => {
|
|
635
791
|
await createTestEntities();
|
|
792
|
+
// Retrieving entity by reference...
|
|
636
793
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', ref: ['reference', refGuid] });
|
|
637
794
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
638
795
|
});
|
|
639
796
|
it('not ref', async () => {
|
|
640
797
|
await createTestEntities();
|
|
798
|
+
// Retrieving entity by !reference...
|
|
641
799
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', tag: 'test' }, { type: '!&', ref: ['reference', (0, guid_1.guid)()] });
|
|
642
800
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
643
801
|
});
|
|
644
802
|
it('wrong ref', async () => {
|
|
645
803
|
await createTestEntities();
|
|
804
|
+
// Testing wrong reference...
|
|
646
805
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', ref: ['reference', (0, guid_1.guid)()] });
|
|
647
806
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
648
807
|
});
|
|
649
808
|
it('nonexistent ref', async () => {
|
|
650
809
|
await createTestEntities();
|
|
810
|
+
// Testing non-existent reference...
|
|
651
811
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', ref: ['pickle', refGuid] });
|
|
652
812
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
653
813
|
});
|
|
654
814
|
it('inclusive ref', async () => {
|
|
655
815
|
await createTestEntities();
|
|
816
|
+
// Retrieving entity by inclusive reference...
|
|
656
817
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
657
818
|
type: '|',
|
|
658
819
|
ref: [
|
|
@@ -664,6 +825,7 @@ This one's zip code is 92064.`;
|
|
|
664
825
|
});
|
|
665
826
|
it('wrong inclusive ref', async () => {
|
|
666
827
|
await createTestEntities();
|
|
828
|
+
// Testing wrong inclusive reference...
|
|
667
829
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
668
830
|
type: '|',
|
|
669
831
|
ref: [
|
|
@@ -675,11 +837,13 @@ This one's zip code is 92064.`;
|
|
|
675
837
|
});
|
|
676
838
|
it('ref in an array', async () => {
|
|
677
839
|
await createTestEntities();
|
|
840
|
+
// Retrieving entity by array reference...
|
|
678
841
|
const resultEntity = await nymph.getEntities({ class: TestModel }, { type: '&', ref: ['refArray', refGuid] });
|
|
679
842
|
expect(testEntity.$inArray(resultEntity)).toEqual(true);
|
|
680
843
|
});
|
|
681
844
|
it('wrong ref in an array', async () => {
|
|
682
845
|
await createTestEntities();
|
|
846
|
+
// Testing wrong array reference...
|
|
683
847
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
684
848
|
type: '&',
|
|
685
849
|
ref: [
|
|
@@ -691,6 +855,7 @@ This one's zip code is 92064.`;
|
|
|
691
855
|
});
|
|
692
856
|
it('logic operations', async () => {
|
|
693
857
|
await createTestEntities();
|
|
858
|
+
// Testing logic operations...
|
|
694
859
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
695
860
|
type: '&',
|
|
696
861
|
'!ref': [
|
|
@@ -712,6 +877,8 @@ This one's zip code is 92064.`;
|
|
|
712
877
|
['array', 'of'],
|
|
713
878
|
['array', 'values'],
|
|
714
879
|
['array', 500],
|
|
880
|
+
['array', { test: true }],
|
|
881
|
+
['array', { nullbyte: '\\\x00\u0000 \x00' }],
|
|
715
882
|
],
|
|
716
883
|
}, {
|
|
717
884
|
type: '!|',
|
|
@@ -728,6 +895,7 @@ This one's zip code is 92064.`;
|
|
|
728
895
|
it('count return', async () => {
|
|
729
896
|
await createTestEntities();
|
|
730
897
|
const result = await nymph.getEntities({ class: TestModel });
|
|
898
|
+
// Testing count return...
|
|
731
899
|
const resultCount = await nymph.getEntities({
|
|
732
900
|
class: TestModel,
|
|
733
901
|
return: 'count',
|
|
@@ -735,25 +903,30 @@ This one's zip code is 92064.`;
|
|
|
735
903
|
expect(resultCount).toBeGreaterThanOrEqual(1);
|
|
736
904
|
expect(resultCount).toEqual(result.length);
|
|
737
905
|
const resultSelectors = await nymph.getEntities({ class: TestModel }, { type: '&', ref: ['reference', refGuid] });
|
|
906
|
+
// Testing count return with selectors...
|
|
738
907
|
const resultSelectorsCount = await nymph.getEntities({ class: TestModel, return: 'count' }, { type: '&', ref: ['reference', refGuid] });
|
|
739
908
|
expect(resultSelectorsCount).toBeGreaterThanOrEqual(1);
|
|
740
909
|
expect(resultSelectorsCount).toEqual(resultSelectors.length);
|
|
910
|
+
// Testing count return with limit...
|
|
741
911
|
const resultSelectorsLimit = await nymph.getEntities({
|
|
742
912
|
class: TestModel,
|
|
743
913
|
limit: 1,
|
|
744
914
|
return: 'count',
|
|
745
915
|
});
|
|
746
916
|
expect(resultSelectorsLimit).toEqual(1);
|
|
917
|
+
// Testing count return with limit...
|
|
747
918
|
const resultSelectorsSingle = await nymph.getEntity({
|
|
748
919
|
class: TestModel,
|
|
749
920
|
return: 'count',
|
|
750
921
|
});
|
|
751
922
|
expect(resultSelectorsSingle).toEqual(1);
|
|
923
|
+
// Testing empty count...
|
|
752
924
|
const resultSelectorsEmpty = await nymph.getEntities({ class: TestModel, return: 'count' }, { type: '&', ref: ['reference', (0, guid_1.guid)()] });
|
|
753
925
|
expect(resultSelectorsEmpty).toEqual(0);
|
|
754
926
|
});
|
|
755
927
|
it('guid return', async () => {
|
|
756
928
|
await createTestEntities();
|
|
929
|
+
// Testing guid return using logic operations...
|
|
757
930
|
const resultGuid = await nymph.getEntities({ class: TestModel, return: 'guid' }, {
|
|
758
931
|
type: '&',
|
|
759
932
|
'!ref': [
|
|
@@ -775,6 +948,8 @@ This one's zip code is 92064.`;
|
|
|
775
948
|
['array', 'of'],
|
|
776
949
|
['array', 'values'],
|
|
777
950
|
['array', 500],
|
|
951
|
+
['array', { test: true }],
|
|
952
|
+
['array', { nullbyte: '\\\x00\u0000 \x00' }],
|
|
778
953
|
],
|
|
779
954
|
}, {
|
|
780
955
|
type: '!|',
|
|
@@ -790,6 +965,7 @@ This one's zip code is 92064.`;
|
|
|
790
965
|
});
|
|
791
966
|
it('deep selector', async () => {
|
|
792
967
|
await createTestEntities();
|
|
968
|
+
// Testing deep selectors...
|
|
793
969
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
794
970
|
type: '&',
|
|
795
971
|
'!ref': [
|
|
@@ -815,6 +991,8 @@ This one's zip code is 92064.`;
|
|
|
815
991
|
['array', 'of'],
|
|
816
992
|
['array', 'values'],
|
|
817
993
|
['array', 500],
|
|
994
|
+
['array', { test: true }],
|
|
995
|
+
['array', { nullbyte: '\\\x00\u0000 \x00' }],
|
|
818
996
|
],
|
|
819
997
|
},
|
|
820
998
|
{
|
|
@@ -855,6 +1033,8 @@ This one's zip code is 92064.`;
|
|
|
855
1033
|
['array', 'of'],
|
|
856
1034
|
['array', 'values'],
|
|
857
1035
|
['array', 500],
|
|
1036
|
+
['array', { test: true }],
|
|
1037
|
+
['array', { nullbyte: '\\\x00\u0000 \x00' }],
|
|
858
1038
|
],
|
|
859
1039
|
},
|
|
860
1040
|
{
|
|
@@ -902,6 +1082,7 @@ This one's zip code is 92064.`;
|
|
|
902
1082
|
expect(testEntity.$inArray(resultEntity4)).toEqual(true);
|
|
903
1083
|
});
|
|
904
1084
|
it('wrong deep selector', async () => {
|
|
1085
|
+
// Testing wrong deep selectors...
|
|
905
1086
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
906
1087
|
type: '&',
|
|
907
1088
|
selector: [
|
|
@@ -917,6 +1098,7 @@ This one's zip code is 92064.`;
|
|
|
917
1098
|
});
|
|
918
1099
|
it('qref', async () => {
|
|
919
1100
|
await createTestEntities();
|
|
1101
|
+
// Retrieving entity by qref...
|
|
920
1102
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
921
1103
|
type: '&',
|
|
922
1104
|
qref: [
|
|
@@ -928,6 +1110,7 @@ This one's zip code is 92064.`;
|
|
|
928
1110
|
});
|
|
929
1111
|
it('not qref', async () => {
|
|
930
1112
|
await createTestEntities();
|
|
1113
|
+
// Retrieving entity by !qref...
|
|
931
1114
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
932
1115
|
type: '&',
|
|
933
1116
|
'!qref': [
|
|
@@ -939,6 +1122,7 @@ This one's zip code is 92064.`;
|
|
|
939
1122
|
});
|
|
940
1123
|
it('wrong qref class', async () => {
|
|
941
1124
|
await createTestEntities();
|
|
1125
|
+
// Testing wrong qref...
|
|
942
1126
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
943
1127
|
type: '&',
|
|
944
1128
|
qref: [
|
|
@@ -950,6 +1134,7 @@ This one's zip code is 92064.`;
|
|
|
950
1134
|
});
|
|
951
1135
|
it('wrong qref data', async () => {
|
|
952
1136
|
await createTestEntities();
|
|
1137
|
+
// Testing wrong qref...
|
|
953
1138
|
const resultEntity = await nymph.getEntities({ class: TestModel }, {
|
|
954
1139
|
type: '&',
|
|
955
1140
|
qref: [
|
|
@@ -959,61 +1144,188 @@ This one's zip code is 92064.`;
|
|
|
959
1144
|
});
|
|
960
1145
|
expect(testEntity.$inArray(resultEntity)).toEqual(false);
|
|
961
1146
|
});
|
|
962
|
-
it('sort option', async () => {
|
|
1147
|
+
it('cdate and mdate sort option', async () => {
|
|
963
1148
|
await createMultipleTestEntities();
|
|
964
1149
|
for (const sort of ['cdate', 'mdate']) {
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
sort: sort,
|
|
968
|
-
});
|
|
1150
|
+
// Retrieving entities sorted...
|
|
1151
|
+
let resultEntities = await nymph.getEntities({ class: TestModel, sort });
|
|
969
1152
|
expect(resultEntities.length).toBeGreaterThan(100);
|
|
970
1153
|
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
971
1154
|
expect(resultEntities[i + 1][sort]).toBeGreaterThan(resultEntities[i][sort] ?? 0);
|
|
972
1155
|
}
|
|
1156
|
+
// And test the same with guid return...
|
|
973
1157
|
let resultGuids = await nymph.getEntities({
|
|
974
1158
|
class: TestModel,
|
|
975
|
-
sort
|
|
1159
|
+
sort,
|
|
976
1160
|
return: 'guid',
|
|
977
1161
|
});
|
|
978
1162
|
expect(resultGuids.length).toBeGreaterThan(100);
|
|
979
1163
|
for (let i = 0; i < resultGuids.length - 1; i++) {
|
|
980
1164
|
expect(resultGuids[i]).toEqual(resultEntities[i].guid);
|
|
981
1165
|
}
|
|
1166
|
+
// Retrieving entities reverse sorted...
|
|
982
1167
|
resultEntities = await nymph.getEntities({
|
|
983
1168
|
class: TestModel,
|
|
984
|
-
sort
|
|
1169
|
+
sort,
|
|
985
1170
|
reverse: true,
|
|
986
1171
|
});
|
|
987
1172
|
expect(resultEntities.length).toBeGreaterThan(100);
|
|
988
1173
|
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
989
1174
|
expect(resultEntities[i + 1][sort]).toBeLessThan(resultEntities[i][sort] ?? 0);
|
|
990
1175
|
}
|
|
991
|
-
|
|
1176
|
+
// And again with other selectors.
|
|
1177
|
+
// Retrieving entities sorted...
|
|
1178
|
+
resultEntities = await nymph.getEntities({ class: TestModel, sort }, { type: '&', match: ['name', '^Multi Test '] });
|
|
992
1179
|
expect(resultEntities.length).toEqual(100);
|
|
993
1180
|
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
994
1181
|
expect(resultEntities[i + 1][sort]).toBeGreaterThan(resultEntities[i][sort] ?? 0);
|
|
995
1182
|
}
|
|
996
|
-
|
|
1183
|
+
// Retrieving entities reverse sorted...
|
|
1184
|
+
resultEntities = await nymph.getEntities({ class: TestModel, sort, reverse: true }, { type: '&', match: ['name', '^Multi Test '] });
|
|
997
1185
|
expect(resultEntities.length).toEqual(100);
|
|
998
1186
|
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
999
1187
|
expect(resultEntities[i + 1][sort]).toBeLessThan(resultEntities[i][sort] ?? 0);
|
|
1000
1188
|
}
|
|
1001
1189
|
}
|
|
1002
1190
|
});
|
|
1191
|
+
it('property sort option', async () => {
|
|
1192
|
+
await createMultipleTestEntities();
|
|
1193
|
+
// Retrieving entities sorted...
|
|
1194
|
+
let resultEntities = await nymph.getEntities({
|
|
1195
|
+
class: TestModel,
|
|
1196
|
+
sort: 'number',
|
|
1197
|
+
});
|
|
1198
|
+
expect(resultEntities.length).toBeGreaterThan(100);
|
|
1199
|
+
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
1200
|
+
expect(resultEntities[i + 1].number ?? Infinity).toBeGreaterThanOrEqual(resultEntities[i].number ?? 0);
|
|
1201
|
+
}
|
|
1202
|
+
// And test the same with guid return...
|
|
1203
|
+
let resultGuids = await nymph.getEntities({
|
|
1204
|
+
class: TestModel,
|
|
1205
|
+
sort: 'number',
|
|
1206
|
+
return: 'guid',
|
|
1207
|
+
});
|
|
1208
|
+
expect(resultGuids.length).toBeGreaterThan(100);
|
|
1209
|
+
for (let i = 0; i < resultGuids.length - 1; i++) {
|
|
1210
|
+
expect(resultGuids[i]).toEqual(resultEntities[i].guid);
|
|
1211
|
+
}
|
|
1212
|
+
// Retrieving entities reverse sorted...
|
|
1213
|
+
resultEntities = await nymph.getEntities({
|
|
1214
|
+
class: TestModel,
|
|
1215
|
+
sort: 'number',
|
|
1216
|
+
reverse: true,
|
|
1217
|
+
});
|
|
1218
|
+
expect(resultEntities.length).toBeGreaterThan(100);
|
|
1219
|
+
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
1220
|
+
expect(resultEntities[i + 1].number ?? 0).toBeLessThanOrEqual(resultEntities[i].number ?? Infinity);
|
|
1221
|
+
}
|
|
1222
|
+
// And again with other selectors.
|
|
1223
|
+
// Retrieving entities sorted...
|
|
1224
|
+
resultEntities = await nymph.getEntities({ class: TestModel, sort: 'number' }, { type: '&', match: ['name', '^Multi Test '] });
|
|
1225
|
+
expect(resultEntities.length).toEqual(100);
|
|
1226
|
+
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
1227
|
+
expect(resultEntities[i + 1].number ?? Infinity).toBeGreaterThan(resultEntities[i].number ?? 0);
|
|
1228
|
+
expect(resultEntities[i].name).toEqual(`Multi Test ${100 - (resultEntities[i].number ?? 0)}`);
|
|
1229
|
+
}
|
|
1230
|
+
// Retrieving entities reverse sorted...
|
|
1231
|
+
resultEntities = await nymph.getEntities({ class: TestModel, sort: 'number', reverse: true }, { type: '&', match: ['name', '^Multi Test '] });
|
|
1232
|
+
expect(resultEntities.length).toEqual(100);
|
|
1233
|
+
for (let i = 0; i < resultEntities.length - 1; i++) {
|
|
1234
|
+
expect(resultEntities[i + 1].number ?? 0).toBeLessThan(resultEntities[i].number ?? Infinity);
|
|
1235
|
+
expect(resultEntities[i].name).toEqual(`Multi Test ${100 - (resultEntities[i].number ?? 0)}`);
|
|
1236
|
+
}
|
|
1237
|
+
});
|
|
1003
1238
|
it('delete reference', async () => {
|
|
1004
1239
|
await createTestEntities();
|
|
1240
|
+
// Deleting referenced entities...
|
|
1241
|
+
await testEntity.reference?.$wake();
|
|
1005
1242
|
expect(await testEntity.reference?.$delete()).toEqual(true);
|
|
1243
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
1006
1244
|
expect(testEntity.reference?.guid).toBeNull();
|
|
1007
1245
|
});
|
|
1008
1246
|
it('delete', async () => {
|
|
1009
1247
|
await createTestEntities();
|
|
1248
|
+
// Deleting entity...
|
|
1010
1249
|
expect(await testEntity.$delete()).toEqual(true);
|
|
1011
1250
|
expect(testEntity.guid).toBeNull();
|
|
1012
1251
|
const entity = await nymph.getEntity({ class: TestModel }, { type: '&', guid: testGuid });
|
|
1013
1252
|
expect(entity).toBeNull();
|
|
1014
1253
|
});
|
|
1254
|
+
it('allows non-duplicate unique strings', async () => {
|
|
1255
|
+
// Creating entity...
|
|
1256
|
+
const uniqueEntityA = await TestModel.factory();
|
|
1257
|
+
uniqueEntityA.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1258
|
+
uniqueEntityA.uniques = ['test a'];
|
|
1259
|
+
// Saving entity...
|
|
1260
|
+
expect(await uniqueEntityA.$save()).toEqual(true);
|
|
1261
|
+
expect(uniqueEntityA.guid).not.toBeNull();
|
|
1262
|
+
// Creating entity...
|
|
1263
|
+
const uniqueEntityB = await TestModel.factory();
|
|
1264
|
+
uniqueEntityB.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1265
|
+
uniqueEntityB.uniques = ['test b'];
|
|
1266
|
+
// Saving entity...
|
|
1267
|
+
expect(await uniqueEntityB.$save()).toEqual(true);
|
|
1268
|
+
expect(uniqueEntityB.guid).not.toBeNull();
|
|
1269
|
+
expect(uniqueEntityA.guid).not.toEqual(uniqueEntityB.guid);
|
|
1270
|
+
expect(await uniqueEntityA.$delete()).toEqual(true);
|
|
1271
|
+
expect(await uniqueEntityB.$delete()).toEqual(true);
|
|
1272
|
+
});
|
|
1273
|
+
it('throws on duplicate unique strings', async () => {
|
|
1274
|
+
// Creating entity...
|
|
1275
|
+
const uniqueEntityA = await TestModel.factory();
|
|
1276
|
+
uniqueEntityA.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1277
|
+
uniqueEntityA.uniques = ['test a'];
|
|
1278
|
+
// Saving entity...
|
|
1279
|
+
expect(await uniqueEntityA.$save()).toEqual(true);
|
|
1280
|
+
expect(uniqueEntityA.guid).not.toBeNull();
|
|
1281
|
+
// Creating entity...
|
|
1282
|
+
const uniqueEntityB = await TestModel.factory();
|
|
1283
|
+
uniqueEntityB.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1284
|
+
uniqueEntityB.uniques = ['test a'];
|
|
1285
|
+
// Saving entity...
|
|
1286
|
+
try {
|
|
1287
|
+
await uniqueEntityB.$save();
|
|
1288
|
+
throw Error("Shouldn't get past the uniqueness check.");
|
|
1289
|
+
}
|
|
1290
|
+
catch (e) {
|
|
1291
|
+
expect(e).toBeInstanceOf(errors_1.EntityUniqueConstraintError);
|
|
1292
|
+
}
|
|
1293
|
+
expect(uniqueEntityB.guid).toBeNull();
|
|
1294
|
+
expect(await uniqueEntityA.$delete()).toEqual(true);
|
|
1295
|
+
});
|
|
1296
|
+
it('allows duplicate unique string if first transaction is rolled back', async () => {
|
|
1297
|
+
// Creating transaction entity...
|
|
1298
|
+
const tnymphA = await nymph.startTransaction('test-unique-a');
|
|
1299
|
+
const TestModelA = tnymphA.getEntityClass(TestModel);
|
|
1300
|
+
const uniqueEntityA = await TestModelA.factory();
|
|
1301
|
+
uniqueEntityA.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1302
|
+
uniqueEntityA.uniques = ['test a'];
|
|
1303
|
+
// Saving entity...
|
|
1304
|
+
expect(await uniqueEntityA.$save()).toEqual(true);
|
|
1305
|
+
expect(uniqueEntityA.guid).not.toBeNull();
|
|
1306
|
+
// Rolling back transaction...
|
|
1307
|
+
expect(await tnymphA.rollback('test-unique-a')).toEqual(true);
|
|
1308
|
+
// Creating transaction entity...
|
|
1309
|
+
const tnymphB = await nymph.startTransaction('test-unique-b');
|
|
1310
|
+
const TestModelB = tnymphB.getEntityClass(TestModel);
|
|
1311
|
+
const uniqueEntityB = await TestModelB.factory();
|
|
1312
|
+
uniqueEntityB.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1313
|
+
uniqueEntityB.uniques = ['test a'];
|
|
1314
|
+
// Saving entity...
|
|
1315
|
+
expect(await uniqueEntityB.$save()).toEqual(true);
|
|
1316
|
+
expect(uniqueEntityB.guid).not.toBeNull();
|
|
1317
|
+
expect(uniqueEntityA.guid).not.toEqual(uniqueEntityB.guid);
|
|
1318
|
+
expect(await tnymphB.commit('test-unique-b')).toEqual(true);
|
|
1319
|
+
const uniqueEntityACheck = await nymph.getEntity({ class: TestModel }, { type: '&', guid: uniqueEntityA.guid ?? '' });
|
|
1320
|
+
expect(uniqueEntityACheck).toBeNull();
|
|
1321
|
+
const uniqueEntityBCheck = await nymph.getEntity({ class: TestModel }, { type: '&', guid: uniqueEntityB.guid ?? '' });
|
|
1322
|
+
expect(uniqueEntityBCheck).not.toBeNull();
|
|
1323
|
+
if (uniqueEntityBCheck != null) {
|
|
1324
|
+
expect(await uniqueEntityBCheck.$delete()).toEqual(true);
|
|
1325
|
+
}
|
|
1326
|
+
});
|
|
1015
1327
|
}
|
|
1016
|
-
exports.
|
|
1328
|
+
exports.EntitiesTest = EntitiesTest;
|
|
1017
1329
|
function UIDTest(nymph, it) {
|
|
1018
1330
|
it('delete old test data', async () => {
|
|
1019
1331
|
expect(await nymph.deleteUID('TestUID')).toEqual(true);
|
|
@@ -1073,21 +1385,34 @@ function ExportImportTest(nymph, it) {
|
|
|
1073
1385
|
const models = await nymph.getEntities({ class: TestModel });
|
|
1074
1386
|
const bmodels = await nymph.getEntities({ class: TestBModel });
|
|
1075
1387
|
expect(models.length).toEqual(30);
|
|
1076
|
-
expect(bmodels.length).toEqual(
|
|
1077
|
-
const
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1388
|
+
expect(bmodels.length).toEqual(30);
|
|
1389
|
+
for (const model of models) {
|
|
1390
|
+
expect(model.name).toMatch(/^Entity Test /);
|
|
1391
|
+
expect(model.null).toBeDefined();
|
|
1392
|
+
expect(model.null).toBeNull();
|
|
1393
|
+
expect(model.string).toEqual('test');
|
|
1394
|
+
expect(model.array).toEqual([
|
|
1395
|
+
'full',
|
|
1396
|
+
'of',
|
|
1397
|
+
'values',
|
|
1398
|
+
500,
|
|
1399
|
+
{ test: true },
|
|
1400
|
+
{ nullbyte: '\\\x00\u0000 \x00' },
|
|
1401
|
+
]);
|
|
1402
|
+
expect(model.match).toEqual(matchValue);
|
|
1403
|
+
expect(model.number).toEqual(30);
|
|
1404
|
+
expect(model.numberString).toEqual('30');
|
|
1405
|
+
expect(model.timestamp).toBeGreaterThanOrEqual((0, strtotime_1.default)('-2 minutes'));
|
|
1406
|
+
expect(model.index).toMatch(/^\d+a$/);
|
|
1407
|
+
await model.reference?.$wake();
|
|
1408
|
+
expect(model.reference?.guid).not.toBeNull();
|
|
1409
|
+
expect(model.reference?.string).toEqual('another');
|
|
1410
|
+
expect(model.reference?.index).toMatch(/^\d+b$/);
|
|
1411
|
+
expect(model.index?.substring(0, -1)).toEqual(model.reference?.index?.substring(0, -1));
|
|
1412
|
+
expect(model.reference?.$inArray(bmodels)).toEqual(true);
|
|
1413
|
+
await Promise.all(model.refArray?.map((e) => e.$wake()) || []);
|
|
1414
|
+
expect(model.refArray?.[0].guid).not.toBeNull();
|
|
1415
|
+
expect(model.refArray?.[0].guid).toEqual(model.reference?.guid);
|
|
1091
1416
|
}
|
|
1092
1417
|
}
|
|
1093
1418
|
it('delete old test data', async () => {
|
|
@@ -1097,17 +1422,27 @@ function ExportImportTest(nymph, it) {
|
|
|
1097
1422
|
expect(await nymph.newUID('TestUID')).toEqual(1);
|
|
1098
1423
|
expect(await nymph.newUID('TestUID')).toEqual(2);
|
|
1099
1424
|
expect(await nymph.newUID('TestUID2')).toEqual(1);
|
|
1100
|
-
for (let i = 0; i <
|
|
1101
|
-
|
|
1102
|
-
const testEntity = await
|
|
1425
|
+
for (let i = 0; i < 30; i++) {
|
|
1426
|
+
// Creating entity...
|
|
1427
|
+
const testEntity = await TestModel.factory();
|
|
1428
|
+
// Saving entity...
|
|
1103
1429
|
testEntity.name = 'Entity Test ' + new Date().toLocaleString();
|
|
1104
1430
|
testEntity.null = null;
|
|
1105
1431
|
testEntity.string = 'test';
|
|
1106
|
-
testEntity.array = [
|
|
1432
|
+
testEntity.array = [
|
|
1433
|
+
'full',
|
|
1434
|
+
'of',
|
|
1435
|
+
'values',
|
|
1436
|
+
500,
|
|
1437
|
+
{ test: true },
|
|
1438
|
+
{ nullbyte: '\\\x00\u0000 \x00' },
|
|
1439
|
+
];
|
|
1440
|
+
testEntity.match = matchValue;
|
|
1107
1441
|
testEntity.number = 30;
|
|
1442
|
+
testEntity.numberString = '30';
|
|
1108
1443
|
testEntity.timestamp = Date.now();
|
|
1109
1444
|
testEntity.index = i + 'a';
|
|
1110
|
-
const entityReferenceTest = await
|
|
1445
|
+
const entityReferenceTest = await TestBModel.factory();
|
|
1111
1446
|
entityReferenceTest.string = 'another';
|
|
1112
1447
|
entityReferenceTest.index = i + 'b';
|
|
1113
1448
|
expect(await entityReferenceTest.$save()).toEqual(true);
|
|
@@ -1117,6 +1452,9 @@ function ExportImportTest(nymph, it) {
|
|
|
1117
1452
|
}
|
|
1118
1453
|
await checkEntityDataAndCount();
|
|
1119
1454
|
});
|
|
1455
|
+
it('needs migration', async () => {
|
|
1456
|
+
expect(await nymph.needsMigration()).toEqual(false);
|
|
1457
|
+
});
|
|
1120
1458
|
it('export data', async () => {
|
|
1121
1459
|
expect(await nymph.export(__dirname + '/testentityexport.nex')).toEqual(true);
|
|
1122
1460
|
});
|
|
@@ -1136,4 +1474,114 @@ function ExportImportTest(nymph, it) {
|
|
|
1136
1474
|
});
|
|
1137
1475
|
}
|
|
1138
1476
|
exports.ExportImportTest = ExportImportTest;
|
|
1477
|
+
const matchValue = `Hello, my name is Edward McCheese. It is a pleasure to meet you. As you can see, I have several hats of the most pleasant nature.
|
|
1478
|
+
|
|
1479
|
+
This one's email address is nice_hat-wednesday+newyork@im-a-hat.hat.
|
|
1480
|
+
This one's phone number is (555) 555-1818.
|
|
1481
|
+
This one's zip code is 92064.
|
|
1482
|
+
This one's favorite emojis are 🔥❤️😊😂⭐🤔
|
|
1483
|
+
|
|
1484
|
+
These hats are absolutely fantastic.
|
|
1485
|
+
|
|
1486
|
+
\x00\x00\x00
|
|
1487
|
+
|
|
1488
|
+
Lorem ipsum odor amet, consectetuer adipiscing elit. Metus ad mattis sit pretium per, dignissim imperdiet luctus. Congue rhoncus turpis etiam aenean ultricies dapibus justo nunc. Netus non primis quis habitasse lacus. Nascetur dapibus sociosqu ridiculus primis; elementum netus consectetur ridiculus litora. Tristique facilisis erat ex class nulla cursus amet. Metus vitae tempor euismod vel; ullamcorper ac quisque vestibulum. Mauris libero pulvinar facilisi eros natoque massa.
|
|
1489
|
+
|
|
1490
|
+
Nunc vel hac nec tristique vivamus. Leo volutpat convallis eget integer tellus cubilia tincidunt malesuada? Consequat elit nisi tristique vehicula cubilia maecenas metus facilisi malesuada. In mattis euismod ad magnis fusce. Nisi congue sociosqu rhoncus lobortis fringilla sollicitudin at platea. Iaculis ut et varius metus eleifend laoreet hac odio libero. Non ridiculus tempus ultricies nullam curabitur.
|
|
1491
|
+
|
|
1492
|
+
Amet pellentesque aliquam placerat; vestibulum blandit platea porttitor pulvinar. Tellus tristique ad morbi in ac placerat luctus. Ante efficitur inceptos commodo lacus sodales sit varius nunc consequat. Senectus non vel est convallis mauris. Venenatis feugiat massa nostra, purus class primis sodales odio. Risus nulla integer feugiat ridiculus porta nascetur. Rutrum tincidunt enim parturient libero nisl ante sagittis nisi. Cubilia massa non vehicula vehicula amet parturient pellentesque. Habitant dapibus fames lectus pretium rhoncus.
|
|
1493
|
+
|
|
1494
|
+
Ridiculus nascetur mauris iaculis hendrerit ridiculus gravida auctor in. Class suscipit augue finibus semper vulputate nec. Tristique mi eu praesent commodo fermentum inceptos penatibus lobortis. Libero enim orci ultricies egestas ut pellentesque. Laoreet massa ad curabitur tellus libero laoreet habitasse enim nascetur. Iaculis euismod a euismod conubia purus. Commodo condimentum ultrices lorem ligula aenean; netus mattis sem non.
|
|
1495
|
+
|
|
1496
|
+
Curabitur duis imperdiet mus integer vel bibendum; fusce malesuada. Dignissim duis himenaeos primis odio, congue pharetra? Egestas mus sit eget proin quis. Neque dapibus dapibus nam sociosqu; maecenas viverra himenaeos. Himenaeos faucibus himenaeos faucibus ex litora eros faucibus cras. Maximus scelerisque nullam nunc congue fringilla. Nisi eu magna erat morbi cras enim amet litora. Nostra primis vitae arcu, accumsan sollicitudin curabitur. Potenti sit vel vehicula metus leo id. Etiam blandit quisque nam orci; neque lacinia rutrum.
|
|
1497
|
+
|
|
1498
|
+
Aliquam mollis varius hendrerit sem eleifend fermentum. Sapien rutrum condimentum inceptos ex feugiat consectetur mollis magna diam. Natoque enim nisi, ex risus finibus lacinia conubia vivamus suscipit. Habitasse interdum lorem ante, bibendum posuere dis. Lacus porttitor sapien proin; consequat velit ipsum venenatis. Vivamus porta mattis morbi nunc torquent neque. Senectus vehicula tincidunt parturient fringilla id amet urna libero pharetra.
|
|
1499
|
+
|
|
1500
|
+
Faucibus netus tincidunt et viverra augue ligula est quis. Ipsum tempus vehicula tortor dis tortor ad. Ex tincidunt torquent eleifend aenean urna commodo. Quam nullam imperdiet volutpat vel condimentum cubilia sociosqu. Etiam tempor sapien mattis, venenatis aptent id risus. Efficitur luctus vel; nam ut commodo sociosqu hendrerit. Quisque placerat gravida rhoncus blandit vitae. Himenaeos id risus est mollis aliquet nam curabitur.
|
|
1501
|
+
|
|
1502
|
+
Habitasse sed est fames quis lobortis leo mattis. Nisl cursus tincidunt cursus felis porttitor. Ante integer turpis non class lobortis suscipit. Condimentum velit vulputate quis sapien, lacus magna adipiscing nec primis. Blandit consequat ipsum nostra dignissim; tincidunt torquent fames. Ac faucibus elit iaculis duis lobortis. Euismod facilisi massa turpis mus neque. Class vulputate quisque elementum suscipit nostra tempus adipiscing. Malesuada himenaeos finibus ad inceptos volutpat scelerisque inceptos.
|
|
1503
|
+
|
|
1504
|
+
Natoque platea at feugiat cras tellus facilisi suspendisse lacinia maximus. Duis vestibulum eget molestie turpis risus dapibus dignissim torquent? Nulla nibh aptent fringilla scelerisque euismod mauris ornare. Orci finibus taciti habitasse fringilla laoreet convallis. Class sed fringilla eget quisque sit auctor. Id cursus mauris praesent maecenas iaculis. Ullamcorper luctus habitant ultrices pharetra etiam mattis morbi fringilla lorem.
|
|
1505
|
+
|
|
1506
|
+
Pharetra porta orci ridiculus inceptos eleifend sem ante quis. Molestie velit penatibus libero per sem litora congue. Porta quis egestas vivamus vitae potenti ornare. Elit molestie nullam vitae quam viverra. Nisl fringilla massa ridiculus donec ridiculus sed magnis. Cursus ad enim consequat ultricies tortor rhoncus pellentesque augue. Netus facilisis tempor elementum interdum at sagittis habitasse. Pretium imperdiet duis diam ullamcorper donec at suscipit. Id per inceptos ac luctus massa imperdiet tempor. Parturient libero suscipit non tempor ligula ullamcorper placerat varius.
|
|
1507
|
+
|
|
1508
|
+
Libero duis suspendisse cubilia rhoncus scelerisque faucibus mattis. Leo fusce urna at per inceptos vel lobortis. Quisque ex duis euismod dictum hac nibh eros. Penatibus eleifend tellus donec elit primis phasellus habitant dictum. Imperdiet consequat facilisi massa, lacus gravida sodales id sapien. Ornare sapien sit convallis suscipit nunc enim. Tempus at vitae class sollicitudin proin. Dolor aenean felis netus consectetur mattis phasellus vestibulum. Orci fringilla sodales montes sed himenaeos ex massa natoque porttitor.
|
|
1509
|
+
|
|
1510
|
+
Mus condimentum dui mollis dolor accumsan ligula pretium? Est phasellus platea iaculis vehicula et eros vel rutrum placerat. Nulla laoreet faucibus; congue netus magna senectus lectus dictum. Sodales aliquam eget himenaeos adipiscing, tempor feugiat. Lorem pellentesque iaculis fames lectus cubilia ornare sagittis rhoncus? Bibendum viverra tellus libero congue dignissim metus tellus aenean ultrices. Sollicitudin cras sollicitudin mattis lacus facilisis fermentum scelerisque porttitor rutrum.
|
|
1511
|
+
|
|
1512
|
+
Sapien aptent fames curae, consectetur dapibus mauris sollicitudin tellus. Laoreet etiam dignissim, suscipit platea libero vitae taciti eu nec. Donec lobortis metus nisi; est enim himenaeos molestie tellus sapien. Sapien tellus rhoncus blandit fusce hendrerit feugiat. Maximus sit hendrerit tincidunt nec imperdiet hendrerit semper suscipit. Quam augue proin netus rutrum et sem. Neque penatibus cubilia nec metus porta. Ornare pulvinar quam auctor, elit curae ad donec dis. Egestas aptent non tortor potenti morbi mauris.
|
|
1513
|
+
|
|
1514
|
+
Montes dui in pharetra primis consequat ante integer. Vulputate libero gravida rutrum tortor suscipit massa! Netus rhoncus platea torquent dapibus consectetur suspendisse etiam sociosqu. Quis placerat mauris et quam nascetur. Dictumst mi rutrum justo vitae ultricies feugiat nulla faucibus morbi. Consectetur nec condimentum euismod sodales nisi purus; finibus elementum facilisi.
|
|
1515
|
+
|
|
1516
|
+
Senectus mus faucibus ut morbi eu maximus. Turpis tincidunt sodales sociosqu lorem amet pulvinar laoreet faucibus. Mus bibendum vulputate hendrerit sollicitudin eu ridiculus posuere augue leo? Cubilia nostra consequat; fusce egestas himenaeos class ornare nec. Est montes tortor vivamus congue inceptos erat mi eget pellentesque. Amet vulputate fringilla aliquet fames tristique. Rutrum malesuada dapibus vehicula risus nunc torquent habitant turpis habitant. Ipsum proin viverra adipiscing cras et augue hendrerit. Efficitur euismod aliquam habitant; sit nisl potenti.
|
|
1517
|
+
|
|
1518
|
+
Conubia dignissim metus phasellus tristique augue, nullam quam finibus. Dignissim vel enim mattis praesent penatibus. Sapien pharetra curae torquent turpis fermentum feugiat facilisis nisi. Lacinia justo ante mauris finibus vitae ante efficitur dis. Urna gravida conubia amet rhoncus felis ut lorem placerat. Quisque fermentum suscipit aenean nisi suscipit ac? Quis ornare faucibus amet conubia justo maximus hendrerit phasellus aenean. Ex vivamus vulputate in mollis mauris praesent vehicula erat neque.
|
|
1519
|
+
|
|
1520
|
+
Orci nullam commodo habitant volutpat per tincidunt mus sit. Nisi cubilia fringilla viverra at orci magnis massa nam orci. Duis iaculis sapien nulla nascetur elit porta fermentum. Amus libero vivamus vel finibus magnis placerat himenaeos. Integer posuere suscipit non vulputate enim. Conubia id lobortis habitasse luctus odio maecenas enim conubia non. Mus egestas massa platea nullam sociosqu, magnis cras. Quam placerat nisi dui gravida ultricies, facilisis eu pharetra vivamus.
|
|
1521
|
+
|
|
1522
|
+
Fusce maecenas dis finibus senectus nascetur tortor. Nec rhoncus pretium vivamus donec vel ligula curabitur. Velit dis laoreet aenean, fusce metus blandit erat. Ligula purus natoque, arcu finibus tincidunt efficitur dolor curabitur. Ac risus et ipsum; consequat integer phasellus diam. Praesent ipsum gravida placerat porta volutpat tincidunt maximus sapien. Phasellus gravida orci enim velit condimentum.
|
|
1523
|
+
|
|
1524
|
+
Dui id laoreet penatibus orci sit a. Iaculis dis porttitor luctus; lacus dignissim quam commodo lorem. Nullam dictum quisque accumsan porttitor tortor fusce aenean. Aliquet quisque ultricies malesuada auctor facilisi tristique. Dolor nulla conubia ultricies odio ad. Nunc consectetur venenatis consequat nisi habitant. Praesent accumsan scelerisque morbi aliquam sociosqu auctor, nostra aenean.
|
|
1525
|
+
|
|
1526
|
+
Mauris amet conubia egestas eu posuere nullam. Est neque dictum in, lacus aliquam ultrices vestibulum. Dapibus dis habitasse cras conubia felis nibh. Egestas nisl iaculis nostra neque enim, ridiculus praesent. Consectetur eleifend eu mus; elit sed pellentesque fringilla. Ullamcorper hendrerit nibh aptent per congue libero ultrices eget. Mollis velit ad tortor lobortis ipsum.
|
|
1527
|
+
|
|
1528
|
+
Tristique neque justo potenti himenaeos; pellentesque nam vehicula. Maximus etiam ut nullam semper; fames curabitur quam ad morbi. Interdum curabitur platea augue porttitor a gravida. Leo imperdiet id aenean sit; habitasse quam tempus pellentesque? Nostra leo aenean amet lectus ultricies ridiculus nascetur ullamcorper. Taciti in iaculis quam nascetur proin varius eget vehicula.
|
|
1529
|
+
|
|
1530
|
+
Mattis hendrerit tempus interdum diam elementum primis augue phasellus sociosqu. Imperdiet pulvinar imperdiet lacinia posuere class magnis. Montes viverra scelerisque laoreet sociosqu proin lacus. Nam id justo praesent curabitur nam accumsan imperdiet commodo. Sociosqu netus sapien proin interdum ac. Dapibus tempor et sodales, natoque consequat torquent.
|
|
1531
|
+
|
|
1532
|
+
Lectus ultricies amet bibendum blandit finibus erat pellentesque. Nam quis ultrices curae; lorem gravida malesuada velit taciti enim. Facilisis fermentum suspendisse leo tristique litora dapibus rhoncus convallis. Netus iaculis eleifend viverra urna, vulputate ac convallis. Faucibus torquent dictum, nisl sed parturient libero. Ornare class habitant per consequat adipiscing rhoncus feugiat.
|
|
1533
|
+
|
|
1534
|
+
Proin molestie nullam eros parturient parturient curabitur aliquet. Rhoncus mus aenean sem aliquet sem finibus neque rutrum commodo. Efficitur litora lobortis nascetur adipiscing curae faucibus? Bibendum leo velit augue; potenti primis malesuada lacus ipsum. Facilisi potenti facilisis nam tempor consequat. Magnis suspendisse primis duis quam; suscipit quis fermentum phasellus. Massa ridiculus habitasse ipsum arcu sit maecenas gravida nisi? Dolor egestas lacinia lacinia libero nam curae suspendisse purus. Tristique inceptos curae netus scelerisque magna hendrerit commodo quis parturient. Eget accumsan erat sociosqu vestibulum platea turpis habitasse.
|
|
1535
|
+
|
|
1536
|
+
Maximus dignissim sed conubia a ipsum nullam condimentum dictumst. Suspendisse congue phasellus congue lacus sollicitudin senectus curae. Consequat sagittis in fringilla suscipit scelerisque suscipit. Rhoncus pharetra sodales malesuada sollicitudin lectus. Est primis pretium finibus felis pharetra nulla sapien lacinia. Nunc lorem aptent tristique quisque etiam posuere non ullamcorper. Potenti mus sed mus; non id eleifend pellentesque magnis.
|
|
1537
|
+
|
|
1538
|
+
Iaculis morbi mattis; ornare tincidunt neque mus egestas consectetur ultrices. Porta dapibus pretium, vulputate dis amet neque. Posuere auctor lacinia maecenas ridiculus ullamcorper tempus egestas cubilia nec. Cursus nulla lacinia mi facilisi, nisl tempor. Tempus elementum laoreet magnis neque morbi felis per. Suspendisse lectus vitae nunc amet himenaeos euismod aliquam. Quisque integer dictum aenean fermentum dictumst torquent.
|
|
1539
|
+
|
|
1540
|
+
Sociosqu per suspendisse augue phasellus velit dapibus parturient. At sit eu finibus posuere tincidunt. Phasellus duis scelerisque scelerisque taciti est venenatis. Arcu habitant augue amet eget maximus torquent. Eget gravida ut quisque ligula vel mus. Erat quis himenaeos; velit eget varius viverra interdum. Neque dapibus malesuada est a gravida libero integer aptent. Semper eleifend per at magnis, laoreet nibh orci vel ligula.
|
|
1541
|
+
|
|
1542
|
+
Odio purus finibus inceptos malesuada duis. Neque magnis est laoreet nibh gravida sagittis ullamcorper sodales. Parturient ultricies mattis lacus risus laoreet praesent. Tincidunt eleifend quis sagittis id nascetur. Nam scelerisque varius feugiat phasellus enim mauris nam. Tortor iaculis et cras; blandit sollicitudin pellentesque justo. Nam lacinia volutpat fusce nibh mollis; himenaeos iaculis. Vulputate dictum mattis sollicitudin accumsan at hendrerit.
|
|
1543
|
+
|
|
1544
|
+
Ipsum augue faucibus senectus porta dapibus metus. Netus sem amet nullam fermentum in dolor bibendum. Lacus quis enim vivamus enim risus elit suspendisse arcu. Penatibus proin pellentesque consequat nibh turpis fusce. Potenti sociosqu nunc tempor amet torquent. Aliquet porttitor adipiscing parturient curabitur hac? Condimentum morbi netus erat class hendrerit aptent. Placerat viverra molestie at eget donec quisque. Varius sem erat dolor, urna nunc ac duis inceptos maximus.
|
|
1545
|
+
|
|
1546
|
+
Nostra adipiscing dapibus eros vivamus accumsan elementum curae dignissim dignissim. Iaculis quisque fusce at conubia est habitant ipsum. Porttitor libero lobortis lobortis habitasse quis quisque nunc euismod aenean. Bibendum nullam volutpat quam vitae felis sit. Mauris bibendum nulla litora nec id, elit lacinia. Orci odio nunc est ante commodo dis quis diam convallis? Mattis a per cras amet egestas ex pellentesque nascetur augue. Egestas per massa per non metus hendrerit feugiat eu?
|
|
1547
|
+
|
|
1548
|
+
Praesent habitasse est elementum mattis potenti. Fermentum interdum enim orci dui faucibus sodales nisi mus. Tortor facilisi nunc potenti; dignissim magna varius! Risus cursus ornare tincidunt a feugiat massa cubilia. Sociosqu quis pharetra efficitur lorem ornare sapien arcu euismod. Elementum donec maecenas praesent scelerisque viverra mi natoque. Lacinia nibh eu commodo ut class blandit magnis.
|
|
1549
|
+
|
|
1550
|
+
Ullamcorper himenaeos mollis nostra placerat quam pellentesque nibh. Curae posuere cras dis senectus fringilla congue ipsum sit. Eros maecenas duis morbi consequat himenaeos ridiculus purus erat. Nascetur maximus massa eros class phasellus integer sed gravida. Vel donec lacinia donec curabitur penatibus integer ornare. Varius quam lectus magna per a mauris.
|
|
1551
|
+
|
|
1552
|
+
Imperdiet tempus malesuada ultrices egestas taciti nibh elit lacus. Nunc tempus tellus vitae duis rhoncus leo facilisis. Sapien nec mi lacus mi aliquet. Diam convallis fringilla libero duis integer integer dictum vel. Dolor montes nibh sapien dapibus ultrices praesent. Aeuismod phasellus taciti elit vehicula sit sociosqu. Lobortis neque urna dignissim penatibus felis vulputate. Primis magnis placerat, ligula massa facilisis nec.
|
|
1553
|
+
|
|
1554
|
+
Duis interdum himenaeos dis nisl et tortor condimentum accumsan. Laoreet amet fusce dis malesuada iaculis maximus fringilla. Conubia mus nibh felis vestibulum ad convallis mollis. Metus vivamus lobortis habitasse id nam. Egestas pretium eu penatibus consectetur malesuada congue tempus fusce. Rutrum neque pulvinar duis ligula fermentum malesuada. Tincidunt mollis molestie imperdiet ridiculus pharetra maximus sodales curabitur.
|
|
1555
|
+
|
|
1556
|
+
Sem nec integer fusce neque sagittis. Rutrum ipsum ante; urna enim primis consectetur nulla. Arcu ligula lectus varius magna ipsum, et dictum. Pharetra dignissim inceptos tristique natoque tempor volutpat. Luctus tristique himenaeos duis orci maecenas vel morbi. Habitasse a lacinia dignissim commodo elementum maecenas eu mollis. Fermentum tellus sem condimentum mattis elit lectus. Platea fusce arcu cras varius natoque? Volutpat tincidunt ridiculus mus massa ante dis sem ornare magna. Bibendum ornare ultrices proin efficitur; nascetur risus arcu.
|
|
1557
|
+
|
|
1558
|
+
Orci erat orci amet mollis venenatis. Feugiat torquent ex mattis, inceptos etiam integer. Class senectus aptent vivamus, semper dolor nisi at pretium volutpat. Natoque semper enim enim primis ultricies, pharetra pulvinar. Natoque litora tortor accumsan ridiculus lacinia integer; aliquet penatibus ridiculus. Placerat vestibulum justo tristique sapien senectus, et interdum et ridiculus. Urna aenean vel himenaeos; finibus a est efficitur donec. Dictum egestas quis fusce arcu; sapien himenaeos pretium congue. Semper et sapien nisi nascetur venenatis eros integer blandit.
|
|
1559
|
+
|
|
1560
|
+
Arcu per phasellus vehicula ad molestie? Eget arcu eget inceptos, eu ullamcorper diam. Gravida placerat elit ut hendrerit odio. Est lobortis imperdiet venenatis primis a. Facilisis integer maecenas adipiscing metus, rutrum curabitur. Dolor adipiscing himenaeos senectus tempus faucibus cras.
|
|
1561
|
+
|
|
1562
|
+
Massa torquent torquent ullamcorper erat nisl parturient primis eu pulvinar! Ridiculus sollicitudin dis eu, laoreet praesent hendrerit platea euismod. Lacinia dignissim suspendisse sagittis eu rutrum himenaeos curae massa diam. Platea ornare ridiculus consequat curabitur augue vestibulum ridiculus. Vel consectetur vivamus accumsan risus elementum? Imperdiet nascetur efficitur aliquam habitasse nascetur. Hendrerit quisque magnis in lacinia quis mauris.
|
|
1563
|
+
|
|
1564
|
+
Molestie fermentum blandit, viverra condimentum purus himenaeos. Fermentum congue a suspendisse ornare semper laoreet. Pharetra lacus non, iaculis ad taciti varius. Etiam nam risus vestibulum curabitur facilisis mattis, lorem hac id. Dignissim nibh tempor quam porta lectus nunc tincidunt aliquet. Tortor maximus maximus natoque nam magna torquent nec lectus mus. Vel fermentum semper vulputate penatibus vel purus.
|
|
1565
|
+
|
|
1566
|
+
Fermentum tincidunt penatibus platea himenaeos etiam sodales ad erat posuere. Vehicula vulputate sem blandit nullam sem. Condimentum eget lacus ad malesuada augue dui justo. Lobortis quis mauris pellentesque quam interdum sagittis. Nulla ullamcorper aptent hendrerit fusce hendrerit, cras cras magna. Ex quam torquent, congue dis est vulputate lacinia. Dignissim proin lacinia platea tortor elementum nullam. Purus natoque scelerisque habitant vestibulum; metus dui neque ipsum. Pellentesque augue montes fringilla et, maecenas habitant a.
|
|
1567
|
+
|
|
1568
|
+
Quam sapien eu scelerisque tristique, integer in rutrum gravida. Egestas lacinia nisi praesent turpis lacus maximus mus gravida. Dolor eget ultrices rhoncus velit; mollis id. Mi vulputate sed blandit nullam parturient venenatis. Neque vulputate iaculis nascetur felis fames ipsum adipiscing nullam? Vitae faucibus elit congue himenaeos orci volutpat nam. Magna tempus convallis vivamus eu semper. Egestas curabitur integer quis habitasse id taciti hac sociosqu morbi. Duis felis cursus potenti blandit cras dolor pharetra.
|
|
1569
|
+
|
|
1570
|
+
Ultricies vel primis nec mus malesuada congue? Habitasse semper mus ultricies; fermentum himenaeos placerat sodales. Platea sapien malesuada dignissim suscipit dis cras. Etiam odio pharetra metus donec odio natoque. Cras diam curae dapibus accumsan tortor mi laoreet. Ex mollis massa inceptos inceptos adipiscing. Cras rhoncus natoque accumsan augue enim. Parturient porttitor habitant semper platea elementum dictum ornare? Sociosqu blandit nullam vivamus elementum semper himenaeos.
|
|
1571
|
+
|
|
1572
|
+
Orci elit aliquam luctus habitant interdum. Tellus sollicitudin aliquam donec potenti praesent augue magnis auctor. Mattis faucibus iaculis etiam imperdiet lectus ad habitasse sollicitudin ac. Consequat maecenas quam dis adipiscing neque sociosqu. Ullamcorper in praesent himenaeos purus blandit nibh. Dignissim platea amet urna laoreet sociosqu lacinia accumsan consectetur risus. Adipiscing nullam arcu lobortis mi scelerisque feugiat non. Accumsan lacinia urna sit urna tincidunt nam pulvinar urna. Tellus cursus ac himenaeos sed aptent phasellus.
|
|
1573
|
+
|
|
1574
|
+
Scelerisque curabitur eget morbi leo phasellus morbi magnis. Elit nunc non vulputate eget at. Viverra efficitur dignissim fames ut condimentum tincidunt elementum lacus egestas. Dictum phasellus leo auctor dui diam. Sollicitudin placerat elit vehicula vulputate et at eleifend ullamcorper. Primis diam hac class leo justo etiam magnis. Justo maximus venenatis facilisis egestas hendrerit aptent arcu tortor consectetur. Consequat mus curabitur nisl; blandit enim at bibendum tempor bibendum. Ad nam arcu vehicula himenaeos sociosqu eu faucibus accumsan.
|
|
1575
|
+
|
|
1576
|
+
Maximus malesuada faucibus phasellus donec ligula. Rutrum pellentesque ultricies nullam; aenean scelerisque elementum. Porta luctus consectetur pharetra consequat varius. Ut dapibus senectus venenatis scelerisque fames ligula congue. Magna hendrerit faucibus ultricies tincidunt phasellus pellentesque, maecenas consequat! Malesuada senectus praesent sed condimentum aenean mi. Interdum sollicitudin mattis, purus vitae netus gravida. Nullam magna risus leo sit urna aenean.
|
|
1577
|
+
|
|
1578
|
+
Ut lacinia potenti vel varius habitant mus nullam adipiscing. Commodo potenti conubia hendrerit enim massa ad blandit. Nisl a massa nunc risus, condimentum enim. Hac aenean massa lacinia lobortis ad dolor sem. Nisl ex interdum blandit pulvinar pellentesque lorem. Sapien proin malesuada netus parturient pulvinar nec. Ex semper amet sem maximus blandit cras felis. Donec tellus auctor eleifend placerat natoque. Rutrum maecenas sollicitudin nisl consectetur in nulla rhoncus. Id rhoncus nec mi non lacinia leo efficitur nisi.
|
|
1579
|
+
|
|
1580
|
+
Dolor non phasellus id nascetur id nisi litora cubilia interdum. Lectus dolor sodales eu nulla porttitor placerat vulputate. Praesent ullamcorper consequat nulla torquent facilisis nunc. Rhoncus augue eleifend mauris erat duis varius felis. Dignissim nunc pulvinar vehicula dignissim maximus elit metus senectus. Venenatis conubia pulvinar commodo dui montes cubilia.
|
|
1581
|
+
|
|
1582
|
+
Cursus velit lacus aenean elit conubia. Velit in inceptos enim, elit lobortis est facilisis. Suscipit cursus dictum enim libero neque dolor himenaeos eu. Porta in integer praesent quisque quis sit. Primis velit tempus sit curae vehicula porttitor. Scelerisque nisi diam vehicula mi fusce dictum. Tincidunt mus eleifend commodo ridiculus adipiscing.
|
|
1583
|
+
|
|
1584
|
+
Pellentesque quis dignissim euismod in fermentum quam lobortis porta. Dis euismod ultricies montes odio sapien condimentum integer per. Torquent nascetur ante ante; diam ultrices nec habitant. Augue congue a conubia commodo ultricies tortor. Quis ridiculus netus vivamus dictumst efficitur parturient hendrerit. Facilisis ultrices suspendisse elit sodales eleifend maecenas tempor. Habitasse platea congue ac, pretium augue odio interdum netus. Mattis odio mi leo integer nisi diam phasellus elementum. Tortor himenaeos curabitur enim sit ac mi dictumst faucibus sociosqu.
|
|
1585
|
+
|
|
1586
|
+
Duis ex viverra auctor praesent elit ac. Sit ex at cubilia aenean scelerisque finibus ridiculus. Hendrerit imperdiet potenti erat risus commodo. Sit donec ullamcorper facilisi neque varius, suscipit malesuada hac. Nulla lacinia pulvinar non volutpat pellentesque lobortis ultrices dis. Faucibus luctus fusce, aliquam magnis pharetra sed dui nulla viverra. Lectus hendrerit eu pellentesque nostra mauris suspendisse himenaeos. Lectus bibendum inceptos commodo nulla magnis proin.`;
|
|
1139
1587
|
//# sourceMappingURL=testArtifacts.js.map
|