Skip to content

Commit 830f83a

Browse files
committed
Run shared tests from both v3 and v4 of juggler
1 parent 5c9ed78 commit 830f83a

File tree

10 files changed

+136
-61
lines changed

10 files changed

+136
-61
lines changed

.eslintignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
coverage
2+
**/node_modules/

deps/juggler-v3/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "juggler-v3",
3+
"version": "3.0.0",
4+
"dependencies": {
5+
"loopback-datasource-juggler":"3.x",
6+
"should": "^8.4.0"
7+
}
8+
}

deps/juggler-v3/test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Copyright IBM Corp. 2019. All Rights Reserved.
2+
// Node module: loopback-connector-postgresql
3+
// This file is licensed under the Artistic License 2.0.
4+
// License text available at https://opensource.org/licenses/Artistic-2.0
5+
6+
'use strict';
7+
8+
const semver = require('semver');
9+
const should = require('should');
10+
const juggler = require('loopback-datasource-juggler');
11+
const name = require('./package.json').name;
12+
13+
require('../../test/init');
14+
15+
describe(name, function() {
16+
before(function() {
17+
return global.resetDataSourceClass(juggler.DataSource);
18+
});
19+
20+
after(function() {
21+
return global.resetDataSourceClass();
22+
});
23+
24+
require('loopback-datasource-juggler/test/common.batch.js');
25+
require('loopback-datasource-juggler/test/default-scope.test.js');
26+
require('loopback-datasource-juggler/test/include.test.js');
27+
28+
// === Operation hooks ==== //
29+
30+
const suite = require('loopback-datasource-juggler/test/persistence-hooks.suite.js');
31+
32+
const DB_VERSION = process.env.MONGODB_VERSION;
33+
34+
if (!DB_VERSION) {
35+
console.log('The ENV variable MONGODB_VERSION is not set.' +
36+
' Assuming MongoDB version 2.6 or newer.');
37+
}
38+
39+
const DB_HAS_2_6_FEATURES = (!DB_VERSION ||
40+
semver.satisfies(DB_VERSION, '>=2.6.0'));
41+
42+
const customConfig = Object.assign({}, global.config, {
43+
enableOptimisedFindOrCreate: DB_HAS_2_6_FEATURES,
44+
});
45+
46+
suite(global.getDataSource(customConfig, juggler.DataSource), should, {
47+
replaceOrCreateReportsNewInstance: DB_HAS_2_6_FEATURES,
48+
});
49+
});

deps/juggler-v4/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "juggler-v4",
3+
"version": "4.0.0",
4+
"dependencies": {
5+
"loopback-datasource-juggler":"4.x",
6+
"should": "^13.2.3"
7+
}
8+
}

deps/juggler-v4/test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Copyright IBM Corp. 2019. All Rights Reserved.
2+
// Node module: loopback-connector-postgresql
3+
// This file is licensed under the Artistic License 2.0.
4+
// License text available at https://opensource.org/licenses/Artistic-2.0
5+
6+
'use strict';
7+
8+
const semver = require('semver');
9+
const should = require('should');
10+
const juggler = require('loopback-datasource-juggler');
11+
const name = require('./package.json').name;
12+
13+
require('../../test/init');
14+
15+
describe(name, function() {
16+
before(function() {
17+
return global.resetDataSourceClass(juggler.DataSource);
18+
});
19+
20+
after(function() {
21+
return global.resetDataSourceClass();
22+
});
23+
24+
require('loopback-datasource-juggler/test/common.batch.js');
25+
require('loopback-datasource-juggler/test/default-scope.test.js');
26+
require('loopback-datasource-juggler/test/include.test.js');
27+
28+
// === Operation hooks ==== //
29+
30+
const suite = require('loopback-datasource-juggler/test/persistence-hooks.suite.js');
31+
32+
const DB_VERSION = process.env.MONGODB_VERSION;
33+
34+
if (!DB_VERSION) {
35+
console.log('The ENV variable MONGODB_VERSION is not set.' +
36+
' Assuming MongoDB version 2.6 or newer.');
37+
}
38+
39+
const DB_HAS_2_6_FEATURES = (!DB_VERSION ||
40+
semver.satisfies(DB_VERSION, '>=2.6.0'));
41+
42+
const customConfig = Object.assign({}, global.config, {
43+
enableOptimisedFindOrCreate: DB_HAS_2_6_FEATURES,
44+
});
45+
46+
suite(global.getDataSource(customConfig, juggler.DataSource), should, {
47+
replaceOrCreateReportsNewInstance: DB_HAS_2_6_FEATURES,
48+
});
49+
});

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"scripts": {
1111
"benchmarks": "make benchmarks",
1212
"leak-detection": "make leak-detection",
13-
"test": "mocha",
13+
"test": "mocha test/*.test.js node_modules/juggler-v3/test.js node_modules/juggler-v4/test.js",
1414
"lint": "eslint .",
1515
"posttest": "npm run lint"
1616
},
@@ -39,7 +39,9 @@
3939
"bluebird": "^3.5.4",
4040
"eslint": "^5.1.0",
4141
"eslint-config-loopback": "^10.0.0",
42-
"loopback-datasource-juggler": "^3.23.0",
42+
"juggler-v3": "file:./deps/juggler-v3",
43+
"juggler-v4": "file:./deps/juggler-v4",
44+
"loopback-datasource-juggler": "^3.0.0 || ^4.0.0",
4345
"mocha": "^5.2.0",
4446
"rc": "^1.2.8",
4547
"semver": "^5.5.1",

test/imported.test.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

test/init.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
module.exports = require('should');
99

10-
var DataSource = require('loopback-datasource-juggler').DataSource;
10+
var juggler = require('loopback-datasource-juggler');
11+
var DataSource = juggler.DataSource;
1112

1213
var TEST_ENV = process.env.TEST_ENV || 'test';
1314
var config = require('rc')('loopback', {test: {mongodb: {}}})[TEST_ENV]
@@ -24,15 +25,24 @@ config = {
2425

2526
global.config = config;
2627

27-
global.getDataSource = global.getSchema = function(customConfig) {
28-
var db = new DataSource(require('../'), customConfig || config);
28+
var db;
29+
global.getDataSource = global.getSchema = function(customConfig, customClass) {
30+
const ctor = customClass || DataSource;
31+
db = new ctor(require('../'), customConfig || config);
2932
db.log = function(a) {
3033
console.log(a);
3134
};
3235

3336
return db;
3437
};
3538

39+
global.resetDataSourceClass = function(ctor) {
40+
DataSource = ctor || juggler.DataSource;
41+
var promise = db ? db.disconnect() : Promise.resolve();
42+
db = undefined;
43+
return promise;
44+
};
45+
3646
global.connectorCapabilities = {
3747
ilike: false,
3848
nilike: false,

test/mongodb.test.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,9 @@ describe('mongodb connector', function() {
371371
});
372372

373373
it('ignores invalid option', function(done) {
374-
var configWithInvalidOption = global.config;
375-
configWithInvalidOption.invalidOption = 'invalid';
374+
var configWithInvalidOption = Object.assign({}, global.config, {
375+
invalidOption: 'invalid',
376+
});
376377
var ds = global.getDataSource(configWithInvalidOption);
377378
ds.ping(function(err) {
378379
if (err) return done(err);
@@ -393,7 +394,7 @@ describe('mongodb connector', function() {
393394
it('should prioritize to the database given in the url property', function(done) {
394395
var cfg = JSON.parse(JSON.stringify(global.config));
395396
var testDb = 'lb-ds-overriden-test-1';
396-
cfg.url = 'mongodb://' + cfg.hostname + ':' + cfg.port + '/' + testDb;
397+
cfg.url = 'mongodb://' + cfg.host + ':' + cfg.port + '/' + testDb;
397398
var ds = global.getDataSource(cfg);
398399
ds.once('connected', function() {
399400
var db = ds.connector.db;

test/persistence-hooks.test.js

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)