Browse Source

:recycle: fixing all tests | finishing grouping and membership join test

tags/0.0.1^2
toj 3 years ago
parent
commit
bc304b86bb

+ 0
- 1
backend/lib/routes/profile/score.js View File

59
                 maxDistanceMiles,
59
                 maxDistanceMiles,
60
                 distanceUnit,
60
                 distanceUnit,
61
             )
61
             )
62
-
63
             try {
62
             try {
64
                 if (!scoredProfiles) {
63
                 if (!scoredProfiles) {
65
                     throw new RangeError('Unable to score profiles')
64
                     throw new RangeError('Unable to score profiles')

+ 0
- 4
backend/lib/services/membership.js View File

116
             profileId,
116
             profileId,
117
             targetId,
117
             targetId,
118
         )
118
         )
119
-
120
         if (matchingGroupingIds.length) {
119
         if (matchingGroupingIds.length) {
121
             /** Grab all memberships associated with groupingIds */
120
             /** Grab all memberships associated with groupingIds */
122
             let memberships = await Membership.query().whereIn(
121
             let memberships = await Membership.query().whereIn(
152
                 membership_type: role,
151
                 membership_type: role,
153
                 can_edit: false,
152
                 can_edit: false,
154
             }
153
             }
155
-
156
             const userMembership = await Membership.query(txn).insert({
154
             const userMembership = await Membership.query(txn).insert({
157
                 profile_id: profileId,
155
                 profile_id: profileId,
158
                 ...membershipDetailsInCommon,
156
                 ...membershipDetailsInCommon,
159
                 is_active: true,
157
                 is_active: true,
160
             })
158
             })
161
-
162
             const targetMembership = await Membership.query(txn).insert({
159
             const targetMembership = await Membership.query(txn).insert({
163
                 profile_id: targetId,
160
                 profile_id: targetId,
164
                 ...membershipDetailsInCommon,
161
                 ...membershipDetailsInCommon,
165
                 is_active: false,
162
                 is_active: false,
166
             })
163
             })
167
-
168
             return {
164
             return {
169
                 memberships: [userMembership, targetMembership],
165
                 memberships: [userMembership, targetMembership],
170
                 groupings: [],
166
                 groupings: [],

+ 7
- 4
backend/lib/services/profile/index.js View File

216
         if (scoring._isScorableResponse(responseToSave.response_key_id)) {
216
         if (scoring._isScorableResponse(responseToSave.response_key_id)) {
217
             // Convert -3 to 0, 0 to 3, 3 to 6
217
             // Convert -3 to 0, 0 to 3, 3 to 6
218
             const offset = (config.scoreVals.length - 1) / 2
218
             const offset = (config.scoreVals.length - 1) / 2
219
-            const indexFromInput = parseInt(responseToSave.val) + offset
220
-            convertedResponse.val = config.scoreVals[indexFromInput].toString()
219
+            const scoreFromInput = parseInt(responseToSave.val) + offset
220
+            const scoreFromConfig = config.scoreVals.indexOf(scoreFromInput)
221
+            if (scoreFromConfig < 0) {
222
+                console.error('score not found in possible config responses')
223
+            }
224
+            convertedResponse.val = scoreFromConfig.toString()
221
         }
225
         }
222
 
226
 
223
         await Response.query().insert(convertedResponse)
227
         await Response.query().insert(convertedResponse)
265
         let profileIdsOfOppositeType = await Profile.query()
269
         let profileIdsOfOppositeType = await Profile.query()
266
             .withGraphFetched('responses')
270
             .withGraphFetched('responses')
267
             .withGraphFetched('user')
271
             .withGraphFetched('user')
268
-
269
         // TODO: Let Objection optimize this
272
         // TODO: Let Objection optimize this
270
         const isPosterOpposite = userProfile.user.is_poster == 1 ? 0 : 1
273
         const isPosterOpposite = userProfile.user.is_poster == 1 ? 0 : 1
271
         profileIdsOfOppositeType = profileIdsOfOppositeType
274
         profileIdsOfOppositeType = profileIdsOfOppositeType
295
                 }
298
                 }
296
             }),
299
             }),
297
         )
300
         )
301
+
298
         const distanceFilteredProfiles = zipcoder.filterByDistance(
302
         const distanceFilteredProfiles = zipcoder.filterByDistance(
299
             profilePlusDistance,
303
             profilePlusDistance,
300
             maxDistance,
304
             maxDistance,
304
             userProfile,
308
             userProfile,
305
             this.scoreLookup,
309
             this.scoreLookup,
306
         )
310
         )
307
-
308
         // Order by score
311
         // Order by score
309
         return scoredProfilesWithDistance.sort(
312
         return scoredProfilesWithDistance.sort(
310
             (a, b) => b.score.total - a.score.total,
313
             (a, b) => b.score.total - a.score.total,

+ 0
- 1
backend/lib/services/profile/scorer.js View File

31
         return {
31
         return {
32
             error: `complete responses for profile: ${seeker.profile_id} unqeual to profile: ${potentialMatch.profile_id} | ${seeker.responses.length}:${potentialMatch.responses.length}`,
32
             error: `complete responses for profile: ${seeker.profile_id} unqeual to profile: ${potentialMatch.profile_id} | ${seeker.responses.length}:${potentialMatch.responses.length}`,
33
         }
33
         }
34
-
35
     const aRes = seeker.responses.filter(res =>
34
     const aRes = seeker.responses.filter(res =>
36
         _isScorableResponse(res.response_key_id),
35
         _isScorableResponse(res.response_key_id),
37
     )
36
     )

+ 8
- 9
backend/tests/matchqueue.spec.js View File

71
     stub(server.models()['AspectLabel'], 'query').returns(mockReturn.labels)
71
     stub(server.models()['AspectLabel'], 'query').returns(mockReturn.labels)
72
     stub(server.models()['Aspect'], 'query').returns(mockReturn.aspects)
72
     stub(server.models()['Aspect'], 'query').returns(mockReturn.aspects)
73
     stub(server.models()['MatchQueue'], 'query').returns({
73
     stub(server.models()['MatchQueue'], 'query').returns({
74
-        // Mocked for markAsDeleted()
75
-        patch: () => ({
76
-            where: () => ({
77
-                andWhere: () => ({
78
-                    first: () => ({ patch: 'bop' }),
79
-                }),
80
-            }),
81
-        }),
82
         insert: queueRecord => {
74
         insert: queueRecord => {
83
             t.is(queueRecord.profile_id, params.profile_id)
75
             t.is(queueRecord.profile_id, params.profile_id)
84
             t.is(queueRecord.target_id, params.target_id)
76
             t.is(queueRecord.target_id, params.target_id)
89
             where: (cmd, val) => {
81
             where: (cmd, val) => {
90
                 return mockReturn.queue
82
                 return mockReturn.queue
91
             },
83
             },
84
+            // Mocked for markAsDeleted()
85
+            andWhere: () => ({
86
+                patch: () => ({
87
+                    first: () => ({
88
+                        patch: 'bop',
89
+                    }),
90
+                }),
91
+            }),
92
         }),
92
         }),
93
     })
93
     })
94
 
94
 
97
      */
97
      */
98
     const { payload } = await server.inject(pathToTest)
98
     const { payload } = await server.inject(pathToTest)
99
     const res = JSON.parse(payload)
99
     const res = JSON.parse(payload)
100
-
101
     t.deepEqual(res.ok, true)
100
     t.deepEqual(res.ok, true)
102
     t.deepEqual(
101
     t.deepEqual(
103
         res.data,
102
         res.data,

+ 37
- 30
backend/tests/membership-join.spec.js View File

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

+ 2
- 2
backend/tests/respond.spec.js View File

20
             response_id: 1,
20
             response_id: 1,
21
             profile_id: 38,
21
             profile_id: 38,
22
             response_key_id: 6,
22
             response_key_id: 6,
23
-            val: '400',
23
+            val: '2056',
24
         },
24
         },
25
         {
25
         {
26
             response_id: 2,
26
             response_id: 2,
32
 }
32
 }
33
 const pathToTest = {
33
 const pathToTest = {
34
     method: 'POST',
34
     method: 'POST',
35
-    url: `/${params.profile_id}/respond?response_key_id=5&val=999`,
35
+    url: `/${params.profile_id}/respond?response_key_id=5&val=2053`,
36
 }
36
 }
37
 
37
 
38
 test('path /<profile_id>/respond should return ok on POST', async t => {
38
 test('path /<profile_id>/respond should return ok on POST', async t => {

+ 6
- 6
backend/tests/score.spec.js View File

28
             profile_id: 1,
28
             profile_id: 1,
29
             user: { is_poster: 1 },
29
             user: { is_poster: 1 },
30
             responses: [
30
             responses: [
31
-                { val: '100' },
32
-                { val: '200' },
31
+                { response_key_id: 1, val: '100' },
32
+                { response_key_id: 2, val: '200' },
33
                 { response_key_id: zipcodeKey, val: '90065' },
33
                 { response_key_id: zipcodeKey, val: '90065' },
34
             ],
34
             ],
35
         },
35
         },
37
             profile_id: 2,
37
             profile_id: 2,
38
             user: { is_poster: 0 },
38
             user: { is_poster: 0 },
39
             responses: [
39
             responses: [
40
-                { val: '100' },
41
-                { val: '200' },
40
+                { response_key_id: 1, val: '100' },
41
+                { response_key_id: 2, val: '200' },
42
                 { response_key_id: zipcodeKey, val: '97002' },
42
                 { response_key_id: zipcodeKey, val: '97002' },
43
             ],
43
             ],
44
         },
44
         },
46
             profile_id: 3,
46
             profile_id: 3,
47
             user: { is_poster: 0 },
47
             user: { is_poster: 0 },
48
             responses: [
48
             responses: [
49
-                { val: '200' },
50
-                { val: '200' },
49
+                { response_key_id: 1, val: '200' },
50
+                { response_key_id: 2, val: '200' },
51
                 { response_key_id: zipcodeKey, val: '96741' },
51
                 { response_key_id: zipcodeKey, val: '96741' },
52
             ],
52
             ],
53
         },
53
         },

Loading…
Cancel
Save