remult 0.22.0 → 0.22.2
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/esm/remult-mongo.js +23 -18
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +2 -1
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +106 -40
- package/esm/src/shared-tests/db-tests-setup.d.ts +2 -0
- package/esm/src/shared-tests/db-tests-setup.js +2 -0
- package/esm/src/shared-tests/db-tests.db-tests.js +46 -6
- package/esm/src/tests/frontend-database-tests-setup.spec.js +1 -1
- package/package.json +1 -1
- package/remult-mongo.js +24 -18
- package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +2 -1
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +235 -107
- package/src/shared-tests/db-tests-setup.d.ts +2 -0
- package/src/shared-tests/db-tests-setup.js +2 -0
- package/src/shared-tests/db-tests.db-tests.js +108 -15
- package/src/tests/frontend-database-tests-setup.spec.js +1 -1
package/esm/remult-mongo.js
CHANGED
|
@@ -20,19 +20,24 @@ export class MongoDataProvider {
|
|
|
20
20
|
return new MongoEntityDataProvider(this.db, entity, this.session);
|
|
21
21
|
}
|
|
22
22
|
async transaction(action) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const db = this.client.db(this.db.databaseName);
|
|
26
|
-
try {
|
|
27
|
-
await action(new MongoDataProvider(db, undefined, { session }));
|
|
28
|
-
await session.commitTransaction();
|
|
23
|
+
if (this.disableTransactions) {
|
|
24
|
+
await action(this);
|
|
29
25
|
}
|
|
30
|
-
|
|
31
|
-
await
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
else {
|
|
27
|
+
let session = await this.client.startSession();
|
|
28
|
+
session.startTransaction();
|
|
29
|
+
const db = this.client.db(this.db.databaseName);
|
|
30
|
+
try {
|
|
31
|
+
await action(new MongoDataProvider(db, undefined, { session }));
|
|
32
|
+
await session.commitTransaction();
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
await session.abortTransaction();
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
await session.endSession();
|
|
40
|
+
}
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
static async filterToRaw(entity, condition) {
|
|
@@ -54,7 +59,7 @@ class MongoEntityDataProvider {
|
|
|
54
59
|
this.entity = entity;
|
|
55
60
|
this.session = session;
|
|
56
61
|
}
|
|
57
|
-
|
|
62
|
+
translateFromDb(row, nameProvider) {
|
|
58
63
|
let result = {};
|
|
59
64
|
for (const col of this.entity.fields) {
|
|
60
65
|
let val = row[nameProvider.$dbNameOf(col)];
|
|
@@ -64,7 +69,7 @@ class MongoEntityDataProvider {
|
|
|
64
69
|
}
|
|
65
70
|
return result;
|
|
66
71
|
}
|
|
67
|
-
|
|
72
|
+
translateToDb(row, nameProvider) {
|
|
68
73
|
let result = {};
|
|
69
74
|
for (const col of this.entity.fields) {
|
|
70
75
|
let val = col.valueConverter.toDb(row[col.key]);
|
|
@@ -104,7 +109,7 @@ class MongoEntityDataProvider {
|
|
|
104
109
|
}
|
|
105
110
|
return await Promise.all(await collection
|
|
106
111
|
.find(where, op)
|
|
107
|
-
.map((x) => this.
|
|
112
|
+
.map((x) => this.translateFromDb(x, e))
|
|
108
113
|
.toArray());
|
|
109
114
|
}
|
|
110
115
|
async update(id, data) {
|
|
@@ -124,7 +129,7 @@ class MongoEntityDataProvider {
|
|
|
124
129
|
for (const f of this.entity.fields) {
|
|
125
130
|
if (!f.dbReadOnly && !f.isServerExpression) {
|
|
126
131
|
if (keys.includes(f.key)) {
|
|
127
|
-
newR[f.key] = f.valueConverter.
|
|
132
|
+
newR[f.key] = f.valueConverter.toDb(data[f.key]);
|
|
128
133
|
}
|
|
129
134
|
}
|
|
130
135
|
}
|
|
@@ -143,10 +148,10 @@ class MongoEntityDataProvider {
|
|
|
143
148
|
}
|
|
144
149
|
async insert(data) {
|
|
145
150
|
let { collection, e } = await this.collection();
|
|
146
|
-
let r = await collection.insertOne(await this.
|
|
151
|
+
let r = await collection.insertOne(await this.translateToDb(data, e), {
|
|
147
152
|
session: this.session,
|
|
148
153
|
});
|
|
149
|
-
return await this.
|
|
154
|
+
return await this.translateFromDb(await collection.findOne({ _id: r.insertedId }, { session: this.session }), e);
|
|
150
155
|
}
|
|
151
156
|
async collection() {
|
|
152
157
|
const e = await dbNamesOf(this.entity);
|
|
@@ -2,5 +2,6 @@ import { dbTestWhatSignature } from '../shared-tests/db-tests-setup';
|
|
|
2
2
|
export declare const testKnexPGSqlImpl: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
3
3
|
export declare const mySqlTest: import("../shared-tests/db-tests-setup").dbTestMethodSignature;
|
|
4
4
|
export declare function testPostgresImplementation(key: string, what: dbTestWhatSignature, focus?: boolean): void;
|
|
5
|
-
export declare
|
|
5
|
+
export declare const testMongo: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
6
|
+
export declare const testMongoNoTrans: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
6
7
|
import '../shared-tests';
|
|
@@ -4,7 +4,7 @@ import * as Knex from 'knex';
|
|
|
4
4
|
import { MongoClient } from 'mongodb';
|
|
5
5
|
import { config } from 'dotenv';
|
|
6
6
|
import { createPostgresConnection, PostgresSchemaBuilder, } from '../../postgres';
|
|
7
|
-
import { addDatabaseToTest, itWithFocus,
|
|
7
|
+
import { addDatabaseToTest, itWithFocus, TestDbs, } from '../shared-tests/db-tests-setup';
|
|
8
8
|
import { describeClass } from '../remult3/DecoratorReplacer';
|
|
9
9
|
import { Entity, Fields } from '../remult3';
|
|
10
10
|
KnexSchemaBuilder.logToConsole = false;
|
|
@@ -84,43 +84,72 @@ export function testPostgresImplementation(key, what, focus = false) {
|
|
|
84
84
|
addDatabaseToTest(testPostgresImplementation);
|
|
85
85
|
import { Categories } from '../tests/remult-3-entities';
|
|
86
86
|
import { MongoDataProvider } from '../../remult-mongo';
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
export const testMongo = (() => {
|
|
88
|
+
const mongoConnectionString = process.env['MONGO_TEST_URL']; //"mongodb://localhost:27017/local"
|
|
89
|
+
let client = new MongoClient(mongoConnectionString);
|
|
90
|
+
let done;
|
|
91
|
+
let mongoDbPromise = client.connect().then((c) => {
|
|
92
|
+
done = c;
|
|
93
|
+
return c.db('test');
|
|
92
94
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
95
|
+
afterAll(async () => {
|
|
96
|
+
if (done)
|
|
97
|
+
done.close();
|
|
98
|
+
});
|
|
99
|
+
return function testMongo(key, what, focus = false) {
|
|
100
|
+
itWithFocus(key + ' - mongo', async () => {
|
|
101
|
+
let mongoDb = await mongoDbPromise;
|
|
102
|
+
let db = new MongoDataProvider(mongoDb, client);
|
|
103
|
+
let remult = new Remult(db);
|
|
104
|
+
await what({
|
|
105
|
+
db,
|
|
106
|
+
remult,
|
|
107
|
+
createEntity: async (entity) => {
|
|
108
|
+
let repo = remult.repo(entity);
|
|
109
|
+
await mongoDb
|
|
110
|
+
.collection(await repo.metadata.getDbName())
|
|
111
|
+
.deleteMany({});
|
|
112
|
+
return repo;
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}, focus);
|
|
116
|
+
};
|
|
117
|
+
})();
|
|
118
|
+
export const testMongoNoTrans = (() => {
|
|
119
|
+
const mongoConnectionString = 'mongodb://localhost:27017/local';
|
|
120
|
+
let client = new MongoClient(mongoConnectionString);
|
|
121
|
+
let done;
|
|
122
|
+
let mongoDbPromise = client.connect().then((c) => {
|
|
123
|
+
done = c;
|
|
124
|
+
return c.db('test');
|
|
125
|
+
});
|
|
126
|
+
afterAll(async () => {
|
|
127
|
+
if (done)
|
|
128
|
+
done.close();
|
|
129
|
+
});
|
|
130
|
+
return function testMongo(key, what, focus = false) {
|
|
131
|
+
itWithFocus(key + ' - ' + TestDbs.mongoNoTrans, async () => {
|
|
132
|
+
let mongoDb = await mongoDbPromise;
|
|
133
|
+
let db = new MongoDataProvider(mongoDb, client, {
|
|
134
|
+
disableTransactions: true,
|
|
135
|
+
});
|
|
136
|
+
let remult = new Remult(db);
|
|
137
|
+
await what({
|
|
138
|
+
db,
|
|
139
|
+
remult,
|
|
140
|
+
createEntity: async (entity) => {
|
|
141
|
+
let repo = remult.repo(entity);
|
|
142
|
+
await mongoDb
|
|
143
|
+
.collection(await repo.metadata.getDbName())
|
|
144
|
+
.deleteMany({});
|
|
145
|
+
return repo;
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
}, focus);
|
|
149
|
+
};
|
|
150
|
+
})();
|
|
123
151
|
addDatabaseToTest(testMongo, TestDbs.mongo);
|
|
152
|
+
addDatabaseToTest(testMongoNoTrans, TestDbs.mongoNoTrans);
|
|
124
153
|
it('test mongo without transaction', async () => {
|
|
125
154
|
const client = new MongoClient('mongodb://localhost:27017/local');
|
|
126
155
|
await client.connect();
|
|
@@ -145,12 +174,49 @@ it('test mongo without transaction', async () => {
|
|
|
145
174
|
}
|
|
146
175
|
await repo.insert({ id: 1, title: 'a' });
|
|
147
176
|
try {
|
|
148
|
-
await db.transaction(async () => {
|
|
149
|
-
await repo.insert({ id: 2, title: 'b' });
|
|
150
|
-
throw
|
|
177
|
+
await db.transaction(async (dbWithTrans) => {
|
|
178
|
+
await new Remult(dbWithTrans).repo(entity).insert({ id: 2, title: 'b' });
|
|
179
|
+
throw 'Error';
|
|
151
180
|
});
|
|
152
181
|
}
|
|
153
|
-
catch {
|
|
182
|
+
catch (err) {
|
|
183
|
+
expect(err).toBe('Error');
|
|
184
|
+
}
|
|
154
185
|
expect(await repo.count()).toBe(2);
|
|
155
186
|
});
|
|
187
|
+
testMongoNoTrans('transactions mongo no trans', async ({ db, createEntity }) => {
|
|
188
|
+
let x = await createEntity(Categories);
|
|
189
|
+
try {
|
|
190
|
+
await db.transaction(async (db) => {
|
|
191
|
+
let remult = new Remult(db);
|
|
192
|
+
await remult.repo(Categories).insert({ categoryName: 'testing' });
|
|
193
|
+
expect(await remult.repo(Categories).count()).toBe(1);
|
|
194
|
+
throw 'Fail';
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
expect(err).toBe('Fail');
|
|
199
|
+
}
|
|
200
|
+
expect(await x.count()).toBe(1);
|
|
201
|
+
}, false);
|
|
202
|
+
testMongoNoTrans('test Dates', async ({ createEntity }) => {
|
|
203
|
+
const c = class {
|
|
204
|
+
};
|
|
205
|
+
describeClass(c, Entity('test_dates_on_mongo'), {
|
|
206
|
+
id: Fields.integer(),
|
|
207
|
+
date: Fields.date(),
|
|
208
|
+
});
|
|
209
|
+
const r = await createEntity(c);
|
|
210
|
+
let x = await r.insert({ id: 1, date: new Date(1976, 5, 16) });
|
|
211
|
+
const client = new MongoClient('mongodb://localhost:27017/local');
|
|
212
|
+
await client.connect();
|
|
213
|
+
const mongoDb = client.db('test');
|
|
214
|
+
expect((await mongoDb.collection(await r.metadata.getDbName()).findOne())
|
|
215
|
+
.date instanceof Date).toBe(true);
|
|
216
|
+
x.date = new Date(1978, 2, 15);
|
|
217
|
+
await r.save(x);
|
|
218
|
+
expect((await mongoDb.collection(await r.metadata.getDbName()).findOne())
|
|
219
|
+
.date instanceof Date).toBe(true);
|
|
220
|
+
//let z = await r.save({ ...x, date: new Date(1978, 2, 15) })
|
|
221
|
+
}, false);
|
|
156
222
|
import '../shared-tests';
|
|
@@ -12,7 +12,9 @@ export declare function addDatabaseToTest(tester: dbTestMethodSignature, key?: s
|
|
|
12
12
|
export declare function testInMemory(key: string, what: dbTestWhatSignature, focus?: boolean): void;
|
|
13
13
|
export declare const TestDbs: {
|
|
14
14
|
restDataProvider: string;
|
|
15
|
+
webSql: string;
|
|
15
16
|
mongo: string;
|
|
17
|
+
mongoNoTrans: string;
|
|
16
18
|
inMemory: string;
|
|
17
19
|
};
|
|
18
20
|
export declare type dbTestWhatSignature = (db: {
|
|
@@ -40,7 +40,9 @@ export function testInMemory(key, what, focus = false) {
|
|
|
40
40
|
}
|
|
41
41
|
export const TestDbs = {
|
|
42
42
|
restDataProvider: 'restDataProvider',
|
|
43
|
+
webSql: 'webSql',
|
|
43
44
|
mongo: 'mongo',
|
|
45
|
+
mongoNoTrans: 'mongoNoTrans',
|
|
44
46
|
inMemory: 'in memory',
|
|
45
47
|
};
|
|
46
48
|
addDatabaseToTest(testInMemory, TestDbs.inMemory);
|
|
@@ -4,7 +4,7 @@ import { Fields, Entity, EntityBase, Field, IdEntity, } from '../remult3';
|
|
|
4
4
|
import { c } from '../tests/c';
|
|
5
5
|
import { Done } from '../tests/Done';
|
|
6
6
|
import { h } from '../tests/h';
|
|
7
|
-
import { Categories as newCategories } from '../tests/remult-3-entities';
|
|
7
|
+
import { Categories, Categories as newCategories, } from '../tests/remult-3-entities';
|
|
8
8
|
import { tasks } from '../tests/tasks';
|
|
9
9
|
import { TestDataApiResponse } from '../tests/TestDataApiResponse';
|
|
10
10
|
import { testAll, testAllDbs, TestDbs } from './db-tests-setup';
|
|
@@ -829,10 +829,50 @@ testAll('test transaction rollback', async ({ db, createEntity }) => {
|
|
|
829
829
|
});
|
|
830
830
|
fail = false;
|
|
831
831
|
}
|
|
832
|
-
catch {
|
|
832
|
+
catch (err) {
|
|
833
|
+
expect(err).toBe('error');
|
|
834
|
+
}
|
|
833
835
|
expect(await r.count()).toBe(1);
|
|
834
836
|
expect(fail).toBe(true);
|
|
835
|
-
}, false, {
|
|
837
|
+
}, false, {
|
|
838
|
+
exclude: [
|
|
839
|
+
TestDbs.inMemory,
|
|
840
|
+
TestDbs.mongoNoTrans,
|
|
841
|
+
TestDbs.restDataProvider,
|
|
842
|
+
TestDbs.webSql,
|
|
843
|
+
],
|
|
844
|
+
});
|
|
845
|
+
testAll('transactions', async ({ db, createEntity }) => {
|
|
846
|
+
let x = await createEntity(Categories);
|
|
847
|
+
await db.transaction(async (db) => {
|
|
848
|
+
let remult = new Remult(db);
|
|
849
|
+
expect(await remult.repo(Categories).count()).toBe(0);
|
|
850
|
+
});
|
|
851
|
+
}, false, {
|
|
852
|
+
exclude: [TestDbs.mongoNoTrans, TestDbs.restDataProvider, TestDbs.webSql],
|
|
853
|
+
});
|
|
854
|
+
testAll('transactions 1', async ({ db, createEntity }) => {
|
|
855
|
+
let x = await createEntity(Categories);
|
|
856
|
+
try {
|
|
857
|
+
await db.transaction(async (db) => {
|
|
858
|
+
let remult = new Remult(db);
|
|
859
|
+
await remult.repo(Categories).insert({ categoryName: 'testing' });
|
|
860
|
+
expect(await remult.repo(Categories).count()).toBe(1);
|
|
861
|
+
throw 'Fail';
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
catch (err) {
|
|
865
|
+
expect(err).toBe('Fail');
|
|
866
|
+
}
|
|
867
|
+
expect(await x.count()).toBe(0);
|
|
868
|
+
}, false, {
|
|
869
|
+
exclude: [
|
|
870
|
+
TestDbs.inMemory,
|
|
871
|
+
TestDbs.mongoNoTrans,
|
|
872
|
+
TestDbs.restDataProvider,
|
|
873
|
+
TestDbs.webSql,
|
|
874
|
+
],
|
|
875
|
+
});
|
|
836
876
|
testAll('test date', async ({ createEntity }) => {
|
|
837
877
|
const e = class {
|
|
838
878
|
constructor() {
|
|
@@ -879,7 +919,7 @@ testAll('test contains with names with casing', async ({ createEntity }) => {
|
|
|
879
919
|
let item = await r.findFirst({ firstName: { $contains: 'oa' } });
|
|
880
920
|
expect(item.firstName).toBe('noam');
|
|
881
921
|
}, false, {
|
|
882
|
-
exclude: [TestDbs.mongo],
|
|
922
|
+
exclude: [TestDbs.mongo, TestDbs.mongoNoTrans],
|
|
883
923
|
});
|
|
884
924
|
testAll('test live query storage', async (x) => {
|
|
885
925
|
await x.createEntity(LiveQueryStorageEntity);
|
|
@@ -1005,7 +1045,7 @@ testAll('test json structure 3', async ({ createEntity }) => {
|
|
|
1005
1045
|
expect(item.items).toEqual(['a', 'b']);
|
|
1006
1046
|
expect(await r.count({ items: { $contains: 'b' } })).toBe(1);
|
|
1007
1047
|
}, false, {
|
|
1008
|
-
exclude: [TestDbs.mongo],
|
|
1048
|
+
exclude: [TestDbs.mongo, TestDbs.mongoNoTrans],
|
|
1009
1049
|
});
|
|
1010
1050
|
testAll('test relation to number id', async ({ createEntity }) => {
|
|
1011
1051
|
const category = class {
|
|
@@ -1041,4 +1081,4 @@ testAll('test relation to number id', async ({ createEntity }) => {
|
|
|
1041
1081
|
expect(await taskRepo.count({ category: cat[0] })).toBe(2);
|
|
1042
1082
|
expect(await taskRepo.count({ category: cat[1] })).toBe(1);
|
|
1043
1083
|
expect(await taskRepo.count({ category: { $id: cat[0].id } })).toBe(2);
|
|
1044
|
-
}, false, { exclude: [TestDbs.mongo] });
|
|
1084
|
+
}, false, { exclude: [TestDbs.mongo, TestDbs.mongoNoTrans] });
|
|
@@ -23,7 +23,7 @@ export function testWebSqlImpl(key, what, focus = false) {
|
|
|
23
23
|
await what({ db: sql, remult, createEntity: async (x) => remult.repo(x) });
|
|
24
24
|
}, focus);
|
|
25
25
|
}
|
|
26
|
-
addDatabaseToTest(testWebSqlImpl);
|
|
26
|
+
addDatabaseToTest(testWebSqlImpl, TestDbs.webSql);
|
|
27
27
|
export function testRest(key, what, focus = false) {
|
|
28
28
|
itWithFocus(key + ' - Rest Provider', async () => {
|
|
29
29
|
let r = new Remult();
|
package/package.json
CHANGED
package/remult-mongo.js
CHANGED
|
@@ -28,32 +28,38 @@ var MongoDataProvider = /** @class */ (function () {
|
|
|
28
28
|
var session, db, err_1;
|
|
29
29
|
return tslib_1.__generator(this, function (_a) {
|
|
30
30
|
switch (_a.label) {
|
|
31
|
-
case 0:
|
|
31
|
+
case 0:
|
|
32
|
+
if (!this.disableTransactions) return [3 /*break*/, 2];
|
|
33
|
+
return [4 /*yield*/, action(this)];
|
|
32
34
|
case 1:
|
|
35
|
+
_a.sent();
|
|
36
|
+
return [3 /*break*/, 11];
|
|
37
|
+
case 2: return [4 /*yield*/, this.client.startSession()];
|
|
38
|
+
case 3:
|
|
33
39
|
session = _a.sent();
|
|
34
40
|
session.startTransaction();
|
|
35
41
|
db = this.client.db(this.db.databaseName);
|
|
36
|
-
_a.label =
|
|
37
|
-
case
|
|
38
|
-
_a.trys.push([
|
|
42
|
+
_a.label = 4;
|
|
43
|
+
case 4:
|
|
44
|
+
_a.trys.push([4, 7, 9, 11]);
|
|
39
45
|
return [4 /*yield*/, action(new MongoDataProvider(db, undefined, { session: session }))];
|
|
40
|
-
case
|
|
46
|
+
case 5:
|
|
41
47
|
_a.sent();
|
|
42
48
|
return [4 /*yield*/, session.commitTransaction()];
|
|
43
|
-
case
|
|
49
|
+
case 6:
|
|
44
50
|
_a.sent();
|
|
45
|
-
return [3 /*break*/,
|
|
46
|
-
case
|
|
51
|
+
return [3 /*break*/, 11];
|
|
52
|
+
case 7:
|
|
47
53
|
err_1 = _a.sent();
|
|
48
54
|
return [4 /*yield*/, session.abortTransaction()];
|
|
49
|
-
case
|
|
55
|
+
case 8:
|
|
50
56
|
_a.sent();
|
|
51
57
|
throw err_1;
|
|
52
|
-
case
|
|
53
|
-
case
|
|
58
|
+
case 9: return [4 /*yield*/, session.endSession()];
|
|
59
|
+
case 10:
|
|
54
60
|
_a.sent();
|
|
55
61
|
return [7 /*endfinally*/];
|
|
56
|
-
case
|
|
62
|
+
case 11: return [2 /*return*/];
|
|
57
63
|
}
|
|
58
64
|
});
|
|
59
65
|
});
|
|
@@ -95,7 +101,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
95
101
|
this.entity = entity;
|
|
96
102
|
this.session = session;
|
|
97
103
|
}
|
|
98
|
-
MongoEntityDataProvider.prototype.
|
|
104
|
+
MongoEntityDataProvider.prototype.translateFromDb = function (row, nameProvider) {
|
|
99
105
|
var e_1, _a;
|
|
100
106
|
var result = {};
|
|
101
107
|
try {
|
|
@@ -116,7 +122,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
116
122
|
}
|
|
117
123
|
return result;
|
|
118
124
|
};
|
|
119
|
-
MongoEntityDataProvider.prototype.
|
|
125
|
+
MongoEntityDataProvider.prototype.translateToDb = function (row, nameProvider) {
|
|
120
126
|
var e_2, _a;
|
|
121
127
|
var result = {};
|
|
122
128
|
try {
|
|
@@ -200,7 +206,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
200
206
|
_e = (_d = Promise).all;
|
|
201
207
|
return [4 /*yield*/, collection
|
|
202
208
|
.find(where, op)
|
|
203
|
-
.map(function (x) { return _this.
|
|
209
|
+
.map(function (x) { return _this.translateFromDb(x, e); })
|
|
204
210
|
.toArray()];
|
|
205
211
|
case 3: return [4 /*yield*/, _e.apply(_d, [_g.sent()])];
|
|
206
212
|
case 4: return [2 /*return*/, _g.sent()];
|
|
@@ -244,7 +250,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
244
250
|
f_1 = _e.value;
|
|
245
251
|
if (!f_1.dbReadOnly && !f_1.isServerExpression) {
|
|
246
252
|
if (keys.includes(f_1.key)) {
|
|
247
|
-
newR[f_1.key] = f_1.valueConverter.
|
|
253
|
+
newR[f_1.key] = f_1.valueConverter.toDb(data[f_1.key]);
|
|
248
254
|
}
|
|
249
255
|
}
|
|
250
256
|
}
|
|
@@ -299,13 +305,13 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
299
305
|
case 1:
|
|
300
306
|
_a = _e.sent(), collection = _a.collection, e = _a.e;
|
|
301
307
|
_c = (_b = collection).insertOne;
|
|
302
|
-
return [4 /*yield*/, this.
|
|
308
|
+
return [4 /*yield*/, this.translateToDb(data, e)];
|
|
303
309
|
case 2: return [4 /*yield*/, _c.apply(_b, [_e.sent(), {
|
|
304
310
|
session: this.session,
|
|
305
311
|
}])];
|
|
306
312
|
case 3:
|
|
307
313
|
r = _e.sent();
|
|
308
|
-
_d = this.
|
|
314
|
+
_d = this.translateFromDb;
|
|
309
315
|
return [4 /*yield*/, collection.findOne({ _id: r.insertedId }, { session: this.session })];
|
|
310
316
|
case 4: return [4 /*yield*/, _d.apply(this, [_e.sent(), e])];
|
|
311
317
|
case 5: return [2 /*return*/, _e.sent()];
|
|
@@ -2,5 +2,6 @@ import { dbTestWhatSignature } from '../shared-tests/db-tests-setup';
|
|
|
2
2
|
export declare const testKnexPGSqlImpl: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
3
3
|
export declare const mySqlTest: import("../shared-tests/db-tests-setup").dbTestMethodSignature;
|
|
4
4
|
export declare function testPostgresImplementation(key: string, what: dbTestWhatSignature, focus?: boolean): void;
|
|
5
|
-
export declare
|
|
5
|
+
export declare const testMongo: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
6
|
+
export declare const testMongoNoTrans: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
6
7
|
import '../shared-tests';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.testMongo = exports.testPostgresImplementation = exports.mySqlTest = exports.testKnexPGSqlImpl = void 0;
|
|
3
|
+
exports.testMongoNoTrans = exports.testMongo = exports.testPostgresImplementation = exports.mySqlTest = exports.testKnexPGSqlImpl = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var context_1 = require("../context");
|
|
6
6
|
var remult_knex_1 = require("../../remult-knex");
|
|
@@ -139,103 +139,134 @@ exports.testPostgresImplementation = testPostgresImplementation;
|
|
|
139
139
|
db_tests_setup_1.addDatabaseToTest(testPostgresImplementation);
|
|
140
140
|
var remult_3_entities_1 = require("../tests/remult-3-entities");
|
|
141
141
|
var remult_mongo_1 = require("../../remult-mongo");
|
|
142
|
-
|
|
143
|
-
var
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
case 1:
|
|
150
|
-
x = _b.sent();
|
|
151
|
-
return [4 /*yield*/, db.transaction(function (db) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
152
|
-
var remult, _a;
|
|
153
|
-
return tslib_1.__generator(this, function (_b) {
|
|
154
|
-
switch (_b.label) {
|
|
155
|
-
case 0:
|
|
156
|
-
remult = new context_1.Remult(db);
|
|
157
|
-
_a = expect;
|
|
158
|
-
return [4 /*yield*/, remult.repo(remult_3_entities_1.Categories).count()];
|
|
159
|
-
case 1:
|
|
160
|
-
_a.apply(void 0, [_b.sent()]).toBe(0);
|
|
161
|
-
return [2 /*return*/];
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
}); })];
|
|
165
|
-
case 2:
|
|
166
|
-
_b.sent();
|
|
167
|
-
return [2 /*return*/];
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
var mongoConnectionString = process.env['MONGO_TEST_URL']; //"mongodb://localhost:27017/local"
|
|
173
|
-
var client = new mongodb_1.MongoClient(mongoConnectionString);
|
|
174
|
-
var done;
|
|
175
|
-
var mongoDbPromise = client.connect().then(function (c) {
|
|
176
|
-
done = c;
|
|
177
|
-
return c.db('test');
|
|
178
|
-
});
|
|
179
|
-
afterAll(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
180
|
-
return tslib_1.__generator(this, function (_a) {
|
|
181
|
-
if (done)
|
|
182
|
-
done.close();
|
|
183
|
-
return [2 /*return*/];
|
|
142
|
+
exports.testMongo = (function () {
|
|
143
|
+
var mongoConnectionString = process.env['MONGO_TEST_URL']; //"mongodb://localhost:27017/local"
|
|
144
|
+
var client = new mongodb_1.MongoClient(mongoConnectionString);
|
|
145
|
+
var done;
|
|
146
|
+
var mongoDbPromise = client.connect().then(function (c) {
|
|
147
|
+
done = c;
|
|
148
|
+
return c.db('test');
|
|
184
149
|
});
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
150
|
+
afterAll(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
151
|
+
return tslib_1.__generator(this, function (_a) {
|
|
152
|
+
if (done)
|
|
153
|
+
done.close();
|
|
154
|
+
return [2 /*return*/];
|
|
155
|
+
});
|
|
156
|
+
}); });
|
|
157
|
+
return function testMongo(key, what, focus) {
|
|
191
158
|
var _this = this;
|
|
159
|
+
if (focus === void 0) { focus = false; }
|
|
160
|
+
db_tests_setup_1.itWithFocus(key + ' - mongo', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
161
|
+
var mongoDb, db, remult;
|
|
162
|
+
var _this = this;
|
|
163
|
+
return tslib_1.__generator(this, function (_a) {
|
|
164
|
+
switch (_a.label) {
|
|
165
|
+
case 0: return [4 /*yield*/, mongoDbPromise];
|
|
166
|
+
case 1:
|
|
167
|
+
mongoDb = _a.sent();
|
|
168
|
+
db = new remult_mongo_1.MongoDataProvider(mongoDb, client);
|
|
169
|
+
remult = new context_1.Remult(db);
|
|
170
|
+
return [4 /*yield*/, what({
|
|
171
|
+
db: db,
|
|
172
|
+
remult: remult,
|
|
173
|
+
createEntity: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
174
|
+
var repo, _a, _b;
|
|
175
|
+
return tslib_1.__generator(this, function (_c) {
|
|
176
|
+
switch (_c.label) {
|
|
177
|
+
case 0:
|
|
178
|
+
repo = remult.repo(entity);
|
|
179
|
+
_b = (_a = mongoDb)
|
|
180
|
+
.collection;
|
|
181
|
+
return [4 /*yield*/, repo.metadata.getDbName()];
|
|
182
|
+
case 1: return [4 /*yield*/, _b.apply(_a, [_c.sent()])
|
|
183
|
+
.deleteMany({})];
|
|
184
|
+
case 2:
|
|
185
|
+
_c.sent();
|
|
186
|
+
return [2 /*return*/, repo];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}); },
|
|
190
|
+
})];
|
|
191
|
+
case 2:
|
|
192
|
+
_a.sent();
|
|
193
|
+
return [2 /*return*/];
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}); }, focus);
|
|
197
|
+
};
|
|
198
|
+
})();
|
|
199
|
+
exports.testMongoNoTrans = (function () {
|
|
200
|
+
var mongoConnectionString = 'mongodb://localhost:27017/local';
|
|
201
|
+
var client = new mongodb_1.MongoClient(mongoConnectionString);
|
|
202
|
+
var done;
|
|
203
|
+
var mongoDbPromise = client.connect().then(function (c) {
|
|
204
|
+
done = c;
|
|
205
|
+
return c.db('test');
|
|
206
|
+
});
|
|
207
|
+
afterAll(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
192
208
|
return tslib_1.__generator(this, function (_a) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
mongoDb = _a.sent();
|
|
197
|
-
db = new remult_mongo_1.MongoDataProvider(mongoDb, client);
|
|
198
|
-
remult = new context_1.Remult(db);
|
|
199
|
-
return [4 /*yield*/, what({
|
|
200
|
-
db: db,
|
|
201
|
-
remult: remult,
|
|
202
|
-
createEntity: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
203
|
-
var repo, _a, _b;
|
|
204
|
-
return tslib_1.__generator(this, function (_c) {
|
|
205
|
-
switch (_c.label) {
|
|
206
|
-
case 0:
|
|
207
|
-
repo = remult.repo(entity);
|
|
208
|
-
_b = (_a = mongoDb)
|
|
209
|
-
.collection;
|
|
210
|
-
return [4 /*yield*/, repo.metadata.getDbName()];
|
|
211
|
-
case 1: return [4 /*yield*/, _b.apply(_a, [_c.sent()])
|
|
212
|
-
.deleteMany({})];
|
|
213
|
-
case 2:
|
|
214
|
-
_c.sent();
|
|
215
|
-
return [2 /*return*/, repo];
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
}); },
|
|
219
|
-
})];
|
|
220
|
-
case 2:
|
|
221
|
-
_a.sent();
|
|
222
|
-
return [2 /*return*/];
|
|
223
|
-
}
|
|
209
|
+
if (done)
|
|
210
|
+
done.close();
|
|
211
|
+
return [2 /*return*/];
|
|
224
212
|
});
|
|
225
|
-
}); }
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
213
|
+
}); });
|
|
214
|
+
return function testMongo(key, what, focus) {
|
|
215
|
+
var _this = this;
|
|
216
|
+
if (focus === void 0) { focus = false; }
|
|
217
|
+
db_tests_setup_1.itWithFocus(key + ' - ' + db_tests_setup_1.TestDbs.mongoNoTrans, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
218
|
+
var mongoDb, db, remult;
|
|
219
|
+
var _this = this;
|
|
220
|
+
return tslib_1.__generator(this, function (_a) {
|
|
221
|
+
switch (_a.label) {
|
|
222
|
+
case 0: return [4 /*yield*/, mongoDbPromise];
|
|
223
|
+
case 1:
|
|
224
|
+
mongoDb = _a.sent();
|
|
225
|
+
db = new remult_mongo_1.MongoDataProvider(mongoDb, client, {
|
|
226
|
+
disableTransactions: true,
|
|
227
|
+
});
|
|
228
|
+
remult = new context_1.Remult(db);
|
|
229
|
+
return [4 /*yield*/, what({
|
|
230
|
+
db: db,
|
|
231
|
+
remult: remult,
|
|
232
|
+
createEntity: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
233
|
+
var repo, _a, _b;
|
|
234
|
+
return tslib_1.__generator(this, function (_c) {
|
|
235
|
+
switch (_c.label) {
|
|
236
|
+
case 0:
|
|
237
|
+
repo = remult.repo(entity);
|
|
238
|
+
_b = (_a = mongoDb)
|
|
239
|
+
.collection;
|
|
240
|
+
return [4 /*yield*/, repo.metadata.getDbName()];
|
|
241
|
+
case 1: return [4 /*yield*/, _b.apply(_a, [_c.sent()])
|
|
242
|
+
.deleteMany({})];
|
|
243
|
+
case 2:
|
|
244
|
+
_c.sent();
|
|
245
|
+
return [2 /*return*/, repo];
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}); },
|
|
249
|
+
})];
|
|
250
|
+
case 2:
|
|
251
|
+
_a.sent();
|
|
252
|
+
return [2 /*return*/];
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}); }, focus);
|
|
256
|
+
};
|
|
257
|
+
})();
|
|
258
|
+
db_tests_setup_1.addDatabaseToTest(exports.testMongo, db_tests_setup_1.TestDbs.mongo);
|
|
259
|
+
db_tests_setup_1.addDatabaseToTest(exports.testMongoNoTrans, db_tests_setup_1.TestDbs.mongoNoTrans);
|
|
229
260
|
it('test mongo without transaction', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
230
|
-
var client, mongoDb, db, remult, entity, repo, _a, _b, item, e_1_1,
|
|
231
|
-
var e_1,
|
|
232
|
-
return tslib_1.__generator(this, function (
|
|
233
|
-
switch (
|
|
261
|
+
var client, mongoDb, db, remult, entity, repo, _a, _b, item, e_1_1, err_1, _c;
|
|
262
|
+
var e_1, _d;
|
|
263
|
+
return tslib_1.__generator(this, function (_e) {
|
|
264
|
+
switch (_e.label) {
|
|
234
265
|
case 0:
|
|
235
266
|
client = new mongodb_1.MongoClient('mongodb://localhost:27017/local');
|
|
236
267
|
return [4 /*yield*/, client.connect()];
|
|
237
268
|
case 1:
|
|
238
|
-
|
|
269
|
+
_e.sent();
|
|
239
270
|
mongoDb = client.db('test');
|
|
240
271
|
db = new remult_mongo_1.MongoDataProvider(mongoDb, client, {
|
|
241
272
|
disableTransactions: true,
|
|
@@ -253,63 +284,160 @@ it('test mongo without transaction', function () { return tslib_1.__awaiter(void
|
|
|
253
284
|
title: remult3_1.Fields.string(),
|
|
254
285
|
});
|
|
255
286
|
repo = remult.repo(entity);
|
|
256
|
-
|
|
287
|
+
_e.label = 2;
|
|
257
288
|
case 2:
|
|
258
|
-
|
|
289
|
+
_e.trys.push([2, 8, 9, 10]);
|
|
259
290
|
return [4 /*yield*/, repo.find()];
|
|
260
291
|
case 3:
|
|
261
|
-
_a = tslib_1.__values.apply(void 0, [
|
|
262
|
-
|
|
292
|
+
_a = tslib_1.__values.apply(void 0, [_e.sent()]), _b = _a.next();
|
|
293
|
+
_e.label = 4;
|
|
263
294
|
case 4:
|
|
264
295
|
if (!!_b.done) return [3 /*break*/, 7];
|
|
265
296
|
item = _b.value;
|
|
266
297
|
return [4 /*yield*/, repo.delete(item)];
|
|
267
298
|
case 5:
|
|
268
|
-
|
|
269
|
-
|
|
299
|
+
_e.sent();
|
|
300
|
+
_e.label = 6;
|
|
270
301
|
case 6:
|
|
271
302
|
_b = _a.next();
|
|
272
303
|
return [3 /*break*/, 4];
|
|
273
304
|
case 7: return [3 /*break*/, 10];
|
|
274
305
|
case 8:
|
|
275
|
-
e_1_1 =
|
|
306
|
+
e_1_1 = _e.sent();
|
|
276
307
|
e_1 = { error: e_1_1 };
|
|
277
308
|
return [3 /*break*/, 10];
|
|
278
309
|
case 9:
|
|
279
310
|
try {
|
|
280
|
-
if (_b && !_b.done && (
|
|
311
|
+
if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
|
|
281
312
|
}
|
|
282
313
|
finally { if (e_1) throw e_1.error; }
|
|
283
314
|
return [7 /*endfinally*/];
|
|
284
315
|
case 10: return [4 /*yield*/, repo.insert({ id: 1, title: 'a' })];
|
|
285
316
|
case 11:
|
|
286
|
-
|
|
287
|
-
|
|
317
|
+
_e.sent();
|
|
318
|
+
_e.label = 12;
|
|
288
319
|
case 12:
|
|
289
|
-
|
|
290
|
-
return [4 /*yield*/, db.transaction(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
320
|
+
_e.trys.push([12, 14, , 15]);
|
|
321
|
+
return [4 /*yield*/, db.transaction(function (dbWithTrans) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
291
322
|
return tslib_1.__generator(this, function (_a) {
|
|
292
323
|
switch (_a.label) {
|
|
293
|
-
case 0: return [4 /*yield*/, repo.insert({ id: 2, title: 'b' })];
|
|
324
|
+
case 0: return [4 /*yield*/, new context_1.Remult(dbWithTrans).repo(entity).insert({ id: 2, title: 'b' })];
|
|
294
325
|
case 1:
|
|
295
326
|
_a.sent();
|
|
296
|
-
throw
|
|
327
|
+
throw 'Error';
|
|
297
328
|
}
|
|
298
329
|
});
|
|
299
330
|
}); })];
|
|
300
331
|
case 13:
|
|
301
|
-
|
|
332
|
+
_e.sent();
|
|
302
333
|
return [3 /*break*/, 15];
|
|
303
334
|
case 14:
|
|
304
|
-
|
|
335
|
+
err_1 = _e.sent();
|
|
336
|
+
expect(err_1).toBe('Error');
|
|
305
337
|
return [3 /*break*/, 15];
|
|
306
338
|
case 15:
|
|
307
|
-
|
|
339
|
+
_c = expect;
|
|
308
340
|
return [4 /*yield*/, repo.count()];
|
|
309
341
|
case 16:
|
|
310
|
-
|
|
342
|
+
_c.apply(void 0, [_e.sent()]).toBe(2);
|
|
311
343
|
return [2 /*return*/];
|
|
312
344
|
}
|
|
313
345
|
});
|
|
314
346
|
}); });
|
|
347
|
+
exports.testMongoNoTrans('transactions mongo no trans', function (_a) {
|
|
348
|
+
var db = _a.db, createEntity = _a.createEntity;
|
|
349
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
350
|
+
var x, err_2, _b;
|
|
351
|
+
return tslib_1.__generator(this, function (_c) {
|
|
352
|
+
switch (_c.label) {
|
|
353
|
+
case 0: return [4 /*yield*/, createEntity(remult_3_entities_1.Categories)];
|
|
354
|
+
case 1:
|
|
355
|
+
x = _c.sent();
|
|
356
|
+
_c.label = 2;
|
|
357
|
+
case 2:
|
|
358
|
+
_c.trys.push([2, 4, , 5]);
|
|
359
|
+
return [4 /*yield*/, db.transaction(function (db) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
360
|
+
var remult, _a;
|
|
361
|
+
return tslib_1.__generator(this, function (_b) {
|
|
362
|
+
switch (_b.label) {
|
|
363
|
+
case 0:
|
|
364
|
+
remult = new context_1.Remult(db);
|
|
365
|
+
return [4 /*yield*/, remult.repo(remult_3_entities_1.Categories).insert({ categoryName: 'testing' })];
|
|
366
|
+
case 1:
|
|
367
|
+
_b.sent();
|
|
368
|
+
_a = expect;
|
|
369
|
+
return [4 /*yield*/, remult.repo(remult_3_entities_1.Categories).count()];
|
|
370
|
+
case 2:
|
|
371
|
+
_a.apply(void 0, [_b.sent()]).toBe(1);
|
|
372
|
+
throw 'Fail';
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
}); })];
|
|
376
|
+
case 3:
|
|
377
|
+
_c.sent();
|
|
378
|
+
return [3 /*break*/, 5];
|
|
379
|
+
case 4:
|
|
380
|
+
err_2 = _c.sent();
|
|
381
|
+
expect(err_2).toBe('Fail');
|
|
382
|
+
return [3 /*break*/, 5];
|
|
383
|
+
case 5:
|
|
384
|
+
_b = expect;
|
|
385
|
+
return [4 /*yield*/, x.count()];
|
|
386
|
+
case 6:
|
|
387
|
+
_b.apply(void 0, [_c.sent()]).toBe(1);
|
|
388
|
+
return [2 /*return*/];
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
}, false);
|
|
393
|
+
exports.testMongoNoTrans('test Dates', function (_a) {
|
|
394
|
+
var createEntity = _a.createEntity;
|
|
395
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
396
|
+
var c, r, x, client, mongoDb, _b, _c, _d, _e, _f, _g;
|
|
397
|
+
return tslib_1.__generator(this, function (_h) {
|
|
398
|
+
switch (_h.label) {
|
|
399
|
+
case 0:
|
|
400
|
+
c = /** @class */ (function () {
|
|
401
|
+
function class_2() {
|
|
402
|
+
}
|
|
403
|
+
return class_2;
|
|
404
|
+
}());
|
|
405
|
+
DecoratorReplacer_1.describeClass(c, remult3_1.Entity('test_dates_on_mongo'), {
|
|
406
|
+
id: remult3_1.Fields.integer(),
|
|
407
|
+
date: remult3_1.Fields.date(),
|
|
408
|
+
});
|
|
409
|
+
return [4 /*yield*/, createEntity(c)];
|
|
410
|
+
case 1:
|
|
411
|
+
r = _h.sent();
|
|
412
|
+
return [4 /*yield*/, r.insert({ id: 1, date: new Date(1976, 5, 16) })];
|
|
413
|
+
case 2:
|
|
414
|
+
x = _h.sent();
|
|
415
|
+
client = new mongodb_1.MongoClient('mongodb://localhost:27017/local');
|
|
416
|
+
return [4 /*yield*/, client.connect()];
|
|
417
|
+
case 3:
|
|
418
|
+
_h.sent();
|
|
419
|
+
mongoDb = client.db('test');
|
|
420
|
+
_b = expect;
|
|
421
|
+
_d = (_c = mongoDb).collection;
|
|
422
|
+
return [4 /*yield*/, r.metadata.getDbName()];
|
|
423
|
+
case 4: return [4 /*yield*/, _d.apply(_c, [_h.sent()]).findOne()];
|
|
424
|
+
case 5:
|
|
425
|
+
_b.apply(void 0, [(_h.sent())
|
|
426
|
+
.date instanceof Date]).toBe(true);
|
|
427
|
+
x.date = new Date(1978, 2, 15);
|
|
428
|
+
return [4 /*yield*/, r.save(x)];
|
|
429
|
+
case 6:
|
|
430
|
+
_h.sent();
|
|
431
|
+
_e = expect;
|
|
432
|
+
_g = (_f = mongoDb).collection;
|
|
433
|
+
return [4 /*yield*/, r.metadata.getDbName()];
|
|
434
|
+
case 7: return [4 /*yield*/, _g.apply(_f, [_h.sent()]).findOne()];
|
|
435
|
+
case 8:
|
|
436
|
+
_e.apply(void 0, [(_h.sent())
|
|
437
|
+
.date instanceof Date]).toBe(true);
|
|
438
|
+
return [2 /*return*/];
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
}, false);
|
|
315
443
|
require("../shared-tests");
|
|
@@ -12,7 +12,9 @@ export declare function addDatabaseToTest(tester: dbTestMethodSignature, key?: s
|
|
|
12
12
|
export declare function testInMemory(key: string, what: dbTestWhatSignature, focus?: boolean): void;
|
|
13
13
|
export declare const TestDbs: {
|
|
14
14
|
restDataProvider: string;
|
|
15
|
+
webSql: string;
|
|
15
16
|
mongo: string;
|
|
17
|
+
mongoNoTrans: string;
|
|
16
18
|
inMemory: string;
|
|
17
19
|
};
|
|
18
20
|
export declare type dbTestWhatSignature = (db: {
|
|
@@ -87,7 +87,9 @@ function testInMemory(key, what, focus) {
|
|
|
87
87
|
exports.testInMemory = testInMemory;
|
|
88
88
|
exports.TestDbs = {
|
|
89
89
|
restDataProvider: 'restDataProvider',
|
|
90
|
+
webSql: 'webSql',
|
|
90
91
|
mongo: 'mongo',
|
|
92
|
+
mongoNoTrans: 'mongoNoTrans',
|
|
91
93
|
inMemory: 'in memory',
|
|
92
94
|
};
|
|
93
95
|
addDatabaseToTest(testInMemory, exports.TestDbs.inMemory);
|
|
@@ -1814,20 +1814,20 @@ db_tests_setup_1.testAll('task with enum string', function (_a) {
|
|
|
1814
1814
|
db_tests_setup_1.testAll('test transaction rollback', function (_a) {
|
|
1815
1815
|
var db = _a.db, createEntity = _a.createEntity;
|
|
1816
1816
|
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1817
|
-
var fail, r,
|
|
1818
|
-
return tslib_1.__generator(this, function (
|
|
1819
|
-
switch (
|
|
1817
|
+
var fail, r, err_3, _b;
|
|
1818
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1819
|
+
switch (_c.label) {
|
|
1820
1820
|
case 0:
|
|
1821
1821
|
fail = true;
|
|
1822
1822
|
return [4 /*yield*/, createEntity(stam)];
|
|
1823
1823
|
case 1:
|
|
1824
|
-
r =
|
|
1824
|
+
r = _c.sent();
|
|
1825
1825
|
return [4 /*yield*/, r.insert({ title: 'task b', id: 1 })];
|
|
1826
1826
|
case 2:
|
|
1827
|
-
|
|
1828
|
-
|
|
1827
|
+
_c.sent();
|
|
1828
|
+
_c.label = 3;
|
|
1829
1829
|
case 3:
|
|
1830
|
-
|
|
1830
|
+
_c.trys.push([3, 5, , 6]);
|
|
1831
1831
|
return [4 /*yield*/, db.transaction(function (db) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1832
1832
|
var remultWithTransaction, _a;
|
|
1833
1833
|
return tslib_1.__generator(this, function (_b) {
|
|
@@ -1846,23 +1846,116 @@ db_tests_setup_1.testAll('test transaction rollback', function (_a) {
|
|
|
1846
1846
|
});
|
|
1847
1847
|
}); })];
|
|
1848
1848
|
case 4:
|
|
1849
|
-
|
|
1849
|
+
_c.sent();
|
|
1850
1850
|
fail = false;
|
|
1851
1851
|
return [3 /*break*/, 6];
|
|
1852
1852
|
case 5:
|
|
1853
|
-
|
|
1853
|
+
err_3 = _c.sent();
|
|
1854
|
+
expect(err_3).toBe('error');
|
|
1854
1855
|
return [3 /*break*/, 6];
|
|
1855
1856
|
case 6:
|
|
1856
|
-
|
|
1857
|
+
_b = expect;
|
|
1857
1858
|
return [4 /*yield*/, r.count()];
|
|
1858
1859
|
case 7:
|
|
1859
|
-
|
|
1860
|
+
_b.apply(void 0, [_c.sent()]).toBe(1);
|
|
1860
1861
|
expect(fail).toBe(true);
|
|
1861
1862
|
return [2 /*return*/];
|
|
1862
1863
|
}
|
|
1863
1864
|
});
|
|
1864
1865
|
});
|
|
1865
|
-
}, false, {
|
|
1866
|
+
}, false, {
|
|
1867
|
+
exclude: [
|
|
1868
|
+
db_tests_setup_1.TestDbs.inMemory,
|
|
1869
|
+
db_tests_setup_1.TestDbs.mongoNoTrans,
|
|
1870
|
+
db_tests_setup_1.TestDbs.restDataProvider,
|
|
1871
|
+
db_tests_setup_1.TestDbs.webSql,
|
|
1872
|
+
],
|
|
1873
|
+
});
|
|
1874
|
+
db_tests_setup_1.testAll('transactions', function (_a) {
|
|
1875
|
+
var db = _a.db, createEntity = _a.createEntity;
|
|
1876
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1877
|
+
var x;
|
|
1878
|
+
return tslib_1.__generator(this, function (_b) {
|
|
1879
|
+
switch (_b.label) {
|
|
1880
|
+
case 0: return [4 /*yield*/, createEntity(remult_3_entities_1.Categories)];
|
|
1881
|
+
case 1:
|
|
1882
|
+
x = _b.sent();
|
|
1883
|
+
return [4 /*yield*/, db.transaction(function (db) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1884
|
+
var remult, _a;
|
|
1885
|
+
return tslib_1.__generator(this, function (_b) {
|
|
1886
|
+
switch (_b.label) {
|
|
1887
|
+
case 0:
|
|
1888
|
+
remult = new context_1.Remult(db);
|
|
1889
|
+
_a = expect;
|
|
1890
|
+
return [4 /*yield*/, remult.repo(remult_3_entities_1.Categories).count()];
|
|
1891
|
+
case 1:
|
|
1892
|
+
_a.apply(void 0, [_b.sent()]).toBe(0);
|
|
1893
|
+
return [2 /*return*/];
|
|
1894
|
+
}
|
|
1895
|
+
});
|
|
1896
|
+
}); })];
|
|
1897
|
+
case 2:
|
|
1898
|
+
_b.sent();
|
|
1899
|
+
return [2 /*return*/];
|
|
1900
|
+
}
|
|
1901
|
+
});
|
|
1902
|
+
});
|
|
1903
|
+
}, false, {
|
|
1904
|
+
exclude: [db_tests_setup_1.TestDbs.mongoNoTrans, db_tests_setup_1.TestDbs.restDataProvider, db_tests_setup_1.TestDbs.webSql],
|
|
1905
|
+
});
|
|
1906
|
+
db_tests_setup_1.testAll('transactions 1', function (_a) {
|
|
1907
|
+
var db = _a.db, createEntity = _a.createEntity;
|
|
1908
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1909
|
+
var x, err_4, _b;
|
|
1910
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1911
|
+
switch (_c.label) {
|
|
1912
|
+
case 0: return [4 /*yield*/, createEntity(remult_3_entities_1.Categories)];
|
|
1913
|
+
case 1:
|
|
1914
|
+
x = _c.sent();
|
|
1915
|
+
_c.label = 2;
|
|
1916
|
+
case 2:
|
|
1917
|
+
_c.trys.push([2, 4, , 5]);
|
|
1918
|
+
return [4 /*yield*/, db.transaction(function (db) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1919
|
+
var remult, _a;
|
|
1920
|
+
return tslib_1.__generator(this, function (_b) {
|
|
1921
|
+
switch (_b.label) {
|
|
1922
|
+
case 0:
|
|
1923
|
+
remult = new context_1.Remult(db);
|
|
1924
|
+
return [4 /*yield*/, remult.repo(remult_3_entities_1.Categories).insert({ categoryName: 'testing' })];
|
|
1925
|
+
case 1:
|
|
1926
|
+
_b.sent();
|
|
1927
|
+
_a = expect;
|
|
1928
|
+
return [4 /*yield*/, remult.repo(remult_3_entities_1.Categories).count()];
|
|
1929
|
+
case 2:
|
|
1930
|
+
_a.apply(void 0, [_b.sent()]).toBe(1);
|
|
1931
|
+
throw 'Fail';
|
|
1932
|
+
}
|
|
1933
|
+
});
|
|
1934
|
+
}); })];
|
|
1935
|
+
case 3:
|
|
1936
|
+
_c.sent();
|
|
1937
|
+
return [3 /*break*/, 5];
|
|
1938
|
+
case 4:
|
|
1939
|
+
err_4 = _c.sent();
|
|
1940
|
+
expect(err_4).toBe('Fail');
|
|
1941
|
+
return [3 /*break*/, 5];
|
|
1942
|
+
case 5:
|
|
1943
|
+
_b = expect;
|
|
1944
|
+
return [4 /*yield*/, x.count()];
|
|
1945
|
+
case 6:
|
|
1946
|
+
_b.apply(void 0, [_c.sent()]).toBe(0);
|
|
1947
|
+
return [2 /*return*/];
|
|
1948
|
+
}
|
|
1949
|
+
});
|
|
1950
|
+
});
|
|
1951
|
+
}, false, {
|
|
1952
|
+
exclude: [
|
|
1953
|
+
db_tests_setup_1.TestDbs.inMemory,
|
|
1954
|
+
db_tests_setup_1.TestDbs.mongoNoTrans,
|
|
1955
|
+
db_tests_setup_1.TestDbs.restDataProvider,
|
|
1956
|
+
db_tests_setup_1.TestDbs.webSql,
|
|
1957
|
+
],
|
|
1958
|
+
});
|
|
1866
1959
|
db_tests_setup_1.testAll('test date', function (_a) {
|
|
1867
1960
|
var createEntity = _a.createEntity;
|
|
1868
1961
|
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
@@ -1968,7 +2061,7 @@ db_tests_setup_1.testAll('test contains with names with casing', function (_a) {
|
|
|
1968
2061
|
});
|
|
1969
2062
|
});
|
|
1970
2063
|
}, false, {
|
|
1971
|
-
exclude: [db_tests_setup_1.TestDbs.mongo],
|
|
2064
|
+
exclude: [db_tests_setup_1.TestDbs.mongo, db_tests_setup_1.TestDbs.mongoNoTrans],
|
|
1972
2065
|
});
|
|
1973
2066
|
db_tests_setup_1.testAll('test live query storage', function (x) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1974
2067
|
var s, entityKey, id;
|
|
@@ -2218,7 +2311,7 @@ db_tests_setup_1.testAll('test json structure 3', function (_a) {
|
|
|
2218
2311
|
});
|
|
2219
2312
|
});
|
|
2220
2313
|
}, false, {
|
|
2221
|
-
exclude: [db_tests_setup_1.TestDbs.mongo],
|
|
2314
|
+
exclude: [db_tests_setup_1.TestDbs.mongo, db_tests_setup_1.TestDbs.mongoNoTrans],
|
|
2222
2315
|
});
|
|
2223
2316
|
db_tests_setup_1.testAll('test relation to number id', function (_a) {
|
|
2224
2317
|
var createEntity = _a.createEntity;
|
|
@@ -2283,4 +2376,4 @@ db_tests_setup_1.testAll('test relation to number id', function (_a) {
|
|
|
2283
2376
|
}
|
|
2284
2377
|
});
|
|
2285
2378
|
});
|
|
2286
|
-
}, false, { exclude: [db_tests_setup_1.TestDbs.mongo] });
|
|
2379
|
+
}, false, { exclude: [db_tests_setup_1.TestDbs.mongo, db_tests_setup_1.TestDbs.mongoNoTrans] });
|
|
@@ -71,7 +71,7 @@ function testWebSqlImpl(key, what, focus) {
|
|
|
71
71
|
}); }, focus);
|
|
72
72
|
}
|
|
73
73
|
exports.testWebSqlImpl = testWebSqlImpl;
|
|
74
|
-
db_tests_setup_1.addDatabaseToTest(testWebSqlImpl);
|
|
74
|
+
db_tests_setup_1.addDatabaseToTest(testWebSqlImpl, db_tests_setup_1.TestDbs.webSql);
|
|
75
75
|
function testRest(key, what, focus) {
|
|
76
76
|
var _this = this;
|
|
77
77
|
if (focus === void 0) { focus = false; }
|