You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

membership-join.spec.js 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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/membership')
  6. const Grouping = require('../lib/models/grouping')
  7. const Membership = require('../lib/models/membership')
  8. const ProfileService = require('../lib/services/profile')
  9. const params = {
  10. profile_id: 3
  11. }
  12. const mockReturn = {
  13. memberships: [
  14. { membership_id: 1, grouping_id: 1, is_active: false, profile_id: 3},
  15. { membership_id: 2, grouping_id: 2, is_active: false, profile_id: 1},
  16. { membership_id: 4, grouping_id: 3, is_active: false, profile_id: 2},
  17. ],
  18. hasMatch: true,
  19. groupings: [
  20. { grouping_id: 1, profiles: [{ profile_id: 1 }, { profile_id: 3 }] },
  21. { grouping_id: 2, profiles: [{ profile_id: 2 }, { profile_id: 1 }] },
  22. ]
  23. }
  24. const pathToTest = {
  25. method: 'POST',
  26. url: `/${params.profile_id}/join`,
  27. payload: {
  28. grouping_id: 3,
  29. grouping_name: 'test_match',
  30. grouping_type: 'test_group',
  31. target_id: 1,
  32. role: 'participant'
  33. },
  34. }
  35. test(`path ${pathToTest.url} should return ok on POST`, async t => {
  36. console.log('-------------------------------\n')
  37. const server = Hapi.server()
  38. server.registerModel = () => {}
  39. server.models = () => ({
  40. Grouping,
  41. Membership,
  42. })
  43. await plugin.register(server)
  44. server.services()['profileService'] = new ProfileService(server)
  45. /**
  46. * TODO: adjust stubs to mock joinGrouping more closely
  47. */
  48. stub(server.models()['Grouping'], 'query').returns({
  49. whereIn: () => {
  50. return mockReturn.groupings
  51. },
  52. })
  53. stub(server.models()['Membership'], 'query').returns({
  54. where: (pid) => {
  55. console.log('pid', pid)
  56. if(pid == 'membership_id') {
  57. return {
  58. where: () => ({
  59. patch: () => {}
  60. })
  61. }
  62. }
  63. return mockReturn.memberships.filter(membership => {
  64. return membership.profile_id == pid.profile_id
  65. })
  66. },
  67. insert: () => {
  68. mockReturn.memberships.push({ membership_id: 3, grouping_id: 3, is_active: true })
  69. },
  70. whereIn: () => {
  71. return mockReturn.memberships
  72. },
  73. })
  74. /**
  75. * Test the server with registered models and services
  76. */
  77. const { payload } = await server.inject(pathToTest)
  78. console.log('payload', payload)
  79. const res = JSON.parse(payload)
  80. t.deepEqual(res.ok, true)
  81. t.deepEqual(res.data, mockReturn)
  82. server.stop()
  83. })