Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

matchqueue.spec.js 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. 'use strict'
  2. const test = require('ava')
  3. const { stub } = require('sinon')
  4. const Hapi = require('@hapi/hapi')
  5. const plugin = require('../lib/plugins/profile')
  6. const MatchQueue = require('../lib/models/matchqueue')
  7. /**
  8. * Route parameters
  9. */
  10. const params = {
  11. profile_id: 1,
  12. target_id: 2,
  13. reinsert: true,
  14. include_profile: false,
  15. }
  16. const mockReturn = {
  17. queue: [
  18. { mocked_profile_id: 1, target_id: 2, is_deleted: false },
  19. { mocked_profile_id: 2, target_id: 3, is_deleted: false },
  20. { mocked_profile_id: 3, target_id: 1, is_deleted: false },
  21. ],
  22. }
  23. const pathToTest = {
  24. method: 'PATCH',
  25. url: `/${params.profile_id}/queue/${params.target_id}/delete?include_profile=${params.include_profile}&reinsert=${params.reinsert}`,
  26. }
  27. test('path /<profile_id>/queue/<target_id> should return ok on PATCH', async t => {
  28. /**
  29. * Create a new server and register services,
  30. * models and routes for testing
  31. * -
  32. * NOTE: We use a mocked registerModel() and register
  33. * models manually. Normally this is handled by
  34. * Schwifty at runtime.
  35. */
  36. const server = Hapi.server()
  37. /**
  38. * Overload so we don't register any models
  39. * using the plugin call (see plugins/profile.js)
  40. * and Manually load the model we need for the test
  41. */
  42. server.registerModel = () => {}
  43. server.models = () => ({ MatchQueue })
  44. /**
  45. * Register Routes and Services as usual
  46. */
  47. await plugin.register(server)
  48. /**
  49. * Replace Objection model methods with our own mock functions
  50. * !: Janky - might be better to temp knex sqlite instance
  51. */
  52. stub(server.models()['MatchQueue'], 'query').returns({
  53. // Mocked for markAsDeleted()
  54. patch: () => ({
  55. where: () => ({
  56. andWhere: () => ({
  57. first: () => ({ patch: 'bop' }),
  58. }),
  59. }),
  60. }),
  61. insert: queueRecord => {
  62. t.is(queueRecord.profile_id, params.profile_id)
  63. t.is(queueRecord.target_id, params.target_id)
  64. t.is(queueRecord.is_deleted, !params.reinsert)
  65. },
  66. // Mocked for getQueue()
  67. where: () => ({
  68. andWhere: (cmd, val) => mockReturn.queue,
  69. }),
  70. })
  71. /**
  72. * Test the server with registered models and services
  73. */
  74. const { payload } = await server.inject(pathToTest)
  75. const res = JSON.parse(payload)
  76. t.deepEqual(res.ok, true)
  77. t.deepEqual(
  78. res.data,
  79. mockReturn.queue.map(entry => entry.target_id),
  80. )
  81. })