Skip to content

Commit

Permalink
Update booking.test.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
aelassas committed Feb 20, 2024
1 parent 89b306f commit 3d16fa6
Show file tree
Hide file tree
Showing 7 changed files with 508 additions and 368 deletions.
4 changes: 4 additions & 0 deletions api/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ npm-debug.log*

# eslint
.eslintcache

# jest
/coverage
!/coverage/cobertura-coverage.xml
705 changes: 361 additions & 344 deletions api/coverage/cobertura-coverage.xml

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion api/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ const config = {
'./tests/',
],
collectCoverage: true,
coverageReporters: ['cobertura'],
coverageReporters: ['cobertura', 'html'],
testTimeout: 15000,
}

export default config
11 changes: 10 additions & 1 deletion api/src/controllers/bookingController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import Property from '../models/Property'
import Notification from '../models/Notification'
import NotificationCounter from '../models/NotificationCounter'
import PushNotification from '../models/PushNotification'
import Location from '../models/Location'
import * as env from '../config/env.config'
import * as MailHelper from '../common/MailHelper'
import * as Helper from '../common/Helper'
Expand Down Expand Up @@ -160,6 +161,12 @@ export async function checkout(req: Request, res: Response) {
return res.sendStatus(204)
}

const location = await Location.findById(booking.location).populate<{ values: env.LocationValue[] }>('values')
if (!location) {
console.log(`Location ${booking.location} not found`)
return res.sendStatus(204)
}

const mailOptions = {
from: env.SMTP_FROM,
to: user.email,
Expand Down Expand Up @@ -206,10 +213,12 @@ export async function checkout(req: Request, res: Response) {
*/
async function notifyRenter(booking: env.Booking) {
const renter = await User.findById(booking.renter)

if (!renter) {
console.log(`Renter ${booking.renter} not found`)
return
}

if (renter.language) {
strings.setLanguage(renter.language)
}
Expand Down Expand Up @@ -475,7 +484,7 @@ export async function getBooking(req: Request, res: Response) {
return res.json(booking)
}

console.error('[booking.getBooking] Property not found:', id)
console.error('[booking.getBooking] Booking not found:', id)
return res.sendStatus(204)
} catch (err) {
console.error(`[booking.getBooking] ${strings.DB_ERROR} ${id}`, err)
Expand Down
12 changes: 11 additions & 1 deletion api/tests/TestHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import cookieParser from 'cookie-parser'
import bcrypt from 'bcrypt'
import * as movininTypes from 'movinin-types'
import { v1 as uuid } from 'uuid'
import mongoose from 'mongoose'
import app from '../src/app'
import * as env from '../src/config/env.config'
import User from '../src/models/User'
Expand All @@ -22,6 +23,7 @@ export function getAgencyName() {

const ADMIN_EMAIL = `${getName('admin')}@test.movinin.io`
const USER_EMAIL = `${getName('user')}@test.movinin.io`
export const USER_FULL_NAME = 'user'
export const PASSWORD = 'Un1tTest5'
export const LANGUAGE = 'en'
export const PAGE = 1
Expand All @@ -48,7 +50,7 @@ export async function initializeDatabase() {
ADMIN_USER_ID = user.id

// user
user = new User({ ...body, fullName: 'user', email: USER_EMAIL, type: movininTypes.UserType.User })
user = new User({ ...body, fullName: USER_FULL_NAME, email: USER_EMAIL, type: movininTypes.UserType.User })
await user.save()
expect(user.id).toBeDefined()
USER_ID = user.id
Expand Down Expand Up @@ -172,3 +174,11 @@ export async function createLocation(nameEN: string, nameFR: string) {
export function GetRandomEmail() {
return `random.${uuid()}@test.movinin.io`
}

export function GetRandromObjectId() {
return new mongoose.Types.ObjectId()
}

export function GetRandromObjectIdAsString() {
return GetRandromObjectId().toString()
}
136 changes: 118 additions & 18 deletions api/tests/booking.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import 'dotenv/config'
import request from 'supertest'
import * as movininTypes from 'movinin-types'
import { v1 as uuid } from 'uuid'
import app from '../src/app'
import * as DatabaseHelper from '../src/common/DatabaseHelper'
import * as TestHelper from './TestHelper'
import Property from '../src/models/Property'
import Booking from '../src/models/Booking'
import User from '../src/models/User'
import PushNotification from '../src/models/PushNotification'
import * as env from '../src/config/env.config'

let AGENCY_ID: string
let USER_ID: string
let RENTER1_ID: string
let RENTER2_ID: string
let LOCATION_ID: string
let PROPERTY1_ID: string
let PROPERTY2_ID: string
Expand All @@ -27,7 +31,7 @@ beforeAll(async () => {
AGENCY_ID = await TestHelper.createAgency(`${supplierName}@test.movinin.ma`, supplierName)

// get user id
USER_ID = TestHelper.getUserId()
RENTER1_ID = TestHelper.getUserId()

// create a location
LOCATION_ID = await TestHelper.createLocation('Location 1 EN', 'Location 1 FR')
Expand Down Expand Up @@ -99,7 +103,7 @@ describe('POST /api/create-booking', () => {
const payload: movininTypes.Booking = {
agency: AGENCY_ID,
property: PROPERTY1_ID,
renter: USER_ID,
renter: RENTER1_ID,
location: LOCATION_ID,
from: new Date(2024, 2, 1),
to: new Date(1990, 2, 4),
Expand All @@ -122,14 +126,14 @@ describe('POST /api/create-booking', () => {

describe('POST /api/checkout', () => {
it('should checkout', async () => {
let bookings = await Booking.find({ renter: USER_ID })
let bookings = await Booking.find({ renter: RENTER1_ID })
expect(bookings.length).toBe(1)

const payload: movininTypes.CheckoutPayload = {
booking: {
agency: AGENCY_ID,
property: PROPERTY1_ID,
renter: USER_ID,
renter: RENTER1_ID,
location: LOCATION_ID,
from: new Date(2024, 3, 1),
to: new Date(1990, 3, 4),
Expand All @@ -139,15 +143,51 @@ describe('POST /api/checkout', () => {
},
payLater: true,
}
let res = await request(app)
.post('/api/checkout')
.send(payload)
expect(res.statusCode).toBe(200)
bookings = await Booking.find({ renter: RENTER1_ID })
expect(bookings.length).toBeGreaterThan(1)

const res = await request(app)
payload.renter = {
fullName: 'renter',
email: TestHelper.GetRandomEmail(),
language: TestHelper.LANGUAGE,
}
res = await request(app)
.post('/api/checkout')
.send(payload)
expect(res.statusCode).toBe(200)
const renter2 = await User.findOne({ email: payload.renter.email })
expect(renter2).not.toBeNull()
RENTER2_ID = renter2?.id

payload.renter = undefined
res = await request(app)
.post('/api/checkout')
.send(payload)
expect(res.statusCode).toBe(200)

bookings = await Booking.find({ renter: USER_ID })
expect(bookings.length).toBeGreaterThan(1)
payload.booking!.property = TestHelper.GetRandromObjectIdAsString()
res = await request(app)
.post('/api/checkout')
.send(payload)
expect(res.statusCode).toBe(204)

payload.booking!.property = PROPERTY1_ID
payload.booking!.location = TestHelper.GetRandromObjectIdAsString()
res = await request(app)
.post('/api/checkout')
.send(payload)
expect(res.statusCode).toBe(204)

payload.booking!.agency = AGENCY_ID
payload.booking!.renter = TestHelper.GetRandromObjectIdAsString()
res = await request(app)
.post('/api/checkout')
.send(payload)
expect(res.statusCode).toBe(204)
})
})

Expand All @@ -159,7 +199,7 @@ describe('POST /api/update-booking', () => {
_id: BOOKING_ID,
agency: AGENCY_ID,
property: PROPERTY2_ID,
renter: USER_ID,
renter: RENTER1_ID,
location: LOCATION_ID,
from: new Date(2024, 2, 1),
to: new Date(1990, 2, 4),
Expand All @@ -168,7 +208,7 @@ describe('POST /api/update-booking', () => {
price: 4800,
}

const res = await request(app)
let res = await request(app)
.put('/api/update-booking')
.set(env.X_ACCESS_TOKEN, token)
.send(payload)
Expand All @@ -178,6 +218,44 @@ describe('POST /api/update-booking', () => {
expect(res.body.price).toBe(4800)
expect(res.body.status).toBe(movininTypes.BookingStatus.Paid)

payload._id = TestHelper.GetRandromObjectIdAsString()
res = await request(app)
.put('/api/update-booking')
.set(env.X_ACCESS_TOKEN, token)
.send(payload)
expect(res.statusCode).toBe(204)

// notifyDriver
payload._id = BOOKING_ID
payload.status = movininTypes.BookingStatus.Cancelled
payload.renter = TestHelper.GetRandromObjectIdAsString()
res = await request(app)
.put('/api/update-booking')
.set(env.X_ACCESS_TOKEN, token)
.send(payload)
expect(res.statusCode).toBe(200)

payload.renter = RENTER1_ID
payload.status = movininTypes.BookingStatus.Void
let pushNotification = new PushNotification({ user: payload.renter, token: uuid() })
await pushNotification.save()
res = await request(app)
.put('/api/update-booking')
.set(env.X_ACCESS_TOKEN, token)
.send(payload)
expect(res.statusCode).toBe(200)
await PushNotification.deleteOne({ _id: pushNotification._id })

payload.status = movininTypes.BookingStatus.Cancelled
pushNotification = new PushNotification({ user: payload.renter, token: '0' })
await pushNotification.save()
res = await request(app)
.put('/api/update-booking')
.set(env.X_ACCESS_TOKEN, token)
.send(payload)
expect(res.statusCode).toBe(200)
await PushNotification.deleteOne({ _id: pushNotification._id })

await TestHelper.signout(token)
})
})
Expand Down Expand Up @@ -209,13 +287,17 @@ describe('GET /api/booking/:id/:language', () => {
it('should get a booking', async () => {
const token = await TestHelper.signinAsAdmin()

const res = await request(app)
let res = await request(app)
.get(`/api/booking/${BOOKING_ID}/${TestHelper.LANGUAGE}`)
.set(env.X_ACCESS_TOKEN, token)

expect(res.statusCode).toBe(200)
expect(res.body.property._id).toBe(PROPERTY2_ID)

res = await request(app)
.get(`/api/booking/${TestHelper.GetRandromObjectIdAsString()}/${TestHelper.LANGUAGE}`)
.set(env.X_ACCESS_TOKEN, token)
expect(res.statusCode).toBe(204)

await TestHelper.signout(token)
})
})
Expand All @@ -227,15 +309,31 @@ describe('POST /api/bookings/:page/:size/:language', () => {
const payload: movininTypes.GetBookingsPayload = {
agencies: [AGENCY_ID],
statuses: [movininTypes.BookingStatus.Reserved],
filter: {
location: LOCATION_ID,
from: new Date(2024, 2, 1),
to: new Date(1990, 2, 4),
keyword: TestHelper.USER_FULL_NAME,
},
user: TestHelper.getUserId(),
property: PROPERTY2_ID,
}

const res = await request(app)
let res = await request(app)
.post(`/api/bookings/${TestHelper.PAGE}/${TestHelper.SIZE}/${TestHelper.LANGUAGE}`)
.set(env.X_ACCESS_TOKEN, token)
.send(payload)
expect(res.statusCode).toBe(200)
expect(res.body[0].resultData.length).toBe(1)

payload.filter!.keyword = BOOKING_ID
res = await request(app)
.post(`/api/bookings/${TestHelper.PAGE}/${TestHelper.SIZE}/${TestHelper.LANGUAGE}`)
.set(env.X_ACCESS_TOKEN, token)
.send(payload)

expect(res.statusCode).toBe(200)
expect(res.body[0].resultData.length).toBeGreaterThan(0)
expect(res.body[0].resultData.length).toBe(1)

await TestHelper.signout(token)
})
Expand All @@ -246,7 +344,7 @@ describe('GET /api/has-bookings/:renter', () => {
const token = await TestHelper.signinAsAdmin()

let res = await request(app)
.get(`/api/has-bookings/${USER_ID}`)
.get(`/api/has-bookings/${RENTER1_ID}`)
.set(env.X_ACCESS_TOKEN, token)

expect(res.statusCode).toBe(200)
Expand Down Expand Up @@ -288,8 +386,10 @@ describe('DELETE /api/delete-bookings', () => {
it('should delete bookings', async () => {
const token = await TestHelper.signinAsAdmin()

let bookings = await Booking.find({ renter: USER_ID })
expect(bookings.length).toBe(2)
const renters = [RENTER1_ID, RENTER2_ID]

let bookings = await Booking.find({ renter: { $in: renters } })
expect(bookings.length).toBeGreaterThan(0)

const payload: string[] = bookings.map((u) => u.id)

Expand All @@ -300,7 +400,7 @@ describe('DELETE /api/delete-bookings', () => {

expect(res.statusCode).toBe(200)

bookings = await Booking.find({ renter: USER_ID })
bookings = await Booking.find({ driver: { $in: renters } })
expect(bookings.length).toBe(0)

await TestHelper.signout(token)
Expand Down
5 changes: 2 additions & 3 deletions api/tests/user.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import path from 'path'
import fs from 'node:fs/promises'
import { v1 as uuid } from 'uuid'
import * as movininTypes from 'movinin-types'
import mongoose from 'mongoose'
import app from '../src/app'
import * as DatabaseHelper from '../src/common/DatabaseHelper'
import * as TestHelper from './TestHelper'
Expand Down Expand Up @@ -176,7 +175,7 @@ describe('GET /api/check-token/:type/:userId/:email/:token', () => {
expect(res.statusCode).toBe(204)

res = await request(app)
.get(`/api/check-token/${movininTypes.AppType.Frontend}/${new mongoose.Types.ObjectId().toString()}/${USER1_EMAIL}/${token}`)
.get(`/api/check-token/${movininTypes.AppType.Frontend}/${TestHelper.GetRandromObjectIdAsString()}/${USER1_EMAIL}/${token}`)
expect(res.statusCode).toBe(204)
})
})
Expand Down Expand Up @@ -213,7 +212,7 @@ describe('POST /api/activate', () => {

expect(res.statusCode).toBe(204)

payload.userId = new mongoose.Types.ObjectId().toString()
payload.userId = TestHelper.GetRandromObjectIdAsString()

res = await request(app)
.post('/api/activate')
Expand Down

0 comments on commit 3d16fa6

Please sign in to comment.