From 01081db7a3002b81be0be80c222894c2a5a20086 Mon Sep 17 00:00:00 2001 From: Joey Baker Date: Thu, 27 Oct 2016 21:01:32 -0700 Subject: [PATCH] Test add destroyScope tests --- src/crud-destroy.integration.test.js | 63 ++++++++++++++++++++++++++++ test/fixtures/models/player.js | 13 ++++++ test/integration-setup.js | 4 +- 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/src/crud-destroy.integration.test.js b/src/crud-destroy.integration.test.js index 702f640..75aa965 100644 --- a/src/crud-destroy.integration.test.js +++ b/src/crud-destroy.integration.test.js @@ -4,6 +4,7 @@ import setup from '../test/integration-setup.js'; const STATUS_OK = 200; const STATUS_NOT_FOUND = 404; +const STATUS_BAD_REQUEST = 400; setup(test); @@ -112,3 +113,65 @@ test('not found /notamodel', async (t) => { const { statusCode } = await server.inject({ url, method }); t.is(statusCode, STATUS_NOT_FOUND); }); + +test('destroyScope /players/returnsOne', async (t) => { + const { server, instances, sequelize: { models: { Player } } } = t.context; + const { player1, player2 } = instances; + // this doesn't exist in our fixtures + const url = '/players/returnsOne'; + const method = 'DELETE'; + + const presentPlayers = await Player.findAll(); + const playerIds = presentPlayers.map(({ id }) => id); + t.truthy(playerIds.includes(player1.id)); + t.truthy(playerIds.includes(player2.id)); + + const { result, statusCode } = await server.inject({ url, method }); + t.is(statusCode, STATUS_OK); + t.is(result.id, player1.id); + + const nonDeletedPlayers = await Player.findAll(); + t.is(nonDeletedPlayers.length, presentPlayers.length - 1); +}); + +test('destroyScope /players/returnsNone', async (t) => { + const { server, instances, sequelize: { models: { Player } } } = t.context; + const { player1, player2 } = instances; + // this doesn't exist in our fixtures + const url = '/players/returnsNone'; + const method = 'DELETE'; + + const presentPlayers = await Player.findAll(); + const playerIds = presentPlayers.map(({ id }) => id); + t.truthy(playerIds.includes(player1.id)); + t.truthy(playerIds.includes(player2.id)); + + const { statusCode } = await server.inject({ url, method }); + t.is(statusCode, STATUS_NOT_FOUND); + + const nonDeletedPlayers = await Player.findAll(); + const nonDeletedPlayerIds = nonDeletedPlayers.map(({ id }) => id); + t.truthy(nonDeletedPlayerIds.includes(player1.id)); + t.truthy(nonDeletedPlayerIds.includes(player2.id)); +}); + +test('destroyScope invalid scope /players/invalid', async (t) => { + const { server, instances, sequelize: { models: { Player } } } = t.context; + const { player1, player2 } = instances; + // this doesn't exist in our fixtures + const url = '/players/invalid'; + const method = 'DELETE'; + + const presentPlayers = await Player.findAll(); + const playerIds = presentPlayers.map(({ id }) => id); + t.truthy(playerIds.includes(player1.id)); + t.truthy(playerIds.includes(player2.id)); + + const { statusCode } = await server.inject({ url, method }); + t.is(statusCode, STATUS_BAD_REQUEST); + + const nonDeletedPlayers = await Player.findAll(); + const nonDeletedPlayerIds = nonDeletedPlayers.map(({ id }) => id); + t.truthy(nonDeletedPlayerIds.includes(player1.id)); + t.truthy(nonDeletedPlayerIds.includes(player2.id)); +}); diff --git a/test/fixtures/models/player.js b/test/fixtures/models/player.js index 0f678b3..9753bb5 100644 --- a/test/fixtures/models/player.js +++ b/test/fixtures/models/player.js @@ -7,6 +7,7 @@ export default (sequelize, DataTypes) => { }, name: DataTypes.STRING, teamId: DataTypes.INTEGER, + active: DataTypes.BOOLEAN, }, { classMethods: { associate: (models) => { @@ -15,5 +16,17 @@ export default (sequelize, DataTypes) => { }); }, }, + scopes: { + returnsOne: { + where: { + active: true, + }, + }, + returnsNone: { + where: { + name: 'notaname', + }, + }, + }, }); }; diff --git a/test/integration-setup.js b/test/integration-setup.js index f5ae745..c895343 100644 --- a/test/integration-setup.js +++ b/test/integration-setup.js @@ -58,7 +58,9 @@ export default (test) => { 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 player1 = await Player.create({ + name: 'Pinot', teamId: team1.id, active: true, + }); const player2 = await Player.create({ name: 'Syrah', teamId: team1.id }); t.context.instances = { city1, team1, player1, player2 }; });