nongo-driver 3.0.0 → 3.1.1

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/model.d.ts CHANGED
@@ -3,8 +3,16 @@ import CursorIterator from './cursor-iterator';
3
3
  import { CreateSearchIndex } from './interface';
4
4
  import MongoIndex from './mongo-index';
5
5
  import Nongo from './nongo';
6
+ export interface RevisionHistory {
7
+ id?: string;
8
+ revision?: string;
9
+ created?: Date;
10
+ }
6
11
  export default abstract class Model<T extends {
7
12
  _id?: ObjectId;
13
+ revision?: string;
14
+ history?: RevisionHistory[];
15
+ diffs?: any;
8
16
  } = any> {
9
17
  nongo: Nongo;
10
18
  obj: T;
@@ -13,7 +21,10 @@ export default abstract class Model<T extends {
13
21
  db: Db;
14
22
  name: string;
15
23
  dynamic: boolean;
24
+ private collectionRevision;
16
25
  constructor(nongo: Nongo, obj: T);
26
+ getCollectionRevision(): string;
27
+ protected schemaVersioningEnabled(): boolean;
17
28
  getMongoIndexes(): MongoIndex[];
18
29
  getAtlasSearchIndexes(): CreateSearchIndex[];
19
30
  validate(): Promise<string[]>;
@@ -22,9 +33,11 @@ export default abstract class Model<T extends {
22
33
  strip(parentPath: any, toStrip: any): void;
23
34
  deleteKey(path: any, obj: any): void;
24
35
  byId(id: any): Promise<this>;
36
+ getRevisions(history: RevisionHistory[]): Promise<this[]>;
37
+ getRevision(query: Filter<Document>): Promise<any>;
25
38
  find(query?: Filter<Document>, options?: FindOptions<Document>): Promise<this[]>;
26
39
  bulkWrite(operations: AnyBulkWriteOperation<Document>[], options?: BulkWriteOptions): Promise<BulkWriteResult>;
27
- findIterator(query?: Filter<Document>, options?: FindOptions<Document>): Promise<CursorIterator<this>>;
40
+ findIterator(query?: Filter<Document>, options?: FindOptions<Document>, collection?: string): Promise<CursorIterator<this>>;
28
41
  findOne(query?: Filter<Document>): Promise<this>;
29
42
  remove(query: Filter<Document>, options?: DeleteOptions): Promise<DeleteResult>;
30
43
  aggregate(pipeline: Document[], options?: AggregateOptions): Promise<any[]>;
package/dist/model.js CHANGED
@@ -12,11 +12,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  const clone_deep_1 = __importDefault(require("clone-deep"));
14
14
  const mongodb_1 = require("mongodb");
15
- const wbb_logger_1 = __importDefault(require("wbb-logger"));
15
+ const just_diff_1 = require("just-diff");
16
16
  const cursor_iterator_1 = __importDefault(require("./cursor-iterator"));
17
17
  const nongo_1 = __importDefault(require("./nongo"));
18
18
  const validator_1 = __importDefault(require("./validator"));
19
- const logger = new wbb_logger_1.default('schema-parser.ts');
19
+ const DEFAULT_PATHS = ['_id', 'revision', 'history', 'diffs'];
20
+ function excludePathsFromDiff(diff, excludedPaths = DEFAULT_PATHS) {
21
+ return diff.filter((d) => {
22
+ if (!excludedPaths.includes(d.path[0])) {
23
+ return true;
24
+ }
25
+ });
26
+ }
20
27
  class Model {
21
28
  constructor(nongo, obj) {
22
29
  this.nongo = nongo;
@@ -33,10 +40,18 @@ class Model {
33
40
  this.obj._id = new mongodb_1.ObjectId(this.obj._id);
34
41
  }
35
42
  this.collection = this.defineCollection();
43
+ this.collectionRevision =
44
+ this.schemaVersioningEnabled() ? `${this.defineCollection()}${nongo_1.default.REVISION}` : null;
36
45
  this.name = this.constructor.name;
37
46
  this.dynamic = false;
38
47
  this.initStructure();
39
48
  }
49
+ getCollectionRevision() {
50
+ return this.collectionRevision;
51
+ }
52
+ schemaVersioningEnabled() {
53
+ return false;
54
+ }
40
55
  getMongoIndexes() {
41
56
  return [];
42
57
  }
@@ -68,10 +83,27 @@ class Model {
68
83
  this.throwValidationError(err);
69
84
  }
70
85
  }
86
+ let revisionObj;
87
+ const revisionObjId = new mongodb_1.ObjectId();
88
+ if (this.collectionRevision) {
89
+ revisionObj = await this.db.collection(this.collection).findOne({ _id: this.obj._id });
90
+ this.obj.revision = nongo_1.default.revisionNumber(revisionObj === null || revisionObj === void 0 ? void 0 : revisionObj.revision);
91
+ this.obj.history = nongo_1.default.revisionHistory(revisionObj, revisionObjId);
92
+ // get diffs
93
+ if (revisionObj) {
94
+ delete this.obj.diffs;
95
+ const diffs = (0, just_diff_1.diff)(revisionObj, this.obj);
96
+ this.obj.diffs = excludePathsFromDiff(diffs);
97
+ }
98
+ }
71
99
  // Upsert
72
- await this.db
100
+ const UpsertResult = await this.db
73
101
  .collection(this.collection)
74
102
  .replaceOne({ _id: this.obj._id }, this.obj, { upsert: true });
103
+ if (UpsertResult.modifiedCount === 1 && this.collectionRevision) {
104
+ revisionObj._id = revisionObjId;
105
+ await this.db.collection(this.collectionRevision).insertOne(revisionObj);
106
+ }
75
107
  // Return the saved model
76
108
  return this;
77
109
  }
@@ -139,6 +171,20 @@ class Model {
139
171
  async byId(id) {
140
172
  return this.findOne({ _id: id });
141
173
  }
174
+ async getRevisions(history) {
175
+ const revisionIds = history.map(i => new mongodb_1.ObjectId(i.id));
176
+ return this.toArray(await this.findIterator({ _id: { $in: revisionIds } }, { sort: { revision: 'descending' } }, this.collectionRevision));
177
+ }
178
+ async getRevision(query) {
179
+ const doc = await this.db.collection(this.collectionRevision).findOne(query);
180
+ // Return null if no doc was found
181
+ if (doc == null) {
182
+ return null;
183
+ }
184
+ // Otherwise return the doc as a model
185
+ // @ts-ignore
186
+ return new this.constructor(this.nongo, doc);
187
+ }
142
188
  /*
143
189
  * @param query: A mongo db query.
144
190
  * @param options: the query options e.g. sorting, limiting results etc.
@@ -159,9 +205,9 @@ class Model {
159
205
  * @param options: the query options e.g. sorting, limiting results etc.
160
206
  * @return the results of the query as an {@link AsyncIterator}.
161
207
  */
162
- async findIterator(query = {}, options) {
208
+ async findIterator(query = {}, options, collection = this.collection) {
163
209
  query = this.prepareQuery(query);
164
- const cursor = this.db.collection(this.collection).find(query, options);
210
+ const cursor = this.db.collection(collection).find(query, options);
165
211
  return new cursor_iterator_1.default(cursor,
166
212
  // @ts-ignore
167
213
  (obj) => new this.constructor(this.nongo, obj));
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/nongo.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Db, MongoClient } from 'mongodb';
2
2
  import { Newable } from './interface';
3
- import Model from './model';
3
+ import Model, { RevisionHistory } from './model';
4
4
  import NongoParams from './nongo-params';
5
5
  import SchemaParser from './schema-parser';
6
6
  export default class Nongo {
@@ -10,11 +10,14 @@ export default class Nongo {
10
10
  mongoClient?: MongoClient;
11
11
  private readonly poolSize?;
12
12
  static toObjectId(id: any): any;
13
+ static revisionNumber(revision: string): string;
14
+ static revisionHistory(model: any, revisionId: any): RevisionHistory[];
13
15
  schema: any;
14
16
  validKeys: any;
15
17
  noStripKeys: any;
16
18
  db: Db;
17
19
  dbName: string;
20
+ static REVISION: string;
18
21
  private instances;
19
22
  private instanceMap;
20
23
  private newGeneratorMap;
package/dist/nongo.js CHANGED
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const deep_equal_1 = __importDefault(require("deep-equal"));
7
7
  const mongodb_1 = require("mongodb");
8
8
  const wbb_logger_1 = __importDefault(require("wbb-logger"));
9
+ const inc_1 = __importDefault(require("semver/functions/inc"));
9
10
  const atlas_api_1 = __importDefault(require("./atlas-api"));
10
11
  const mongo_index_1 = __importDefault(require("./mongo-index"));
11
12
  const mongo_index_set_1 = __importDefault(require("./mongo-index-set"));
@@ -26,6 +27,27 @@ class Nongo {
26
27
  }
27
28
  return id;
28
29
  }
30
+ static revisionNumber(revision) {
31
+ if (!revision) {
32
+ return '0.0.1';
33
+ }
34
+ return (0, inc_1.default)(revision, 'patch');
35
+ }
36
+ static revisionHistory(model, revisionId) {
37
+ if (!(model === null || model === void 0 ? void 0 : model.history)) {
38
+ return [];
39
+ }
40
+ else {
41
+ // we don't want to mutate the original array
42
+ const array = [...model.history];
43
+ array.push({
44
+ id: revisionId.toString(),
45
+ revision: model.revision,
46
+ created: new Date(),
47
+ });
48
+ return array;
49
+ }
50
+ }
29
51
  // {@code modelClasses} should actually be of type {@code Model[]} throws a
30
52
  // compiler error when calling {@code Class.name}
31
53
  constructor(params, modelClasses, schemaParsers, mongoClient, poolSize) {
@@ -78,6 +100,11 @@ class Nongo {
78
100
  if (!collectionNames.includes(collName)) {
79
101
  await this.db.createCollection(collName);
80
102
  }
103
+ // Create the revision collection if it doesn't exist
104
+ const revisionCollName = instance.getCollectionRevision();
105
+ if (revisionCollName && !collectionNames.includes(revisionCollName)) {
106
+ await this.db.createCollection(revisionCollName);
107
+ }
81
108
  // Add field to {@code this.newGenerator} with a function as a value that can be
82
109
  // used to init a new model
83
110
  this.newGeneratorMap[instance.name] = (obj) => {
@@ -307,4 +334,5 @@ class Nongo {
307
334
  }
308
335
  }
309
336
  exports.default = Nongo;
337
+ Nongo.REVISION = "Revision";
310
338
  //# sourceMappingURL=nongo.js.map
package/dist/nongo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"nongo.js","sourceRoot":"","sources":["../src/nongo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nongo.js","sourceRoot":"","sources":["../src/nongo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Model } from ".";
2
+ export default abstract class RevisionModel<T = any> extends Model<T> {
3
+ defineSchema(): any;
4
+ schemaVersioningEnabled(): boolean;
5
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const _1 = require(".");
4
+ class RevisionModel extends _1.Model {
5
+ defineSchema() {
6
+ return {
7
+ revision: {
8
+ type: "string",
9
+ },
10
+ history: {
11
+ type: [{
12
+ id: { type: "string" },
13
+ revision: { type: "string" },
14
+ created: { type: "date" },
15
+ }]
16
+ }
17
+ };
18
+ }
19
+ schemaVersioningEnabled() {
20
+ return true;
21
+ }
22
+ }
23
+ exports.default = RevisionModel;
24
+ //# sourceMappingURL=revision-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-model.js","sourceRoot":"","sources":["../src/revision-model.ts"],"names":[],"mappings":";;AAAA,wBAA0B;AAE1B,MAA8B,aAAuB,SAAQ,QAAQ;IAC5D,YAAY;QACjB,OAAO;YACL,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;aACf;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,CAAC;wBACL,EAAE,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;wBACpB,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;wBAC1B,OAAO,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC;qBACxB,CAAC;aACH;SACF,CAAC;IACJ,CAAC;IAEM,uBAAuB;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAnBD,gCAmBC"}
package/jest.config.js CHANGED
@@ -4,9 +4,4 @@ module.exports = {
4
4
  testMatch: [
5
5
  '**/*.test.ts'
6
6
  ],
7
- globals: {
8
- 'ts-jest': {
9
- tsConfig: 'tsconfig.test.json'
10
- }
11
- }
12
7
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nongo-driver",
3
- "version": "3.0.0",
3
+ "version": "3.1.1",
4
4
  "description": "A promise driven, schema lead, mongo driver.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -22,12 +22,14 @@
22
22
  "homepage": "https://github.com/builtbycoup/nongo#readme",
23
23
  "dependencies": {
24
24
  "clone-deep": "^4.0.1",
25
- "cmd-promise": "^1.2.0",
26
25
  "deep-equal": "^2.2.2",
26
+ "deepmerge": "^4.3.1",
27
27
  "is-date-object": "^1.0.5",
28
+ "just-diff": "^6.0.2",
28
29
  "minimist": "^1.2.8",
29
30
  "mongodb": "^5.7.0",
30
31
  "request-promise": "^4.2.6",
32
+ "semver": "^7.5.4",
31
33
  "tslint": "^5.8.0",
32
34
  "wbb-logger": "^1.0.0"
33
35
  },
package/src/model.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import clone from 'clone-deep';
2
2
  import {AggregateOptions, AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult, CountDocumentsOptions, Db, DeleteOptions, DeleteResult, Document, Filter, FindOptions, ObjectId, UpdateFilter, UpdateOptions, UpdateResult} from 'mongodb';
3
- import Logger from 'wbb-logger';
3
+ import {diff} from 'just-diff';
4
4
 
5
5
  import CursorIterator from './cursor-iterator';
6
6
  import {CreateSearchIndex} from './interface';
@@ -8,9 +8,23 @@ import MongoIndex from './mongo-index';
8
8
  import Nongo from './nongo';
9
9
  import Validator from './validator';
10
10
 
11
- const logger = new Logger('schema-parser.ts');
11
+ const DEFAULT_PATHS = ['_id', 'revision', 'history', 'diffs']
12
12
 
13
- export default abstract class Model<T extends {_id?: ObjectId} = any> {
13
+ function excludePathsFromDiff(diff, excludedPaths = DEFAULT_PATHS) {
14
+ return diff.filter((d) => {
15
+ if (!excludedPaths.includes(d.path[0])) {
16
+ return true;
17
+ }
18
+ })
19
+ }
20
+
21
+ export interface RevisionHistory {
22
+ id?: string;
23
+ revision?: string;
24
+ created?: Date;
25
+ }
26
+
27
+ export default abstract class Model<T extends {_id?: ObjectId, revision?: string, history?: RevisionHistory[], diffs?: any} = any> {
14
28
  // {@code instanceof} can be a bit funny when importing classes across
15
29
  // modules so this is an explicit type guard we can use
16
30
  public isNongoModel: true = true;
@@ -18,6 +32,7 @@ export default abstract class Model<T extends {_id?: ObjectId} = any> {
18
32
  public db: Db;
19
33
  public name: string;
20
34
  public dynamic: boolean;
35
+ private collectionRevision: string | null;
21
36
 
22
37
  constructor(public nongo: Nongo, public obj: T) {
23
38
  // Set this.db if nongo given
@@ -31,11 +46,21 @@ export default abstract class Model<T extends {_id?: ObjectId} = any> {
31
46
  }
32
47
 
33
48
  this.collection = this.defineCollection();
49
+ this.collectionRevision =
50
+ this.schemaVersioningEnabled() ? `${this.defineCollection()}${Nongo.REVISION}` : null;
34
51
  this.name = this.constructor.name;
35
52
  this.dynamic = false;
36
53
  this.initStructure();
37
54
  }
38
55
 
56
+ public getCollectionRevision (): string {
57
+ return this.collectionRevision;
58
+ }
59
+
60
+ protected schemaVersioningEnabled(): boolean {
61
+ return false;
62
+ }
63
+
39
64
  public getMongoIndexes(): MongoIndex[] {
40
65
  return [];
41
66
  }
@@ -73,11 +98,30 @@ export default abstract class Model<T extends {_id?: ObjectId} = any> {
73
98
  }
74
99
  }
75
100
 
101
+ let revisionObj;
102
+ const revisionObjId = new ObjectId();
103
+ if (this.collectionRevision) {
104
+ revisionObj = await this.db.collection(this.collection).findOne({_id: this.obj._id});
105
+ this.obj.revision = Nongo.revisionNumber(revisionObj?.revision);
106
+ this.obj.history = Nongo.revisionHistory(revisionObj, revisionObjId);
107
+
108
+ // get diffs
109
+ if (revisionObj) {
110
+ delete this.obj.diffs;
111
+ const diffs = diff(revisionObj, this.obj);
112
+ this.obj.diffs = excludePathsFromDiff(diffs);
113
+ }
114
+ }
76
115
  // Upsert
77
- await this.db
116
+ const UpsertResult = await this.db
78
117
  .collection(this.collection)
79
118
  .replaceOne({_id: this.obj._id}, this.obj, {upsert: true});
80
119
 
120
+ if (UpsertResult.modifiedCount === 1 && this.collectionRevision) {
121
+ revisionObj._id = revisionObjId;
122
+ await this.db.collection(this.collectionRevision).insertOne(revisionObj);
123
+ }
124
+
81
125
  // Return the saved model
82
126
  return this;
83
127
  }
@@ -151,6 +195,24 @@ export default abstract class Model<T extends {_id?: ObjectId} = any> {
151
195
  return this.findOne({_id: id});
152
196
  }
153
197
 
198
+ public async getRevisions (history: RevisionHistory[]) {
199
+ const revisionIds = history.map(i => new ObjectId(i.id));
200
+ return this.toArray(await this.findIterator({_id: {$in: revisionIds}}, {sort: {revision: 'descending'}}, this.collectionRevision));
201
+ }
202
+
203
+ public async getRevision (query: Filter<Document>) {
204
+ const doc = await this.db.collection(this.collectionRevision).findOne(query);
205
+
206
+ // Return null if no doc was found
207
+ if (doc == null) {
208
+ return null;
209
+ }
210
+
211
+ // Otherwise return the doc as a model
212
+ // @ts-ignore
213
+ return new this.constructor(this.nongo, doc);
214
+ }
215
+
154
216
  /*
155
217
  * @param query: A mongo db query.
156
218
  * @param options: the query options e.g. sorting, limiting results etc.
@@ -179,9 +241,10 @@ export default abstract class Model<T extends {_id?: ObjectId} = any> {
179
241
  public async findIterator(
180
242
  query: Filter<Document> = {},
181
243
  options?: FindOptions<Document>,
244
+ collection = this.collection,
182
245
  ): Promise<CursorIterator<this>> {
183
246
  query = this.prepareQuery(query);
184
- const cursor = this.db.collection(this.collection).find(query, options);
247
+ const cursor = this.db.collection(collection).find(query, options);
185
248
  return new CursorIterator<this>(
186
249
  cursor,
187
250
  // @ts-ignore
package/src/nongo.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import deepEqual from 'deep-equal';
2
2
  import {Collection, Db, MongoClient, ObjectId} from 'mongodb';
3
3
  import Logger from 'wbb-logger';
4
+ import incVersion from 'semver/functions/inc';
4
5
  import AtlasApi from './atlas-api';
5
6
  import {Newable} from './interface';
6
- import Model from './model';
7
+ import Model, { RevisionHistory } from './model';
7
8
  import MongoIndex from './mongo-index';
8
9
  import MongoIndexSet from './mongo-index-set';
9
10
  import NongoParams from './nongo-params';
@@ -28,11 +29,36 @@ export default class Nongo {
28
29
  return id;
29
30
  }
30
31
 
32
+ public static revisionNumber(revision: string): string {
33
+ if (!revision) {
34
+ return '0.0.1';
35
+ }
36
+ return incVersion(revision, 'patch');
37
+ }
38
+
39
+ public static revisionHistory(model, revisionId): RevisionHistory[] {
40
+ if (!model?.history) {
41
+ return [];
42
+ } else {
43
+ // we don't want to mutate the original array
44
+ const array = [...model.history];
45
+ array.push(
46
+ {
47
+ id: revisionId.toString(),
48
+ revision: model.revision,
49
+ created: new Date(),
50
+ }
51
+ )
52
+ return array;
53
+ }
54
+ }
55
+
31
56
  public schema: any = {};
32
57
  public validKeys: any = {};
33
58
  public noStripKeys: any = {};
34
59
  public db: Db;
35
60
  public dbName: string;
61
+ public static REVISION = "Revision";
36
62
 
37
63
  // Parallel to {@code this.modelClasses} and {@code this.schemaParsers}
38
64
  private instances: Model[];
@@ -102,6 +128,12 @@ export default class Nongo {
102
128
  await this.db.createCollection(collName);
103
129
  }
104
130
 
131
+ // Create the revision collection if it doesn't exist
132
+ const revisionCollName = instance.getCollectionRevision();
133
+ if (revisionCollName && !collectionNames.includes(revisionCollName)) {
134
+ await this.db.createCollection(revisionCollName);
135
+ }
136
+
105
137
  // Add field to {@code this.newGenerator} with a function as a value that can be
106
138
  // used to init a new model
107
139
  this.newGeneratorMap[instance.name] = (obj) => {
@@ -0,0 +1,22 @@
1
+ import { Model } from ".";
2
+
3
+ export default abstract class RevisionModel<T = any> extends Model<T> {
4
+ public defineSchema(): any {
5
+ return {
6
+ revision: {
7
+ type: "string",
8
+ },
9
+ history: {
10
+ type: [{
11
+ id: {type: "string"},
12
+ revision: {type: "string"},
13
+ created: {type: "date"},
14
+ }]
15
+ }
16
+ };
17
+ }
18
+
19
+ public schemaVersioningEnabled(): boolean {
20
+ return true;
21
+ }
22
+ }
@@ -0,0 +1,80 @@
1
+ import Logger from 'wbb-logger';
2
+ import { Nongo } from '../src';
3
+ import DatabaseHelper from './database-helper';
4
+ import DummyModelWithRevisionObj from './models/dummy-model-with-revision-obj';
5
+ import DummyModelWithRevision from './models/dummy-model-with-revision.nongo';
6
+ import DummyModel from './models/dummy-model.nongo';
7
+
8
+ const logger = new Logger('model-versioning.test.ts');
9
+
10
+ const models = [DummyModel, DummyModelWithRevision];
11
+
12
+ let nongo: Nongo;
13
+
14
+ const print = (model) => {
15
+ model.forEach((m) => console.log(JSON.stringify(m.obj, null, 2)))
16
+ }
17
+
18
+ // Catch unhanded promise rejections and log them
19
+ process.on('unhandledRejection', (reason) => {
20
+ logger.error(reason);
21
+ });
22
+
23
+ describe('Testing nongo revisioning', () => {
24
+
25
+ beforeAll(async () => {
26
+ nongo = await DatabaseHelper.getNongoInstance(models);
27
+ })
28
+
29
+ afterAll(async () => {
30
+ // remove everything
31
+ })
32
+
33
+ it('Should create revision collection on DummyModelWithRevision', async () => {
34
+ const collections = await nongo.db.collections();
35
+ const collectionsNames = collections.map(coll => coll.collectionName);
36
+ expect(collectionsNames.length).toEqual(3);
37
+ expect(collectionsNames.includes('DummyModelWithRevisionRevision')).toEqual(true)
38
+ expect(collectionsNames.includes('DummyModelRevision')).toEqual(false)
39
+ })
40
+
41
+ it('Should have revision 0.0.1', async () => {
42
+ const obj: DummyModelWithRevisionObj = {
43
+ name: 'John',
44
+ created: new Date(),
45
+ };
46
+ const obj2: DummyModelWithRevisionObj = {
47
+ name: 'Leo',
48
+ age: 35,
49
+ created: new Date(),
50
+ };
51
+ const model = await nongo.new(DummyModelWithRevision, obj).save();
52
+ const model2 = await nongo.new(DummyModelWithRevision, obj2).save();
53
+ expect(model.obj.revision).toEqual('0.0.1');
54
+ expect(model2.obj.revision).toEqual('0.0.1');
55
+ })
56
+
57
+ it('Should save revision doc in revision collection', async () => {
58
+ const model = await nongo.col(DummyModelWithRevision).findOne({name: 'John'})
59
+ model.obj.age = 30;
60
+ await model.save();
61
+ expect(model.obj.revision).toEqual('0.0.2');
62
+ const revisions = await nongo.col(DummyModelWithRevision).getRevisions(model.obj.history);
63
+ expect(revisions.length).toEqual(1);
64
+ })
65
+
66
+ it('Should save 2 revision docs in revision collection', async () => {
67
+ const model = await nongo.col(DummyModelWithRevision).findOne({name: 'John'});
68
+ model.obj.name = 'Nick';
69
+ await model.save();
70
+ const revisions = await nongo.col(DummyModelWithRevision).getRevisions(model.obj.history);
71
+ expect(revisions.length).toEqual(2);
72
+ const models = await nongo.col(DummyModelWithRevision).find();
73
+ expect(models.length).toEqual(2);
74
+ })
75
+
76
+ it('Should return revision doc', async () => {
77
+ const revision = await nongo.col(DummyModelWithRevision).getRevision({name: "John", revision: "0.0.1"});
78
+ expect(revision.obj.revision).toEqual("0.0.1");
79
+ })
80
+ })
@@ -0,0 +1,13 @@
1
+ // This file was generated using nongo-driver's TsInterfaceGenerator.
2
+ export default interface DummyModelWithRevisionObj {
3
+ 'revision'?: string;
4
+ 'history'?: Array<{
5
+ 'id'?: string;
6
+ 'revision'?: string;
7
+ 'created'?: Date;
8
+ }>;
9
+ 'created': Date;
10
+ 'name': string;
11
+ 'age'?: number;
12
+ '_id'?: any;
13
+ }
@@ -0,0 +1,22 @@
1
+ import merge from "deepmerge";
2
+ import DummyModelWithRevisionObj from './dummy-model-with-revision-obj'
3
+ import RevisionModel from '../../src/revision-model';
4
+
5
+ export default class DummyModelWithRevision extends RevisionModel<DummyModelWithRevisionObj> {
6
+ public defineSchema(): any {
7
+ return merge(super.defineSchema(),{
8
+ created: {
9
+ type: 'date',
10
+ required: true,
11
+ },
12
+ name: {
13
+ type: 'string',
14
+ unique: true,
15
+ required: true,
16
+ },
17
+ age: {
18
+ type: 'number',
19
+ }
20
+ });
21
+ }
22
+ }