Pārlūkot izejas kodu

:white_check_mark: Added test for user/validate session route

tags/0.0.4
tomit4 2 gadus atpakaļ
vecāks
revīzija
1c8766e359
1 mainītis faili ar 173 papildinājumiem un 0 dzēšanām
  1. 173
    0
      backend/tests/user-validate-session.spec.js

+ 173
- 0
backend/tests/user-validate-session.spec.js Parādīt failu

@@ -0,0 +1,173 @@
1
+'use strict'
2
+
3
+const test = require('ava')
4
+const { stub } = require('sinon')
5
+const Hapi = require('@hapi/hapi')
6
+const UserService = require('../lib/services/user.js')
7
+const ProfileService = require('../lib/services/profile/index.js')
8
+
9
+const plugin = require('../lib/plugins/user.js')
10
+const JWT = require('jsonwebtoken')
11
+const User = require('../lib/models/user.js')
12
+const Profile = require('../lib/models/profile.js')
13
+
14
+// Dummy Method So JWT can be verified
15
+const createToken = (data, expiration = 600) => {
16
+    const key = process.env.APP_SECRET
17
+    const obj = {}
18
+
19
+    Object.assign(obj, { ...data })
20
+    return JWT.sign(obj, key, { expiresIn: expiration })
21
+}
22
+
23
+// Dummy Data
24
+const payload = 'a;lsdkfja;ldfjka;ldfja;lskjdfa;dfjk'
25
+const email = 'test@testemail.com'
26
+
27
+const userData = {
28
+    email,
29
+    name: 'fk',
30
+    seeking: 'position',
31
+    sessionToken: createToken(this),
32
+}
33
+
34
+const userInDb = {
35
+    user_id: 101,
36
+    user_name: 'john_doe',
37
+    user_email: email,
38
+    is_admin: 0,
39
+    is_poster: 0,
40
+    is_verified: 0,
41
+}
42
+
43
+const allProfiles = [
44
+    {
45
+        profile_id: 147,
46
+        user_id: 101,
47
+    },
48
+]
49
+
50
+// Existing activeSession
51
+const activeSessions = {
52
+    'a;lsdkfja;ldfjka;ldfja;lskjdfa;dfjk': {
53
+        email,
54
+        name: 'john_doe',
55
+        seeking: 'position',
56
+        sessionToken: userData.sessionToken,
57
+        expiration: Date.now() + 600000,
58
+        emailWasRespondedTo: true,
59
+        accessToken: null,
60
+    },
61
+}
62
+
63
+const mockReturn = {
64
+    profileId: allProfiles[0].profile_id,
65
+    sessionToken: userData.sessionToken,
66
+}
67
+
68
+const pathToTest = {
69
+    method: 'POST',
70
+    url: '/validate-session',
71
+    payload: JSON.stringify(payload),
72
+}
73
+
74
+test('path /validate-session should return validated session data and profileId', async t => {
75
+    /**
76
+     * Create a new server and register services,
77
+     * models and routes for testing
78
+     * -
79
+     * NOTE: We use register models manually.
80
+     * Normally this is handled by
81
+     * Schwifty at runtime.
82
+     */
83
+    const server = Hapi.server()
84
+
85
+    /**
86
+     * Register Routes and Services as usual
87
+     */
88
+    server.registerModel = () => {}
89
+
90
+    server.models = () => ({
91
+        User,
92
+        Profile,
93
+    })
94
+
95
+    server.registrations = {
96
+        'main-app-plugin': {
97
+            options: {},
98
+        },
99
+    }
100
+
101
+    server.registrations['main-app-plugin'].options.jwtKey = {
102
+        $filter: 'NODE_ENV',
103
+        $default: {
104
+            $param: 'APP_SECRET',
105
+            $default: 'app-secret',
106
+        },
107
+        // Use .env file in production
108
+        production: {
109
+            $param: 'APP_SECRET',
110
+        },
111
+    }
112
+
113
+    await plugin.register(server)
114
+    server.models = () => ({
115
+        User,
116
+        Profile,
117
+    })
118
+
119
+    server.services()['userService'] = new UserService(server)
120
+    server.services()['userService']['activeSessions'] = activeSessions
121
+
122
+    server.services()['profileService'] = new ProfileService(server)
123
+    server.services()['profileService']['_setTagLookup'] = () => {}
124
+
125
+    stub(server.models()['User'], 'query').returns({
126
+        throwIfNotFound: () => ({
127
+            first: () => ({
128
+                where: () => {
129
+                    if (userData.email === userInDb.user_email) {
130
+                        return userInDb
131
+                    }
132
+                },
133
+            }),
134
+        }),
135
+    })
136
+
137
+    stub(server.models()['Profile'], 'query').returns({
138
+        where: () => {
139
+            return [allProfiles.find(obj => obj.user_id === userInDb.user_id)]
140
+        },
141
+        whereIn: () => ({
142
+            withGraphFetched: () => ({
143
+                withGraphFetched: () => ({
144
+                    withGraphFetched: () => [
145
+                        {
146
+                            profile_id: 147,
147
+                            user_id: 101,
148
+                            tags: [],
149
+                            responses: [],
150
+                            user: {
151
+                                user_id: 101,
152
+                                user_name: 'fk',
153
+                                user_email: email,
154
+                                is_admin: 0,
155
+                                is_poster: 0,
156
+                                is_verified: 0,
157
+                            },
158
+                        },
159
+                    ],
160
+                }),
161
+            }),
162
+        }),
163
+    })
164
+
165
+    /**
166
+     * Test the server with registered models and services
167
+     */
168
+    const { payload } = await server.inject(pathToTest)
169
+    const res = JSON.parse(payload)
170
+    t.deepEqual(res.ok, true)
171
+    t.deepEqual(res.data, mockReturn)
172
+    server.stop()
173
+})

Notiek ielāde…
Atcelt
Saglabāt