Test add fixtures and integration setup
This commit is contained in:
		
							
								
								
									
										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 };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Reference in New Issue
	
	Block a user