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.

membership.spec.js 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 ProfileService = require('../lib/services/profile')
  7. const MembershipService = require('../lib/services/membership')
  8. const Profile = require('../lib/models/profile')
  9. const Grouping = require('../lib/models/grouping')
  10. const Membership = require('../lib/models/membership')
  11. const Tag = require('../lib/models/tag')
  12. const ZipCode = require('../lib/models/zip-code')
  13. const Aspect = require('../lib/models/aspect')
  14. const AspectLabel = require('../lib/models/aspect_label')
  15. /**
  16. * Route parameters
  17. */
  18. const params = {
  19. profile_id: 1,
  20. }
  21. const mockReturn = {
  22. profile: {
  23. profile_id: 99,
  24. user: {},
  25. responses: [],
  26. tags: [],
  27. },
  28. memberships: [{ membership_id: 1, grouping_id: 1 }],
  29. groupings: [
  30. { grouping_id: 1, profiles: [{ profile_id: 1 }, { profile_id: 99 }] },
  31. ],
  32. profiles: [
  33. {
  34. profile_id: 1,
  35. tags: [],
  36. responses: [
  37. { val: '90012', response_key_id: 7 },
  38. { val: 'foo', response_key_id: 8 },
  39. { val: 'foo', response_key_id: 9 },
  40. { val: 'foo', response_key_id: 10 },
  41. { val: 'foo', response_key_id: 11 },
  42. { val: 'foo', response_key_id: 12 },
  43. ],
  44. user: { user_name: 'phil' },
  45. },
  46. {
  47. profile_id: 2,
  48. tags: [],
  49. responses: [
  50. { val: '90012', response_key_id: 7 },
  51. { val: 'foo', response_key_id: 8 },
  52. { val: 'foo', response_key_id: 9 },
  53. { val: 'foo', response_key_id: 10 },
  54. { val: 'foo', response_key_id: 11 },
  55. { val: 'foo', response_key_id: 12 },
  56. ],
  57. user: { user_name: 'gil' },
  58. },
  59. {
  60. profile_id: 99,
  61. tags: [],
  62. responses: [
  63. { val: '90012', response_key_id: 7 },
  64. { val: 'foo', response_key_id: 8 },
  65. { val: 'foo', response_key_id: 9 },
  66. { val: 'foo', response_key_id: 10 },
  67. { val: 'foo', response_key_id: 11 },
  68. { val: 'foo', response_key_id: 12 },
  69. ],
  70. user: { user_name: 'jill' },
  71. },
  72. ],
  73. tags: [],
  74. labels: [
  75. { aspect_id: 1, a: 100, b: 100 },
  76. { aspect_id: 2, a: 100, b: 200 },
  77. { aspect_id: 3, a: 200, b: 200 },
  78. { aspect_id: 4, a: 200, b: 100 },
  79. ],
  80. aspects: [
  81. { aspect_id: 1, 1: 111, 2: 112, 3: 113, 4: 114 },
  82. { aspect_id: 2, 1: 222, 2: 222, 3: 333, 4: 222 },
  83. { aspect_id: 3, 1: 111, 2: 112, 3: 113, 4: 114 },
  84. { aspect_id: 4, 1: 111, 2: 111, 3: 111, 4: 111 },
  85. ],
  86. }
  87. const pathToTest = {
  88. method: 'GET',
  89. url: `/${params.profile_id}`,
  90. }
  91. test('path /<profile_id> should return ok', async t => {
  92. /**
  93. * Create a new server and register services,
  94. * models and routes for testing
  95. * -
  96. * NOTE: We use a mocked registerModel() and register
  97. * models manually. Normally this is handled by
  98. * Schwifty at runtime.
  99. */
  100. const server = Hapi.server()
  101. /**
  102. * Overload so we don't register any models
  103. * using the plugin call (see plugins/profile.js)
  104. * and Manually load the model we need for the test
  105. */
  106. server.registerModel = () => {}
  107. server.models = () => ({
  108. Aspect,
  109. AspectLabel,
  110. Profile,
  111. Membership,
  112. Grouping,
  113. Tag,
  114. })
  115. // server.registerService(ProfileService)
  116. /**
  117. * Register Routes and Services as usual
  118. */
  119. await plugin.register(server)
  120. /**
  121. * Replace Objection model methods with our own mock functions
  122. * !: Janky - might be better to temp knex sqlite instance
  123. */
  124. server.services()['profileService'] = new ProfileService(server)
  125. stub(server.models()['Tag'], 'query').returns(mockReturn.tags)
  126. stub(server.models()['AspectLabel'], 'query').returns(mockReturn.labels)
  127. stub(server.models()['Aspect'], 'query').returns(mockReturn.aspects)
  128. stub(server.models()['Grouping'], 'query').returns({
  129. whereIn: () => ({
  130. withGraphFetched: () => {
  131. return mockReturn.groupings
  132. },
  133. }),
  134. })
  135. stub(server.models()['Membership'], 'query').returns({
  136. where: () => {
  137. return mockReturn.memberships
  138. },
  139. })
  140. stub(server.models()['Profile'], 'query').returns({
  141. // Mocked for getProfile()
  142. where: () => ({
  143. first: () => ({
  144. withGraphFetched: () => ({
  145. withGraphFetched: () => ({
  146. withGraphFetched: () => mockReturn.profile,
  147. }),
  148. }),
  149. }),
  150. }),
  151. whereIn: () => ({
  152. withGraphFetched: () => ({
  153. withGraphFetched: () => ({
  154. withGraphFetched: () => mockReturn.profiles,
  155. }),
  156. }),
  157. }),
  158. })
  159. /**
  160. * Test the server with registered models and services
  161. */
  162. const { payload } = await server.inject(pathToTest)
  163. const res = JSON.parse(payload)
  164. t.deepEqual(res.ok, true)
  165. t.deepEqual(res.data.length, 1)
  166. t.deepEqual(res.data[0].grouping_id, mockReturn.groupings[0].grouping_id)
  167. t.deepEqual(
  168. res.data[0].profile.user_name,
  169. mockReturn.groupings[0].profile.user_name,
  170. )
  171. })