@next-k8s/tickets 1.0.14 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- package/.vscode/launch.json +20 -0
- package/CHANGELOG.md +40 -0
- package/LICENSE.md +21 -0
- package/coverage/clover.xml +144 -0
- package/coverage/coverage-final.json +11 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +176 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/src/app.ts.html +148 -0
- package/coverage/lcov-report/src/events/publishers/tickets/created.ts.html +106 -0
- package/coverage/lcov-report/src/events/publishers/tickets/index.html +131 -0
- package/coverage/lcov-report/src/events/publishers/tickets/updated.ts.html +106 -0
- package/coverage/lcov-report/src/index.html +116 -0
- package/coverage/lcov-report/src/models/index.html +116 -0
- package/coverage/lcov-report/src/models/ticket.ts.html +211 -0
- package/coverage/lcov-report/src/routes/create.ts.html +157 -0
- package/coverage/lcov-report/src/routes/find.ts.html +118 -0
- package/coverage/lcov-report/src/routes/get.ts.html +133 -0
- package/coverage/lcov-report/src/routes/index.html +176 -0
- package/coverage/lcov-report/src/routes/index.ts.html +103 -0
- package/coverage/lcov-report/src/routes/update.ts.html +172 -0
- package/coverage/lcov-report/src/test/index.html +116 -0
- package/coverage/lcov-report/src/test/utils.ts.html +112 -0
- package/coverage/lcov.info +223 -0
- package/package.json +13 -5
- package/pnpm-lock.yaml +50 -19
- package/src/routes/__test__/create.test.ts +7 -6
- package/src/routes/__test__/find.test.ts +7 -3
- package/src/routes/__test__/get.test.ts +5 -3
- package/src/routes/__test__/update.test.ts +15 -13
- package/src/routes/update.ts +1 -1
- package/src/test/utils.ts +0 -9
@@ -1,10 +1,14 @@
|
|
1
|
+
|
2
|
+
import mongoose from 'mongoose'
|
1
3
|
import request from 'supertest'
|
4
|
+
import { getTokenCookie } from '@next-k8s/common'
|
5
|
+
|
2
6
|
import app from '../../app'
|
3
|
-
import { createTicket
|
7
|
+
import { createTicket } from '../../test/utils'
|
4
8
|
|
5
|
-
describe('[List Tickets] Route: /api/tickets', () => {
|
9
|
+
describe('[List Tickets] Route: GET /api/tickets', () => {
|
6
10
|
it('should return a list of tickets', async () => {
|
7
|
-
const cookie = await getTokenCookie()
|
11
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
8
12
|
await createTicket(app, cookie)
|
9
13
|
await createTicket(app, cookie, 'Test Event 2', 40000)
|
10
14
|
const list = await request(app)
|
@@ -1,9 +1,11 @@
|
|
1
1
|
import request from 'supertest'
|
2
2
|
import mongoose from 'mongoose'
|
3
|
+
import { getTokenCookie } from '@next-k8s/common'
|
4
|
+
|
3
5
|
import app from '../../app'
|
4
|
-
import { createTicket
|
6
|
+
import { createTicket } from '../../test/utils'
|
5
7
|
|
6
|
-
describe('[Get Ticket] Route: /api/tickets/:id', () => {
|
8
|
+
describe('[Get Ticket] Route: GET /api/tickets/:id', () => {
|
7
9
|
it('should throw a BadRequestError if ticket ID is invalid', async () => {
|
8
10
|
await request(app)
|
9
11
|
.get('/api/tickets/notarealid')
|
@@ -20,7 +22,7 @@ describe('[Get Ticket] Route: /api/tickets/:id', () => {
|
|
20
22
|
})
|
21
23
|
|
22
24
|
it('should return the fetched ticket', async () => {
|
23
|
-
const cookie = await getTokenCookie()
|
25
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
24
26
|
const response = await createTicket(app, cookie)
|
25
27
|
|
26
28
|
const ticket = await request(app)
|
@@ -1,14 +1,15 @@
|
|
1
1
|
import request from 'supertest'
|
2
2
|
import mongoose from 'mongoose'
|
3
|
+
import { getTokenCookie } from '@next-k8s/common'
|
3
4
|
|
4
5
|
import app from '../../app'
|
5
|
-
import { createTicket
|
6
|
+
import { createTicket } from '../../test/utils'
|
6
7
|
import natsClient from '../../nats-client'
|
7
8
|
|
8
|
-
describe('[Update Ticket] Route: /api/tickets/:id', () => {
|
9
|
+
describe('[Update Ticket] Route: PUT /api/tickets/:id', () => {
|
9
10
|
it('should throw a NotFoundError if the ticket does not exist', async () => {
|
10
11
|
const id = new mongoose.Types.ObjectId().toHexString()
|
11
|
-
const cookie = await getTokenCookie()
|
12
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
12
13
|
|
13
14
|
await request(app)
|
14
15
|
.put(`/api/tickets/${id}`)
|
@@ -18,7 +19,7 @@ describe('[Update Ticket] Route: /api/tickets/:id', () => {
|
|
18
19
|
})
|
19
20
|
|
20
21
|
it('should throw an UnauthorizedError if not authenticated', async () => {
|
21
|
-
const cookie = await getTokenCookie()
|
22
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
22
23
|
|
23
24
|
const response = await request(app)
|
24
25
|
.post(`/api/tickets`)
|
@@ -33,25 +34,26 @@ describe('[Update Ticket] Route: /api/tickets/:id', () => {
|
|
33
34
|
})
|
34
35
|
|
35
36
|
it('should throw an UnauthorizedError if user does not own the ticket', async () => {
|
36
|
-
const
|
37
|
+
const users = [
|
38
|
+
await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() }),
|
39
|
+
await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
40
|
+
]
|
37
41
|
|
38
42
|
const response = await request(app)
|
39
43
|
.post(`/api/tickets`)
|
40
|
-
.set('Cookie', [
|
44
|
+
.set('Cookie', [users[0]])
|
41
45
|
.send({ title: 'Test Event', price: 20000 })
|
42
46
|
.expect(201)
|
43
47
|
|
44
|
-
const newCookie = await getTokenCookie()
|
45
|
-
|
46
48
|
await request(app)
|
47
49
|
.put(`/api/tickets/${response.body.ticket.id}`)
|
48
|
-
.set('Cookie', [
|
50
|
+
.set('Cookie', [users[1]])
|
49
51
|
.send({ title: 'Test Event', price: 23000 })
|
50
52
|
.expect(401)
|
51
53
|
})
|
52
54
|
|
53
55
|
it('should throw a BadRequestError if an invalid ticket is provided', async () => {
|
54
|
-
const cookie = await getTokenCookie()
|
56
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
55
57
|
|
56
58
|
await request(app)
|
57
59
|
.put(`/api/tickets/notarealid`)
|
@@ -61,7 +63,7 @@ describe('[Update Ticket] Route: /api/tickets/:id', () => {
|
|
61
63
|
})
|
62
64
|
|
63
65
|
it('should throw an error on invalid ticket data', async () => {
|
64
|
-
const cookie = await getTokenCookie()
|
66
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
65
67
|
const response = await createTicket(app, cookie)
|
66
68
|
|
67
69
|
await request(app)
|
@@ -78,7 +80,7 @@ describe('[Update Ticket] Route: /api/tickets/:id', () => {
|
|
78
80
|
})
|
79
81
|
|
80
82
|
it('should update a ticket', async () => {
|
81
|
-
const cookie = await getTokenCookie()
|
83
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
82
84
|
const response = await createTicket(app, cookie)
|
83
85
|
|
84
86
|
const updated = await request(app)
|
@@ -94,7 +96,7 @@ describe('[Update Ticket] Route: /api/tickets/:id', () => {
|
|
94
96
|
})
|
95
97
|
|
96
98
|
it('should publish a ticket:updated event', async () => {
|
97
|
-
const cookie = await getTokenCookie()
|
99
|
+
const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
|
98
100
|
await createTicket(app, cookie)
|
99
101
|
expect(natsClient.client.publish).toHaveBeenCalled()
|
100
102
|
})
|
package/src/routes/update.ts
CHANGED
@@ -18,7 +18,7 @@ router.put('/api/tickets/:id', requireAuth, validateInput, validateRequest, asyn
|
|
18
18
|
if (!isValidObjectId(req.params.id)) throw new BadRequestError('Invalid Ticket ID')
|
19
19
|
const ticket = await Ticket.findById(req.params.id)
|
20
20
|
if (!ticket) throw new NotFoundError()
|
21
|
-
if (ticket.owner !== req.currentUser!.id) throw new UnauthorizedError()
|
21
|
+
if (ticket.owner.toHexString() !== req.currentUser!.id) throw new UnauthorizedError()
|
22
22
|
const { title, price } = req.body
|
23
23
|
ticket.set({ title, price })
|
24
24
|
await ticket.save()
|
package/src/test/utils.ts
CHANGED
@@ -1,14 +1,5 @@
|
|
1
|
-
import jwt from 'jsonwebtoken'
|
2
|
-
import mongoose from 'mongoose'
|
3
1
|
import request from 'supertest'
|
4
2
|
|
5
|
-
export const getTokenCookie = async () => {
|
6
|
-
const payload = { id: new mongoose.Types.ObjectId().toHexString(), email: 'test@test.com' }
|
7
|
-
const token = jwt.sign(payload, process.env.JWT_KEY!)
|
8
|
-
const cookie = Buffer.from(JSON.stringify({ jwt: token })).toString('base64')
|
9
|
-
return `session=${cookie}`
|
10
|
-
}
|
11
|
-
|
12
3
|
export const createTicket = (app: Express.Application, cookie?: string, title = 'Test Event', price = 20000, expectedStatusCode = 201) => {
|
13
4
|
return request(app)
|
14
5
|
.post('/api/tickets')
|