@next-k8s/tickets 1.0.27 → 1.0.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/coverage/clover.xml +67 -45
  3. package/coverage/coverage-final.json +9 -8
  4. package/coverage/lcov-report/events/listeners/_queue-group-name.ts.html +88 -0
  5. package/coverage/lcov-report/events/listeners/index.html +131 -0
  6. package/coverage/lcov-report/events/listeners/order-created.ts.html +157 -0
  7. package/coverage/lcov-report/events/publishers/index.html +116 -0
  8. package/coverage/lcov-report/events/publishers/updated.ts.html +106 -0
  9. package/coverage/lcov-report/index.html +18 -18
  10. package/coverage/lcov-report/models/index.html +116 -0
  11. package/coverage/lcov-report/models/ticket.ts.html +235 -0
  12. package/coverage/lcov-report/src/app.ts.html +1 -1
  13. package/coverage/lcov-report/src/events/listeners/_queue-group-name.ts.html +2 -2
  14. package/coverage/lcov-report/src/events/listeners/index.html +26 -11
  15. package/coverage/lcov-report/src/events/listeners/order-cancelled.ts.html +157 -0
  16. package/coverage/lcov-report/src/events/listeners/order-created.ts.html +19 -13
  17. package/coverage/lcov-report/src/events/publishers/created.ts.html +2 -2
  18. package/coverage/lcov-report/src/events/publishers/index.html +1 -1
  19. package/coverage/lcov-report/src/events/publishers/updated.ts.html +5 -5
  20. package/coverage/lcov-report/src/index.html +1 -1
  21. package/coverage/lcov-report/src/models/index.html +1 -1
  22. package/coverage/lcov-report/src/models/ticket.ts.html +12 -15
  23. package/coverage/lcov-report/src/routes/create.ts.html +7 -7
  24. package/coverage/lcov-report/src/routes/get.ts.html +1 -1
  25. package/coverage/lcov-report/src/routes/index.html +7 -7
  26. package/coverage/lcov-report/src/routes/index.ts.html +1 -1
  27. package/coverage/lcov-report/src/routes/update.ts.html +9 -6
  28. package/coverage/lcov-report/src/test/index.html +1 -1
  29. package/coverage/lcov-report/src/test/utils.ts.html +2 -2
  30. package/coverage/lcov.info +96 -62
  31. package/package.json +3 -3
  32. package/src/events/listeners/__test__/order-cancelled.test.ts +50 -0
  33. package/src/events/listeners/__test__/order-created.test.ts +7 -1
  34. package/src/events/listeners/order-cancelled.ts +24 -0
  35. package/src/events/listeners/order-created.ts +2 -0
  36. package/src/index.ts +5 -0
  37. package/src/models/ticket.ts +0 -1
  38. package/src/routes/__test__/update.test.ts +15 -0
  39. package/src/routes/update.ts +1 -0
package/src/index.ts CHANGED
@@ -2,6 +2,8 @@ import mongoose from 'mongoose'
2
2
 
3
3
  import natsClient from './nats-client'
4
4
  import app from './app'
5
+ import OrderCreatedListener from './events/listeners/order-created'
6
+ import OrderCancelledListener from './events/listeners/order-cancelled'
5
7
 
6
8
  const start = async () => {
7
9
  if (!process.env.JWT_KEY) throw new Error('JWT_KEY is undefined')
@@ -20,6 +22,9 @@ const start = async () => {
20
22
  process.on('SIGINT', () => natsClient.client.close())
21
23
  process.on('SIGTERM', () => natsClient.client.close())
22
24
 
25
+ new OrderCreatedListener(natsClient.client).listen()
26
+ new OrderCancelledListener(natsClient.client).listen()
27
+
23
28
  await mongoose.connect(process.env.MONGO_URI)
24
29
  console.log('Database connected!')
25
30
  const port = process.env.PORT || 3000
@@ -5,7 +5,6 @@ interface TicketAttributes {
5
5
  title: string;
6
6
  price: number;
7
7
  owner: string;
8
- orderId?: string;
9
8
  createdAt?: Date;
10
9
  updatedAt?: Date;
11
10
  }
@@ -5,6 +5,7 @@ import { getTokenCookie } from '@next-k8s/common'
5
5
  import app from '../../app'
6
6
  import { createTicket } from '../../test/utils'
7
7
  import natsClient from '../../nats-client'
8
+ import Ticket from '../../models/ticket'
8
9
 
9
10
  describe('[Update Ticket] Route: PUT /api/tickets/:id', () => {
10
11
  it('should throw a NotFoundError if the ticket does not exist', async () => {
@@ -100,4 +101,18 @@ describe('[Update Ticket] Route: PUT /api/tickets/:id', () => {
100
101
  await createTicket(app, cookie)
101
102
  expect(natsClient.client.publish).toHaveBeenCalled()
102
103
  })
104
+
105
+ it('should reject updates to a reserved ticket', async () => {
106
+ const cookie = await getTokenCookie({ id: new mongoose.Types.ObjectId().toHexString() })
107
+ const response = await createTicket(app, cookie)
108
+ const ticket = await Ticket.findById(response.body.ticket.id)
109
+ ticket.set({ orderId: new mongoose.Types.ObjectId().toHexString() })
110
+ await ticket.save()
111
+
112
+ await request(app)
113
+ .put(`/api/tickets/${response.body.ticket.id}`)
114
+ .set('Cookie', [cookie])
115
+ .send({ title: 'Test Event 2', price: 33000 })
116
+ .expect(400)
117
+ })
103
118
  })
@@ -18,6 +18,7 @@ router.put('/api/tickets/:id', requireAuth, validateInput, validateRequest, asyn
18
18
  const ticket = await Ticket.findById(req.params.id)
19
19
  if (!ticket) throw new NotFoundError()
20
20
  if (ticket.owner.toHexString() !== req.currentUser!.id) throw new UnauthorizedError()
21
+ if (ticket.orderId) throw new BadRequestError('Ticket is reserved')
21
22
  const { title, price } = req.body
22
23
  ticket.set({ title, price })
23
24
  await ticket.save()