@dxos/echo-db 2.31.5-dev.573190a2 → 2.31.5-dev.c5d930eb
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/dist/src/api/schema.js +2 -2
- package/dist/src/api/schema.js.map +1 -1
- package/dist/src/api/schema.test.js +73 -139
- package/dist/src/api/schema.test.js.map +1 -1
- package/dist/src/testing/testing.d.ts +0 -25
- package/dist/src/testing/testing.d.ts.map +1 -1
- package/dist/src/testing/testing.js +1 -85
- package/dist/src/testing/testing.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
- package/src/api/schema.test.ts +75 -158
- package/src/api/schema.ts +2 -2
- package/src/testing/testing.ts +0 -92
package/dist/src/api/schema.js
CHANGED
|
@@ -24,7 +24,7 @@ class Schema {
|
|
|
24
24
|
}
|
|
25
25
|
// TODO(kaplanski): What happens if an item has extra properties?
|
|
26
26
|
validate(model) {
|
|
27
|
-
this.fields.
|
|
27
|
+
return this.fields.every(field => {
|
|
28
28
|
const value = model.get(field.key);
|
|
29
29
|
if (field.required) {
|
|
30
30
|
if (!value) {
|
|
@@ -40,8 +40,8 @@ class Schema {
|
|
|
40
40
|
// TODO(kaplanski): Should this class have access to all items in the party to validate?
|
|
41
41
|
// Or maybe possible values should be provided?
|
|
42
42
|
}
|
|
43
|
+
return true;
|
|
43
44
|
});
|
|
44
|
-
return true;
|
|
45
45
|
}
|
|
46
46
|
// TODO(kaplanski): Should the field be added to each item using the schema in the party? (Empty value?)
|
|
47
47
|
// TODO(kaplanski): Should the type be infered from the first value added?
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/api/schema.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIW,QAAA,WAAW,GAAG,kBAAkB,CAAC;AAuB9C;;GAEG;AACH,MAAa,MAAM;IACjB,YACmB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IACpC,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM;;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAE,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,iEAAiE;IACjE,QAAQ,CAAE,KAAkB;QAC1B,IAAI,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/api/schema.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIW,QAAA,WAAW,GAAG,kBAAkB,CAAC;AAuB9C;;GAEG;AACH,MAAa,MAAM;IACjB,YACmB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IACpC,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,MAAM;;QACR,OAAO,MAAM,CAAC,MAAM,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ,CAAE,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,iEAAiE;IACjE,QAAQ,CAAE,KAAkB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,KAAK,EAAE;oBACV,OAAO,KAAK,CAAC;iBACd;aACF;YAED,IAAI,KAAK,CAAC,IAAI,EAAE;gBACd,IAAI,OAAO,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;oBAC/B,OAAO,KAAK,CAAC;iBACd;aACF;YAED,IAAI,KAAK,CAAC,GAAG,EAAE;gBACb,wFAAwF;gBACxF,+CAA+C;aAChD;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wGAAwG;IACxG,0EAA0E;IAC1E,KAAK,CAAC,QAAQ,CAAE,QAAqB;QACnC,MAAM,SAAS,GAAG;YAChB,GAAG,IAAI,CAAC,MAAM;YACd,QAAQ;SACT,CAAC;QACF,oFAAoF;QACpF,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,SAAS,CAAE,UAAkB,EAAE,WAAwB;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxC,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE;gBAC5B,OAAO,WAAW,CAAC;aACpB;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAE,GAAW;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF;AAnED,wBAmEC"}
|
|
@@ -1,157 +1,91 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
//
|
|
3
|
-
// Copyright
|
|
3
|
+
// Copyright 2021 DXOS.org
|
|
4
4
|
//
|
|
5
5
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
6
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
-
const columnify_1 = __importDefault(require("columnify"));
|
|
11
9
|
const expect_1 = __importDefault(require("expect"));
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
10
|
+
const mocha_1 = require("mocha");
|
|
11
|
+
const model_factory_1 = require("@dxos/model-factory");
|
|
12
|
+
const object_model_1 = require("@dxos/object-model");
|
|
13
|
+
const testutils_1 = require("@dxos/testutils");
|
|
14
|
+
const database_1 = require("../database");
|
|
15
15
|
const schema_1 = require("./schema");
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
key: 'title',
|
|
27
|
-
required: true,
|
|
28
|
-
generator: () => faker_1.default.company.companyName()
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
key: 'website',
|
|
32
|
-
required: false,
|
|
33
|
-
generator: () => faker_1.default.internet.url()
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
key: 'collaborators',
|
|
37
|
-
required: false,
|
|
38
|
-
generator: () => faker_1.default.datatype.number().toString()
|
|
39
|
-
}
|
|
40
|
-
]
|
|
41
|
-
},
|
|
42
|
-
[TestType.Person]: {
|
|
43
|
-
schema: 'example:type/schema/person',
|
|
44
|
-
fields: [
|
|
45
|
-
{
|
|
46
|
-
key: 'title',
|
|
47
|
-
required: true,
|
|
48
|
-
generator: () => `${faker_1.default.name.firstName()} ${faker_1.default.name.lastName()}`
|
|
49
|
-
}
|
|
50
|
-
]
|
|
51
|
-
}
|
|
16
|
+
const SCHEMA = 'example:type/schema/organization';
|
|
17
|
+
const createTestSchema = async (database) => {
|
|
18
|
+
const schemaItem = await database.createItem({
|
|
19
|
+
model: object_model_1.ObjectModel,
|
|
20
|
+
type: schema_1.TYPE_SCHEMA,
|
|
21
|
+
props: {
|
|
22
|
+
schema: SCHEMA
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return new schema_1.Schema(schemaItem.model);
|
|
52
26
|
};
|
|
53
|
-
describe('
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
(0,
|
|
57
|
-
(0,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
describe('Schema', () => {
|
|
28
|
+
const setup = async () => {
|
|
29
|
+
const modelFactory = new model_factory_1.ModelFactory().registerModel(object_model_1.ObjectModel);
|
|
30
|
+
const backend = await (0, database_1.createInMemoryDatabase)(modelFactory);
|
|
31
|
+
(0, testutils_1.afterTest)(() => backend.destroy());
|
|
32
|
+
return backend;
|
|
33
|
+
};
|
|
34
|
+
(0, mocha_1.it)('class creation', async () => {
|
|
35
|
+
const database = await setup();
|
|
36
|
+
const schema = await createTestSchema(database);
|
|
37
|
+
(0, expect_1.default)(schema).toBeTruthy();
|
|
38
|
+
(0, expect_1.default)(schema.schema).toBeTruthy();
|
|
39
|
+
});
|
|
40
|
+
(0, mocha_1.it)('add and delete field', async () => {
|
|
41
|
+
const database = await setup();
|
|
42
|
+
const key = 'name';
|
|
43
|
+
const schema = await createTestSchema(database);
|
|
61
44
|
const newField = {
|
|
62
|
-
key:
|
|
45
|
+
key: key,
|
|
63
46
|
required: true
|
|
64
47
|
};
|
|
65
48
|
await schema.addField(newField);
|
|
66
|
-
(0, expect_1.default)(schema.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
49
|
+
(0, expect_1.default)(schema.fields.length).toBe(1);
|
|
50
|
+
(0, expect_1.default)(schema.getField(key)).toBeTruthy();
|
|
51
|
+
await schema.deleteField(key);
|
|
52
|
+
(0, expect_1.default)(schema.fields.length).toBe(0);
|
|
53
|
+
});
|
|
54
|
+
(0, mocha_1.it)('edit field', async () => {
|
|
55
|
+
var _a;
|
|
56
|
+
const database = await setup();
|
|
57
|
+
const key = 'name';
|
|
58
|
+
const schema = await createTestSchema(database);
|
|
59
|
+
const newField = {
|
|
60
|
+
key: key,
|
|
61
|
+
required: true
|
|
77
62
|
};
|
|
78
|
-
await
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
await
|
|
92
|
-
await
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
96
|
-
const { entities: schemas } = database
|
|
97
|
-
.select({ type: schema_1.TYPE_SCHEMA })
|
|
98
|
-
.exec();
|
|
99
|
-
const { entities: orgs } = database
|
|
100
|
-
.select({ type: TestType.Org })
|
|
101
|
-
.exec();
|
|
102
|
-
const { entities: people } = database
|
|
103
|
-
.select({ type: TestType.Person })
|
|
104
|
-
.exec();
|
|
105
|
-
[...orgs, ...people].forEach(item => {
|
|
106
|
-
const schemaItem = schemas.find(schema => schema.model.get('schema') === item.type);
|
|
107
|
-
const schema = new schema_1.Schema(schemaItem.model);
|
|
108
|
-
(0, expect_1.default)(schema.validate(item.model)).toBeTruthy();
|
|
109
|
-
});
|
|
110
|
-
// Log tables.
|
|
111
|
-
schemas.forEach(schema => {
|
|
112
|
-
const type = schema.model.get('schema');
|
|
113
|
-
const { entities: items } = database.select({ type }).exec();
|
|
114
|
-
(0, testing_1.log)(renderItems(schema, items, database));
|
|
63
|
+
await schema.addField(newField);
|
|
64
|
+
newField.required = false;
|
|
65
|
+
await schema.editField(key, newField);
|
|
66
|
+
(0, expect_1.default)((_a = schema.getField(key)) === null || _a === void 0 ? void 0 : _a.required).toBeFalsy();
|
|
67
|
+
});
|
|
68
|
+
(0, mocha_1.it)('validate data item', async () => {
|
|
69
|
+
const database = await setup();
|
|
70
|
+
const key = 'name';
|
|
71
|
+
const schema = await createTestSchema(database);
|
|
72
|
+
const firstField = {
|
|
73
|
+
key: key,
|
|
74
|
+
required: true
|
|
75
|
+
};
|
|
76
|
+
await schema.addField(firstField);
|
|
77
|
+
const item = await database.createItem({
|
|
78
|
+
model: object_model_1.ObjectModel,
|
|
79
|
+
type: schema.schema
|
|
115
80
|
});
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const renderItems = (schema, items, database) => {
|
|
125
|
-
const fields = Object.values(schema.model.get('fields'));
|
|
126
|
-
const columns = fields.map(({ key }) => key);
|
|
127
|
-
const logKey = (id) => (0, debug_1.truncateKey)(id, 4);
|
|
128
|
-
const logString = (value) => (0, debug_1.truncate)(value, 24, true);
|
|
129
|
-
const values = items.map(item => {
|
|
130
|
-
return fields.reduce((row, { key, type, ref }) => {
|
|
131
|
-
const value = item.model.get(key);
|
|
132
|
-
switch (type) {
|
|
133
|
-
case 'string': {
|
|
134
|
-
row[key] = chalk_1.default.green(logString(value));
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
case 'ref': {
|
|
138
|
-
if (database) {
|
|
139
|
-
const { field } = ref;
|
|
140
|
-
const item = database.getItem(value);
|
|
141
|
-
row[key] = chalk_1.default.red(logString(item === null || item === void 0 ? void 0 : item.model.get(field)));
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
row[key] = chalk_1.default.red(logKey(value));
|
|
145
|
-
}
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
default: {
|
|
149
|
-
row[key] = value;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return row;
|
|
153
|
-
}, { id: chalk_1.default.blue(logKey(item.id)) });
|
|
81
|
+
(0, expect_1.default)(schema.validate(item.model)).toBeFalsy();
|
|
82
|
+
firstField.required = false;
|
|
83
|
+
await schema.editField(key, firstField);
|
|
84
|
+
(0, expect_1.default)(schema.validate(item.model)).toBeTruthy();
|
|
85
|
+
firstField.required = true;
|
|
86
|
+
await schema.editField(key, firstField);
|
|
87
|
+
await item.model.set(key, 'Test');
|
|
88
|
+
(0, expect_1.default)(schema.validate(item.model)).toBeTruthy();
|
|
154
89
|
});
|
|
155
|
-
|
|
156
|
-
};
|
|
90
|
+
});
|
|
157
91
|
//# sourceMappingURL=schema.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/api/schema.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;AAEF,
|
|
1
|
+
{"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/api/schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import debug from 'debug';
|
|
2
2
|
import { NetworkManagerOptions } from '@dxos/network-manager';
|
|
3
3
|
import { IStorage } from '@dxos/random-access-multi-storage';
|
|
4
|
-
import { Database, Schema, SchemaDef, SchemaField } from '../api';
|
|
5
4
|
import { ECHO } from '../echo';
|
|
6
5
|
import { PartyInternal } from '../parties';
|
|
7
6
|
export declare const log: debug.Debugger;
|
|
@@ -25,28 +24,4 @@ export declare const createTestInstance: ({ verboseLogging, initialize, storage,
|
|
|
25
24
|
* @returns Party instance on provided test instance.
|
|
26
25
|
*/
|
|
27
26
|
export declare const inviteTestPeer: (party: PartyInternal, peer: ECHO) => Promise<PartyInternal>;
|
|
28
|
-
export declare type SchemaFieldWithGenerator = SchemaField & {
|
|
29
|
-
generator: () => string;
|
|
30
|
-
};
|
|
31
|
-
export declare type SchemaDefWithGenerator = Omit<SchemaDef, 'fields'> & {
|
|
32
|
-
fields: SchemaFieldWithGenerator[];
|
|
33
|
-
};
|
|
34
|
-
declare type Callback = (party: Database) => Promise<void>;
|
|
35
|
-
export declare const setup: (callback: Callback) => Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Create schema items.
|
|
38
|
-
*/
|
|
39
|
-
export declare const createSchemas: (database: Database, schemas: SchemaDefWithGenerator[]) => Promise<Schema[]>;
|
|
40
|
-
/**
|
|
41
|
-
* Create items for a given schema.
|
|
42
|
-
* NOTE: Assumes that referenced items have already been constructed.
|
|
43
|
-
*/
|
|
44
|
-
export declare const createItems: (database: Database, { schema, fields }: SchemaDefWithGenerator, numItems: number) => Promise<import("../api").Item<import("@dxos/model-factory").Model<any, any>>[]>;
|
|
45
|
-
/**
|
|
46
|
-
* Create data for all schemas.
|
|
47
|
-
*/
|
|
48
|
-
export declare const createData: (database: Database, schemas: SchemaDefWithGenerator[], options?: {
|
|
49
|
-
[key: string]: number;
|
|
50
|
-
}) => Promise<void>;
|
|
51
|
-
export {};
|
|
52
27
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAG7D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,eAAO,MAAM,GAAG,gBAAgC,CAAC;AAEjD,eAAO,MAAM,aAAa,QAAS,MAAM,eAAe,GAAG,SAE1D,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,CAAC,EAAE,GAAG,CAAA;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAE7C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,QAAQ,CAAA;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,8HAS5B,WAAW,kBAuBb,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,UAAiB,aAAa,QAAQ,IAAI,KAAG,QAAQ,aAAa,CAM5F,CAAC"}
|
|
@@ -6,15 +6,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
6
6
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
9
|
+
exports.inviteTestPeer = exports.createTestInstance = exports.messageLogger = exports.log = void 0;
|
|
10
10
|
const debug_1 = __importDefault(require("debug"));
|
|
11
|
-
const faker_1 = __importDefault(require("faker"));
|
|
12
11
|
const crypto_1 = require("@dxos/crypto");
|
|
13
|
-
const model_factory_1 = require("@dxos/model-factory");
|
|
14
|
-
const object_model_1 = require("@dxos/object-model");
|
|
15
12
|
const util_1 = require("@dxos/util");
|
|
16
|
-
const api_1 = require("../api");
|
|
17
|
-
const database_1 = require("../database");
|
|
18
13
|
const echo_1 = require("../echo");
|
|
19
14
|
const util_2 = require("../util");
|
|
20
15
|
exports.log = (0, debug_1.default)('dxos:echo-db:testing');
|
|
@@ -59,83 +54,4 @@ const inviteTestPeer = async (party, peer) => {
|
|
|
59
54
|
return peer.joinParty(invitation, async () => Buffer.from('0000'));
|
|
60
55
|
};
|
|
61
56
|
exports.inviteTestPeer = inviteTestPeer;
|
|
62
|
-
const setup = async (callback) => {
|
|
63
|
-
const modelFactory = new model_factory_1.ModelFactory().registerModel(object_model_1.ObjectModel);
|
|
64
|
-
const database = await (0, database_1.createInMemoryDatabase)(modelFactory);
|
|
65
|
-
try {
|
|
66
|
-
await callback(database);
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
await database.destroy();
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
exports.setup = setup;
|
|
73
|
-
/**
|
|
74
|
-
* Create schema items.
|
|
75
|
-
*/
|
|
76
|
-
const createSchemas = async (database, schemas) => {
|
|
77
|
-
(0, exports.log)(`Creating schemas: [${schemas.map(({ schema }) => schema).join()}]`);
|
|
78
|
-
const schemaItems = await Promise.all(schemas.map(({ schema, fields }) => {
|
|
79
|
-
const schemaFields = fields.map(fieldWithGenerator => {
|
|
80
|
-
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
81
|
-
const { generator, ...field } = fieldWithGenerator;
|
|
82
|
-
return field;
|
|
83
|
-
}).flat();
|
|
84
|
-
return database.createItem({
|
|
85
|
-
model: object_model_1.ObjectModel,
|
|
86
|
-
type: api_1.TYPE_SCHEMA,
|
|
87
|
-
props: {
|
|
88
|
-
schema,
|
|
89
|
-
fields: schemaFields
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}));
|
|
93
|
-
return schemaItems.map(item => new api_1.Schema(item.model));
|
|
94
|
-
};
|
|
95
|
-
exports.createSchemas = createSchemas;
|
|
96
|
-
/**
|
|
97
|
-
* Create items for a given schema.
|
|
98
|
-
* NOTE: Assumes that referenced items have already been constructed.
|
|
99
|
-
*/
|
|
100
|
-
const createItems = async (database, { schema, fields }, numItems) => {
|
|
101
|
-
(0, exports.log)(`Creating items for: ${schema}`);
|
|
102
|
-
return await Promise.all(Array.from({ length: numItems }).map(async () => {
|
|
103
|
-
const values = fields.map(field => {
|
|
104
|
-
if (field.ref) {
|
|
105
|
-
// Look-up item.
|
|
106
|
-
const { entities: items } = database.select().filter({ type: field.ref.schema }).exec();
|
|
107
|
-
if (items.length) {
|
|
108
|
-
return {
|
|
109
|
-
[field.key]: faker_1.default.random.arrayElement(items).id
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
return {
|
|
115
|
-
[field.key]: field.generator()
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
return undefined;
|
|
119
|
-
}).filter(Boolean);
|
|
120
|
-
return await database.createItem({
|
|
121
|
-
type: schema,
|
|
122
|
-
props: Object.assign({}, ...values)
|
|
123
|
-
});
|
|
124
|
-
}));
|
|
125
|
-
};
|
|
126
|
-
exports.createItems = createItems;
|
|
127
|
-
/**
|
|
128
|
-
* Create data for all schemas.
|
|
129
|
-
*/
|
|
130
|
-
const createData = async (database, schemas, options = {}) => {
|
|
131
|
-
var _a;
|
|
132
|
-
// Synchronous loop.
|
|
133
|
-
for (const schema of schemas) {
|
|
134
|
-
const count = (_a = options[schema.schema]) !== null && _a !== void 0 ? _a : 0;
|
|
135
|
-
if (count) {
|
|
136
|
-
await (0, exports.createItems)(database, schema, count);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
exports.createData = createData;
|
|
141
57
|
//# sourceMappingURL=testing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,kDAA0B;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/testing/testing.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,kDAA0B;AAE1B,yCAA6C;AAG7C,qCAA0C;AAE1C,kCAA+B;AAE/B,kCAA2C;AAE9B,QAAA,GAAG,GAAG,IAAA,eAAK,EAAC,sBAAsB,CAAC,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,OAAY,EAAE,EAAE;IAC7D,IAAA,WAAG,EAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,mBAAY,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB;AAcF;;GAEG;AACI,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,cAAc,GAAG,KAAK,EACtB,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,IAAA,uBAAgB,GAAE,EAC5B,UAAU,GAAG,SAAS,EACtB,qBAAqB,EACrB,eAAe,GAAG,IAAA,uBAAgB,GAAE,EACpC,SAAS,GAAG,IAAI,EAChB,gBAAgB,KACD,EAAE,EAAE,EAAE;IACrB,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC;QACpB,WAAW,EAAE,OAAO;QACpB,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,SAAS;QACT,qBAAqB;QACrB,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE;QACd,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SAC1B;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAhCW,QAAA,kBAAkB,sBAgC7B;AAEF;;;GAGG;AACI,MAAM,cAAc,GAAG,KAAK,EAAE,KAAoB,EAAE,IAAU,EAA0B,EAAE;IAC/F,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;QAChE,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB"}
|