Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

update.spec.js 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 Response = require('../lib/models/response')
  7. const ResponseKey = require('../lib/models/response-key')
  8. const ProfileService = require('../lib/services/profile')
  9. /**
  10. * Route parameters
  11. */
  12. const params = {
  13. profile_id: 38,
  14. }
  15. const mockReturn = {
  16. responses: [
  17. {
  18. response_id: 1,
  19. profile_id: 38,
  20. response_key_id: 6,
  21. val: '400',
  22. },
  23. {
  24. response_id: 2,
  25. profile_id: 38,
  26. response_key_id: 7,
  27. val: '90012',
  28. },
  29. ],
  30. }
  31. const pathToTest = {
  32. method: 'PATCH',
  33. url: `/${params.profile_id}/update/1`,
  34. payload: [
  35. {
  36. response_id: 1,
  37. profile_id: 38,
  38. response_key_id: 6,
  39. val: '999',
  40. },
  41. {
  42. response_id: 2,
  43. profile_id: 38,
  44. response_key_id: 7,
  45. val: '999',
  46. },
  47. ],
  48. }
  49. test(`path ${pathToTest.url} should return ok on ${pathToTest.method}`, async t => {
  50. /**
  51. * Create a new server and register services,
  52. * models and routes for testing
  53. * -
  54. * NOTE: We use a mocked registerModel() and register
  55. * models manually. Normally this is handled by
  56. * Schwifty at runtime.
  57. */
  58. const server = Hapi.server()
  59. /**
  60. * Overload so we don't register any models
  61. * using the plugin call (see plugins/profile.js)
  62. * and Manually load the model we need for the test
  63. */
  64. server.registerModel = () => {}
  65. server.models = () => ({ Response, ResponseKey })
  66. /**
  67. * Register mock authentication just for testing
  68. * -
  69. * Profile plugin does not do this
  70. */
  71. server.auth.scheme('jwt', () => ({
  72. authenticate: (req, h) => h.authenticated({ credentials: {} }),
  73. }))
  74. server.auth.strategy('default_jwt', 'jwt')
  75. /**
  76. * Register Routes and Services as usual
  77. */
  78. await plugin.register(server)
  79. /**
  80. * Replace Objection model methods with our own mock functions
  81. * !: Janky - might be better to temp knex sqlite instance
  82. */
  83. stub(server.models()['Response'], 'query').returns({
  84. where: () => {
  85. mockReturn.responses.forEach(res => {
  86. res.val = '999'
  87. })
  88. return mockReturn.responses
  89. },
  90. update: () => ({
  91. where: () => ({
  92. where: () => {},
  93. }),
  94. }),
  95. })
  96. /**
  97. * Test the server with registered models and services
  98. */
  99. const { payload } = await server.inject(pathToTest)
  100. const res = JSON.parse(payload)
  101. t.deepEqual(res.ok, true)
  102. t.deepEqual(res.data, mockReturn.responses)
  103. server.stop()
  104. })