Parcourir la source

:recycle: fix-up all backend tests

juan-auth-overpass
j il y a 2 ans
Parent
révision
8711238839

+ 0
- 1
backend/lib/routes/membership/join.js Voir le fichier

49
          */
49
          */
50
         handler: async function (request, h) {
50
         handler: async function (request, h) {
51
             try {
51
             try {
52
-                console.log('---')
53
                 const { membershipService } = request.server.services()
52
                 const { membershipService } = request.server.services()
54
 
53
 
55
                 /** Grab payload info */
54
                 /** Grab payload info */

+ 3
- 2
backend/lib/services/profile/index.js Voir le fichier

119
         // taking the info from profilesEntries
119
         // taking the info from profilesEntries
120
         // to repack into completeProfiles
120
         // to repack into completeProfiles
121
         // in same order as profileIdArray
121
         // in same order as profileIdArray
122
-        return profiler.makeOrderedCompleteProfiles(
122
+        const ordered = profiler.makeOrderedCompleteProfiles(
123
             profileIdArray,
123
             profileIdArray,
124
             profilesEntries,
124
             profilesEntries,
125
             type,
125
             type,
126
             this.tagLookup,
126
             this.tagLookup,
127
         )
127
         )
128
+        return ordered
128
     }
129
     }
129
 
130
 
130
     /**
131
     /**
293
     }
294
     }
294
 
295
 
295
     async calcProfileDistances(matchPool, distanceUnit, userZip) {
296
     async calcProfileDistances(matchPool, distanceUnit, userZip) {
296
-        await Promise.all(
297
+        return await Promise.all(
297
             matchPool.map(async profile => {
298
             matchPool.map(async profile => {
298
                 const targetZip = zipcoder.getZipCodeFromProfile(profile)
299
                 const targetZip = zipcoder.getZipCodeFromProfile(profile)
299
                 if (!userZip || !targetZip)
300
                 if (!userZip || !targetZip)

+ 4
- 1
backend/lib/services/profile/profiler.js Voir le fichier

72
     }
72
     }
73
 }
73
 }
74
 const _makeCompleteProfile = (profileEntry, type, tagLookup) => {
74
 const _makeCompleteProfile = (profileEntry, type, tagLookup) => {
75
-    profileEntry.tags = profileEntry.tags.map(tag => tagLookup[tag.tag_id])
75
+    // remap tags
76
+    if (profileEntry && profileEntry.tags.length) {
77
+        profileEntry.tags = profileEntry?.tags.map(tag => tagLookup[tag.tag_id])
78
+    }
76
     const complete = new CompleteProfile(profileEntry, type)
79
     const complete = new CompleteProfile(profileEntry, type)
77
     return complete
80
     return complete
78
 }
81
 }

+ 11
- 0
backend/tests/matchqueue.spec.js Voir le fichier

60
      */
60
      */
61
     server.registerModel = () => {}
61
     server.registerModel = () => {}
62
     server.models = () => ({ Aspect, AspectLabel, MatchQueue, Profile })
62
     server.models = () => ({ Aspect, AspectLabel, MatchQueue, Profile })
63
+
64
+    /**
65
+     * Register mock authentication just for testing
66
+     * -
67
+     * Profile plugin does not do this
68
+     */
69
+    server.auth.scheme('jwt', () => ({
70
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
71
+    }))
72
+    server.auth.strategy('default_jwt', 'jwt')
73
+
63
     /**
74
     /**
64
      * Register Routes and Services as usual
75
      * Register Routes and Services as usual
65
      */
76
      */

+ 12
- 0
backend/tests/membership-join.spec.js Voir le fichier

56
         Grouping,
56
         Grouping,
57
         Membership,
57
         Membership,
58
     })
58
     })
59
+
60
+    /**
61
+     * Register mock authentication just for testing
62
+     * -
63
+     * Profile plugin does not do this
64
+     */
65
+    server.auth.scheme('jwt', () => ({
66
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
67
+    }))
68
+    server.auth.strategy('default_jwt', 'jwt')
69
+
59
     await plugin.register(server)
70
     await plugin.register(server)
71
+
60
     server.services()['profileService'] = new ProfileService(server)
72
     server.services()['profileService'] = new ProfileService(server)
61
     /**
73
     /**
62
      * TODO: adjust stubs to mock joinGrouping more closely
74
      * TODO: adjust stubs to mock joinGrouping more closely

+ 32
- 18
backend/tests/membership.spec.js Voir le fichier

3
 const test = require('ava')
3
 const test = require('ava')
4
 const { stub } = require('sinon')
4
 const { stub } = require('sinon')
5
 const Hapi = require('@hapi/hapi')
5
 const Hapi = require('@hapi/hapi')
6
+const Objection = require('objection')
6
 
7
 
7
 const plugin = require('../lib/plugins/membership')
8
 const plugin = require('../lib/plugins/membership')
8
 
9
 
9
 const ProfileService = require('../lib/services/profile')
10
 const ProfileService = require('../lib/services/profile')
10
-const MembershipService = require('../lib/services/membership')
11
+const UserService = require('../lib/services/user')
11
 
12
 
12
 const Profile = require('../lib/models/profile')
13
 const Profile = require('../lib/models/profile')
13
 const Grouping = require('../lib/models/grouping')
14
 const Grouping = require('../lib/models/grouping')
14
 const Membership = require('../lib/models/membership')
15
 const Membership = require('../lib/models/membership')
15
 const Tag = require('../lib/models/tag')
16
 const Tag = require('../lib/models/tag')
16
-const ZipCode = require('../lib/models/zip-code')
17
 const Aspect = require('../lib/models/aspect')
17
 const Aspect = require('../lib/models/aspect')
18
 const AspectLabel = require('../lib/models/aspect_label')
18
 const AspectLabel = require('../lib/models/aspect_label')
19
 
19
 
26
 const mockReturn = {
26
 const mockReturn = {
27
     profile: {
27
     profile: {
28
         profile_id: 99,
28
         profile_id: 99,
29
-        user_id: 99,
30
         user: {
29
         user: {
31
-            user_email: '',
32
-            user_name: 'bob',
30
+            user_id: 22,
31
+            user_email: 'jill@mail',
32
+            user_name: 'jill',
33
         },
33
         },
34
         responses: [],
34
         responses: [],
35
         tags: [],
35
         tags: [],
50
                 { val: 'foo', response_key_id: 11 },
50
                 { val: 'foo', response_key_id: 11 },
51
                 { val: 'foo', response_key_id: 12 },
51
                 { val: 'foo', response_key_id: 12 },
52
             ],
52
             ],
53
-            user: { user_name: 'phil' },
53
+            user: { user_id: 11, user_name: 'phil' },
54
         },
54
         },
55
         {
55
         {
56
             profile_id: 2,
56
             profile_id: 2,
63
                 { val: 'foo', response_key_id: 11 },
63
                 { val: 'foo', response_key_id: 11 },
64
                 { val: 'foo', response_key_id: 12 },
64
                 { val: 'foo', response_key_id: 12 },
65
             ],
65
             ],
66
-            user: { user_name: 'gil' },
66
+            user: { user_id: 30, user_name: 'gil' },
67
         },
67
         },
68
         {
68
         {
69
             profile_id: 99,
69
             profile_id: 99,
76
                 { val: 'foo', response_key_id: 11 },
76
                 { val: 'foo', response_key_id: 11 },
77
                 { val: 'foo', response_key_id: 12 },
77
                 { val: 'foo', response_key_id: 12 },
78
             ],
78
             ],
79
-            user: { user_name: 'jill' },
79
+            user: { user_id: 22, user_name: 'jill', user_email: 'jill@mail' },
80
         },
80
         },
81
     ],
81
     ],
82
     tags: [],
82
     tags: [],
123
         Tag,
123
         Tag,
124
     })
124
     })
125
 
125
 
126
-    // server.registerService(ProfileService)
126
+    /**
127
+     * Register mock authentication just for testing
128
+     * -
129
+     * Profile plugin does not do this
130
+     */
131
+    server.auth.scheme('jwt', () => ({
132
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
133
+    }))
134
+    server.auth.strategy('default_jwt', 'jwt')
135
+
136
+    // stub(Objection, 'transaction').returns({})
137
+
127
     /**
138
     /**
128
      * Register Routes and Services as usual
139
      * Register Routes and Services as usual
129
      */
140
      */
133
      * !: Janky - might be better to temp knex sqlite instance
144
      * !: Janky - might be better to temp knex sqlite instance
134
      */
145
      */
135
     server.services()['profileService'] = new ProfileService(server)
146
     server.services()['profileService'] = new ProfileService(server)
147
+    server.services()['profileService'].getTagsFor = () => []
148
+
149
+    // TODO: delete this and figure out stub for Profile
150
+    server.services()['profileService'].getProfilesFor = () =>
151
+        mockReturn.profiles
152
+
153
+    server.services()['userService'] = new UserService(server)
154
+    server.services()['userService'].findById = () => mockReturn.profile.user
155
+
136
     stub(server.models()['Tag'], 'query').returns(mockReturn.tags)
156
     stub(server.models()['Tag'], 'query').returns(mockReturn.tags)
137
     stub(server.models()['AspectLabel'], 'query').returns(mockReturn.labels)
157
     stub(server.models()['AspectLabel'], 'query').returns(mockReturn.labels)
138
     stub(server.models()['Aspect'], 'query').returns(mockReturn.aspects)
158
     stub(server.models()['Aspect'], 'query').returns(mockReturn.aspects)
139
     stub(server.models()['Grouping'], 'query').returns({
159
     stub(server.models()['Grouping'], 'query').returns({
140
         whereIn: () => ({
160
         whereIn: () => ({
141
-            withGraphFetched: () => {
142
-                return mockReturn.groupings
143
-            },
161
+            withGraphFetched: () => mockReturn.groupings,
144
         }),
162
         }),
145
     })
163
     })
146
     stub(server.models()['Membership'], 'query').returns({
164
     stub(server.models()['Membership'], 'query').returns({
147
-        where: () => {
148
-            return mockReturn.memberships
149
-        },
150
-        whereIn: () => {
151
-            return mockReturn.memberships
152
-        },
165
+        where: () => mockReturn.memberships,
166
+        whereIn: () => mockReturn.memberships,
153
     })
167
     })
154
     stub(server.models()['Profile'], 'query').returns({
168
     stub(server.models()['Profile'], 'query').returns({
155
         // Mocked for getProfile()
169
         // Mocked for getProfile()

+ 13
- 1
backend/tests/profile.spec.js Voir le fichier

1
 'use strict'
1
 'use strict'
2
-
3
 const test = require('ava')
2
 const test = require('ava')
4
 const { stub } = require('sinon')
3
 const { stub } = require('sinon')
5
 const Hapi = require('@hapi/hapi')
4
 const Hapi = require('@hapi/hapi')
42
      * Schwifty at runtime.
41
      * Schwifty at runtime.
43
      */
42
      */
44
     const server = Hapi.server()
43
     const server = Hapi.server()
44
+
45
     /**
45
     /**
46
      * Overload so we don't register any models
46
      * Overload so we don't register any models
47
      * using the plugin call (see plugins/profile.js)
47
      * using the plugin call (see plugins/profile.js)
49
      */
49
      */
50
     server.registerModel = () => {}
50
     server.registerModel = () => {}
51
     server.models = () => ({ Profile, Tag })
51
     server.models = () => ({ Profile, Tag })
52
+
53
+    /**
54
+     * Register mock authentication just for testing
55
+     * -
56
+     * Profile plugin does not do this
57
+     */
58
+    server.auth.scheme('jwt', () => ({
59
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
60
+    }))
61
+    server.auth.strategy('default_jwt', 'jwt')
62
+
52
     /**
63
     /**
53
      * Register Routes and Services as usual
64
      * Register Routes and Services as usual
54
      */
65
      */
55
     await plugin.register(server)
66
     await plugin.register(server)
67
+
56
     /**
68
     /**
57
      * Replace Objection model methods with our own mock functions
69
      * Replace Objection model methods with our own mock functions
58
      * !: Janky - might be better to temp knex sqlite instance
70
      * !: Janky - might be better to temp knex sqlite instance

+ 11
- 0
backend/tests/respond.spec.js Voir le fichier

52
      */
52
      */
53
     server.registerModel = () => {}
53
     server.registerModel = () => {}
54
     server.models = () => ({ Response, ResponseKey })
54
     server.models = () => ({ Response, ResponseKey })
55
+
56
+    /**
57
+     * Register mock authentication just for testing
58
+     * -
59
+     * Profile plugin does not do this
60
+     */
61
+    server.auth.scheme('jwt', () => ({
62
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
63
+    }))
64
+    server.auth.strategy('default_jwt', 'jwt')
65
+
55
     /**
66
     /**
56
      * Register Routes and Services as usual
67
      * Register Routes and Services as usual
57
      */
68
      */

+ 33
- 1
backend/tests/score.spec.js Voir le fichier

13
 const AspectLabel = require('../lib/models/aspect_label')
13
 const AspectLabel = require('../lib/models/aspect_label')
14
 
14
 
15
 // !: Must match the key set in servives/profile.js
15
 // !: Must match the key set in servives/profile.js
16
-const zipcodeKey = 7
16
+const zipcodeKey = 10
17
 
17
 
18
 /**
18
 /**
19
  * Route parameters
19
  * Route parameters
30
             responses: [
30
             responses: [
31
                 { response_key_id: 1, val: '100' },
31
                 { response_key_id: 1, val: '100' },
32
                 { response_key_id: 2, val: '200' },
32
                 { response_key_id: 2, val: '200' },
33
+                { response_key_id: 3, val: '200' },
34
+                { response_key_id: 4, val: '200' },
35
+                { response_key_id: 5, val: '200' },
36
+                { response_key_id: 6, val: '200' },
37
+                { response_key_id: 7, val: '200' },
38
+                { response_key_id: 8, val: '200' },
39
+                { response_key_id: 9, val: '200' },
33
                 { response_key_id: zipcodeKey, val: '90065' },
40
                 { response_key_id: zipcodeKey, val: '90065' },
34
             ],
41
             ],
35
         },
42
         },
39
             responses: [
46
             responses: [
40
                 { response_key_id: 1, val: '100' },
47
                 { response_key_id: 1, val: '100' },
41
                 { response_key_id: 2, val: '200' },
48
                 { response_key_id: 2, val: '200' },
49
+                { response_key_id: 3, val: '200' },
50
+                { response_key_id: 4, val: '200' },
51
+                { response_key_id: 5, val: '200' },
52
+                { response_key_id: 6, val: '200' },
53
+                { response_key_id: 7, val: '200' },
54
+                { response_key_id: 8, val: '200' },
55
+                { response_key_id: 9, val: '200' },
42
                 { response_key_id: zipcodeKey, val: '97002' },
56
                 { response_key_id: zipcodeKey, val: '97002' },
43
             ],
57
             ],
44
         },
58
         },
48
             responses: [
62
             responses: [
49
                 { response_key_id: 1, val: '200' },
63
                 { response_key_id: 1, val: '200' },
50
                 { response_key_id: 2, val: '200' },
64
                 { response_key_id: 2, val: '200' },
65
+                { response_key_id: 3, val: '200' },
66
+                { response_key_id: 4, val: '200' },
67
+                { response_key_id: 5, val: '200' },
68
+                { response_key_id: 6, val: '200' },
69
+                { response_key_id: 7, val: '200' },
70
+                { response_key_id: 8, val: '200' },
71
+                { response_key_id: 9, val: '200' },
51
                 { response_key_id: zipcodeKey, val: '96741' },
72
                 { response_key_id: zipcodeKey, val: '96741' },
52
             ],
73
             ],
53
         },
74
         },
93
         Profile,
114
         Profile,
94
         ZipCode,
115
         ZipCode,
95
     })
116
     })
117
+
118
+    /**
119
+     * Register mock authentication just for testing
120
+     * -
121
+     * Profile plugin does not do this
122
+     */
123
+    server.auth.scheme('jwt', () => ({
124
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
125
+    }))
126
+    server.auth.strategy('default_jwt', 'jwt')
127
+
96
     /**
128
     /**
97
      * Register Routes and Services as usual
129
      * Register Routes and Services as usual
98
      */
130
      */

+ 13
- 0
backend/tests/update.spec.js Voir le fichier

8
 
8
 
9
 const Response = require('../lib/models/response')
9
 const Response = require('../lib/models/response')
10
 const ResponseKey = require('../lib/models/response-key')
10
 const ResponseKey = require('../lib/models/response-key')
11
+const ProfileService = require('../lib/services/profile')
11
 /**
12
 /**
12
  * Route parameters
13
  * Route parameters
13
  */
14
  */
66
      */
67
      */
67
     server.registerModel = () => {}
68
     server.registerModel = () => {}
68
     server.models = () => ({ Response, ResponseKey })
69
     server.models = () => ({ Response, ResponseKey })
70
+
71
+    /**
72
+     * Register mock authentication just for testing
73
+     * -
74
+     * Profile plugin does not do this
75
+     */
76
+    server.auth.scheme('jwt', () => ({
77
+        authenticate: (req, h) => h.authenticated({ credentials: {} }),
78
+    }))
79
+    server.auth.strategy('default_jwt', 'jwt')
80
+
69
     /**
81
     /**
70
      * Register Routes and Services as usual
82
      * Register Routes and Services as usual
71
      */
83
      */
72
     await plugin.register(server)
84
     await plugin.register(server)
85
+
73
     /**
86
     /**
74
      * Replace Objection model methods with our own mock functions
87
      * Replace Objection model methods with our own mock functions
75
      * !: Janky - might be better to temp knex sqlite instance
88
      * !: Janky - might be better to temp knex sqlite instance

Chargement…
Annuler
Enregistrer