Skip to content

Commit

Permalink
fix: add tests to test suite
Browse files Browse the repository at this point in the history
  • Loading branch information
nabdelgadir committed Aug 14, 2019
1 parent 684e8ee commit d42454a
Show file tree
Hide file tree
Showing 23 changed files with 125 additions and 2 deletions.
Expand Up @@ -7,6 +7,7 @@ import {DefaultCrudRepository} from '@loopback/repository';
import {
CrudRepositoryCtor,
crudRepositoryTestSuite,
relationsRepositoryTestSuite,
} from '@loopback/repository-tests';
import {MONGODB_CONFIG, MONGODB_FEATURES} from './mongodb.datasource';

Expand All @@ -17,4 +18,11 @@ describe('MongoDB + DefaultCrudRepository', () => {
DefaultCrudRepository as CrudRepositoryCtor,
MONGODB_FEATURES,
);

relationsRepositoryTestSuite(
MONGODB_CONFIG,
// Workaround for https://github.com/microsoft/TypeScript/issues/31840
DefaultCrudRepository as CrudRepositoryCtor,
MONGODB_FEATURES,
);
});
Expand Up @@ -7,6 +7,7 @@ import {DefaultTransactionalRepository} from '@loopback/repository';
import {
CrudRepositoryCtor,
crudRepositoryTestSuite,
relationsRepositoryTestSuite,
} from '@loopback/repository-tests';
import {MYSQL_CONFIG, MYSQL_FEATURES} from './mysql.datasource';

Expand All @@ -17,4 +18,11 @@ describe('MySQL + DefaultTransactionalRepository', () => {
DefaultTransactionalRepository as CrudRepositoryCtor,
MYSQL_FEATURES,
);

relationsRepositoryTestSuite(
MYSQL_CONFIG,
// Workaround for https://github.com/microsoft/TypeScript/issues/31840
DefaultTransactionalRepository as CrudRepositoryCtor,
MYSQL_FEATURES,
);
});
Expand Up @@ -4,7 +4,11 @@
// License text available at https://opensource.org/licenses/MIT

import {DefaultCrudRepository} from '@loopback/repository';
import {CrudRepositoryCtor, crudRepositoryTestSuite} from '../..';
import {
CrudRepositoryCtor,
crudRepositoryTestSuite,
relationsRepositoryTestSuite,
} from '../..';

describe('DefaultCrudRepository + memory connector', () => {
crudRepositoryTestSuite(
Expand All @@ -19,4 +23,17 @@ describe('DefaultCrudRepository + memory connector', () => {
supportsTransactions: false,
},
);

relationsRepositoryTestSuite(
{connector: 'memory'},
// Workaround for the following TypeScript error
// Type 'DefaultCrudRepository<T, ID, {}>' is not assignable to
// type 'EntityCrudRepository<T, ID, Relations>'.
// See https://github.com/microsoft/TypeScript/issues/31840
DefaultCrudRepository as CrudRepositoryCtor,
{
idType: 'number',
supportsTransactions: false,
},
);
});
1 change: 1 addition & 0 deletions packages/repository-tests/src/index.ts
Expand Up @@ -4,6 +4,7 @@
// License text available at https://opensource.org/licenses/MIT

export * from './crud-test-suite';
export * from './relations-test-suite';
export * from './types.repository-tests';

// TODO(bajtos) Implement test suite for KeyValue repository
89 changes: 89 additions & 0 deletions packages/repository-tests/src/relations-test-suite.ts
@@ -0,0 +1,89 @@
// Copyright IBM Corp. 2019. All Rights Reserved.
// Node module: @loopback/repository-tests
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT

import {juggler} from '@loopback/repository';
import * as debugFactory from 'debug';
import * as fs from 'fs';
import * as path from 'path';
import {withCrudCtx} from './helpers.repository-tests';
import {
CrudFeatures,
CrudRepositoryCtor,
CrudTestContext,
DataSourceOptions,
} from './types.repository-tests';

const debug = debugFactory('loopback:repository-tests');

type SuiteFn = (
dataSourceOptions: DataSourceOptions,
repositoryClass: CrudRepositoryCtor,
features: CrudFeatures,
) => void;

export function relationsRepositoryTestSuite(
dataSourceOptions: DataSourceOptions,
repositoryClass: CrudRepositoryCtor,
partialFeatures: Partial<CrudFeatures>,
) {
const features: CrudFeatures = {
idType: 'string',
freeFormProperties: true,
emptyValue: undefined,
supportsTransactions: true,
...partialFeatures,
};

describe('RELATIONS Repository operations', () => {
before(
withCrudCtx(function setupContext(ctx: CrudTestContext) {
ctx.dataSourceOptions = dataSourceOptions;
ctx.repositoryClass = repositoryClass;
ctx.features = features;
}),
);
before(
withCrudCtx(function setupGlobalDataSource(ctx: CrudTestContext) {
ctx.dataSource = new juggler.DataSource(ctx.dataSourceOptions);
}),
);

const folders = ['acceptance', 'integration/repositories'];

for (const folder of folders) {
const testRoot = path.resolve(__dirname, `relations/${folder}`);
let testFiles = fs.readdirSync(testRoot);
testFiles = testFiles.filter(function(it) {
return (
(!!require.extensions[path.extname(it).toLowerCase()] &&
/\.acceptance\.[^.]+$/.test(it)) ||
(!!require.extensions[path.extname(it).toLowerCase()] &&
/\.integration\.[^.]+$/.test(it))
);
});

console.log(testFiles);

for (const ix in testFiles) {
const name = testFiles[ix];
const fullPath = path.resolve(testRoot, name);
debug('Loading RELATIONS test suite %j', fullPath);
const allExports = require(fullPath);
for (const key in allExports) {
const suite: SuiteFn = allExports[key];
if (typeof suite !== 'function') continue;
debug(
'Calling suite function %j with args',
suite.name,
dataSourceOptions,
'class ' + repositoryClass.name,
partialFeatures,
);
suite(dataSourceOptions, repositoryClass, features);
}
}
}
});
}
Expand Up @@ -10,8 +10,8 @@ import {
juggler,
repository,
} from '@loopback/repository';
import {OrderRepository} from '.';
import {Order, Shipment, ShipmentRelations} from '../models';
import {OrderRepository} from '../repositories';

export class ShipmentRepository extends DefaultCrudRepository<
Shipment,
Expand Down

0 comments on commit d42454a

Please sign in to comment.