Skip to content

Commit

Permalink
Add booking.test.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
aelassas committed Feb 17, 2024
1 parent 9505a84 commit 62b50a3
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 14 deletions.
45 changes: 35 additions & 10 deletions api/tests/TestHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ import request from 'supertest'
import cookieParser from 'cookie-parser'
import bcrypt from 'bcrypt'
import * as movininTypes from 'movinin-types'
import { v1 as uuid } from 'uuid'
import app from '../src/app'
import * as env from '../src/config/env.config'
import User from '../src/models/User'
import LocationValue from '../src/models/LocationValue'
import Location from '../src/models/Location'

const ADMIN_EMAIL = 'admin@test.movinin.io'
const ADMIN_EMAIL = `admin.${uuid()}@test.movinin.io`
const USER_EMAIL = `user.${uuid()}@test.movinin.io`
export const PASSWORD = 'Un1tTest5'
export const LANGUAGE = 'en'
export const PAGE = 1
Expand All @@ -24,34 +26,53 @@ export async function initializeDatabase() {
password: passwordHash,
type: movininTypes.UserType.Admin,
}
const user = new User(body)

// admin
let user = new User(body)
await user.save()
expect(user.id).toBeDefined()

// user
user = new User({ ...body, fullName: 'user', email: USER_EMAIL, type: movininTypes.UserType.User })
await user.save()
expect(user.id).toBeDefined()
}

export async function clearDatabase() {
const res = await User.deleteOne({ email: ADMIN_EMAIL })
expect(res.deletedCount).toBe(1)
const res = await User.deleteMany({ email: { $in: [ADMIN_EMAIL, USER_EMAIL] } })
expect(res.deletedCount).toBe(2)
}

export async function signinAsAdmin() {
const APP_TYPE = 'backend'
const getToken = (cookie: string) => {
const signedCookie = decodeURIComponent(cookie)
const token = cookieParser.signedCookie((signedCookie.match(`${env.X_ACCESS_TOKEN}=(s:.*?);`) ?? [])[1], env.COOKIE_SECRET) as string
return token
}

const signin = async (appType: movininTypes.AppType, email: string) => {
const signinRequest = await request(app)
.post(`/api/sign-in/${APP_TYPE}`)
.post(`/api/sign-in/${appType}`)
.send({
email: ADMIN_EMAIL,
email,
password: PASSWORD,
})

expect(signinRequest.statusCode).toBe(200)
const cookies = signinRequest.headers['set-cookie'] as unknown as string[]
const signedCookie = decodeURIComponent(cookies[1])
const token = cookieParser.signedCookie((signedCookie.match(`${env.X_ACCESS_TOKEN}=(s:.*?);`) ?? [])[1], env.COOKIE_SECRET) as string
expect(cookies.length).toBeGreaterThan(1)
const token = getToken(cookies[1])
expect(token).toBeDefined()
return token
}

export async function signinAsAdmin() {
return signin(movininTypes.AppType.Backend, ADMIN_EMAIL)
}

export async function signinAsUser() {
return signin(movininTypes.AppType.Frontend, USER_EMAIL)
}

export async function signout(token: string) {
const signoutRequest = await request(app)
.post('/api/sign-out')
Expand Down Expand Up @@ -112,3 +133,7 @@ export async function createLocation(nameEN: string, nameFR: string) {
expect(location.id).toBeDefined()
return location.id as string
}

export function getAgencyName() {
return `agency.${uuid()}`
}
131 changes: 131 additions & 0 deletions api/tests/booking.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import 'dotenv/config'
import * as DatabaseHelper from '../src/common/DatabaseHelper'
import * as TestHelper from './TestHelper'

let SUPPLIER_ID: string
let LOCATION_ID: string

//
// Connecting and initializing the database before running the test suite
//
beforeAll(async () => {
if (await DatabaseHelper.Connect(false)) {
await TestHelper.initializeDatabase()

// create a agency
const agencyName = TestHelper.getAgencyName()
SUPPLIER_ID = await TestHelper.createAgency(`${agencyName}@test.bookcars.ma`, agencyName)

// create a location
LOCATION_ID = await TestHelper.createLocation('Location 1 EN', 'Location 1 FR')
}
})

//
// Closing and cleaning the database connection after running the test suite
//
afterAll(async () => {
await TestHelper.clearDatabase()

// delete the agency
await TestHelper.deleteAgency(SUPPLIER_ID)

// delete the location
await TestHelper.deleteLocation(LOCATION_ID)

await DatabaseHelper.Close(false)
})

//
// Unit tests
//

describe('POST /api/create-booking', () => {
it('should create a booking', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('POST /api/book', () => {
it('should checkout', async () => {
const token = await TestHelper.signinAsUser()

// TODO

await TestHelper.signout(token)
})
})

describe('POST /api/update-booking', () => {
it('should update a booking', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('POST /api/update-booking-status', () => {
it('should update booking status', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('GET /api/booking/:id/:language', () => {
it('should get a booking', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('GET /api/bookings/:page/:size/:language', () => {
it('should get bookings', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('GET /api/has-bookings/:driver', () => {
it("should check driver's bookings", async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('POST /api/cancel-booking/:driver', () => {
it('should cancel a booking', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})

describe('DELETE /api/delete-bookings', () => {
it('should delete bookings', async () => {
const token = await TestHelper.signinAsAdmin()

// TODO

await TestHelper.signout(token)
})
})
10 changes: 6 additions & 4 deletions api/tests/property.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ beforeAll(async () => {
if (await DatabaseHelper.Connect(false)) {
await TestHelper.initializeDatabase()

// create two agencys
AGENCY1_ID = await TestHelper.createAgency('agency1@test.movinin.ma', 'agency1')
AGENCY2_ID = await TestHelper.createAgency('agency2@test.movinin.ma', 'agency2')
// create two agencies
const agencyName1 = TestHelper.getAgencyName()
const agencyName2 = TestHelper.getAgencyName()
AGENCY1_ID = await TestHelper.createAgency(`${agencyName1}@test.movinin.ma`, agencyName1)
AGENCY2_ID = await TestHelper.createAgency(`${agencyName2}@test.movinin.ma`, agencyName2)

// create two locations
LOCATION1_ID = await TestHelper.createLocation('Location 1 EN', 'Location 1 FR')
Expand All @@ -56,7 +58,7 @@ beforeAll(async () => {
afterAll(async () => {
await TestHelper.clearDatabase()

// delete agencys
// delete agencies
await TestHelper.deleteAgency(AGENCY1_ID)
await TestHelper.deleteAgency(AGENCY2_ID)

Expand Down

0 comments on commit 62b50a3

Please sign in to comment.