Add integration tests #27
18
test/fixtures/models/city.js
vendored
Normal file
18
test/fixtures/models/city.js
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
export default (sequelize, DataTypes) => {
|
||||
return sequelize.define('City', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
primaryKey: true,
|
||||
autoIncrement: true,
|
||||
},
|
||||
name: DataTypes.STRING,
|
||||
}, {
|
||||
classMethods: {
|
||||
associate: (models) => {
|
||||
models.City.hasMany(models.Team, {
|
||||
foreignKey: { name: 'cityId' },
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
19
test/fixtures/models/player.js
vendored
Normal file
19
test/fixtures/models/player.js
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
export default (sequelize, DataTypes) => {
|
||||
return sequelize.define('Player', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
primaryKey: true,
|
||||
autoIncrement: true,
|
||||
},
|
||||
name: DataTypes.STRING,
|
||||
teamId: DataTypes.INTEGER,
|
||||
}, {
|
||||
classMethods: {
|
||||
associate: (models) => {
|
||||
models.Player.belongsTo(models.Team, {
|
||||
foreignKey: { name: 'teamId' },
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
22
test/fixtures/models/team.js
vendored
Normal file
22
test/fixtures/models/team.js
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
export default (sequelize, DataTypes) => {
|
||||
return sequelize.define('Team', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
primaryKey: true,
|
||||
autoIncrement: true,
|
||||
},
|
||||
name: DataTypes.STRING,
|
||||
cityId: DataTypes.INTEGER,
|
||||
}, {
|
||||
classMethods: {
|
||||
associate: (models) => {
|
||||
models.Team.belongsTo(models.City, {
|
||||
foreignKey: { name: 'cityId' },
|
||||
});
|
||||
models.Team.hasMany(models.Player, {
|
||||
foreignKey: { name: 'teamId' },
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
70
test/integration-setup.js
Normal file
70
test/integration-setup.js
Normal file
@ -0,0 +1,70 @@
|
||||
import hapi from 'hapi';
|
||||
import Sequelize from 'sequelize';
|
||||
import portfinder from 'portfinder';
|
||||
import path from 'path';
|
||||
import Promise from 'bluebird';
|
||||
|
||||
const getPort = Promise.promisify(portfinder.getPort);
|
||||
const modelsPath = path.join(__dirname, 'fixtures', 'models');
|
||||
const modelsGlob = path.join(modelsPath, '**', '*.js');
|
||||
const dbName = 'db';
|
||||
|
||||
// these are what's in the fixtures dir
|
||||
const modelNames = [
|
||||
{ Singluar: 'City', singular: 'city', Plural: 'Cities', plural: 'cities' },
|
||||
{ Singluar: 'Team', singular: 'team', Plural: 'Teams', plural: 'teams' },
|
||||
{ Singluar: 'Player', singular: 'player', Plural: 'Players', plural: 'players' },
|
||||
];
|
||||
|
||||
|
||||
export default (test) => {
|
||||
test.beforeEach('get an open port', async (t) => {
|
||||
t.context.port = await getPort();
|
||||
});
|
||||
|
||||
test.beforeEach('setup server', async (t) => {
|
||||
const sequelize = t.context.sequelize = new Sequelize({
|
||||
dialect: 'sqlite',
|
||||
logging: false,
|
||||
});
|
||||
|
||||
const server = t.context.server = new hapi.Server();
|
||||
server.connection({
|
||||
host: '0.0.0.0',
|
||||
port: t.context.port,
|
||||
});
|
||||
|
||||
await server.register({
|
||||
register: require('hapi-sequelize'),
|
||||
options: {
|
||||
name: dbName,
|
||||
models: [modelsGlob],
|
||||
sequelize,
|
||||
sync: true,
|
||||
forceSync: true,
|
||||
},
|
||||
});
|
||||
|
||||
await server.register({
|
||||
register: require('../src/index.js'),
|
||||
options: {
|
||||
name: dbName,
|
||||
},
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
test.beforeEach('create data', async (t) => {
|
||||
const { Player, Team, City } = t.context.sequelize.models;
|
||||
const city1 = await City.create({ name: 'Healdsburg' });
|
||||
const team1 = await Team.create({ name: 'Baseballs', cityId: city1.id });
|
||||
const player1 = await Player.create({ name: 'Pinot', teamId: team1.id });
|
||||
const player2 = await Player.create({ name: 'Syrah', teamId: team1.id });
|
||||
t.context.instances = { city1, team1, player1, player2 };
|
||||
});
|
||||
|
||||
// kill the server so that we can exit and don't leak memory
|
||||
test.afterEach('stop the server', (t) => t.context.server.stop());
|
||||
|
||||
return { modelNames };
|
||||
};
|
Loading…
Reference in New Issue
Block a user