From ec3260c0fe4871963ab8992984f51ea975412608 Mon Sep 17 00:00:00 2001 From: aelassas Date: Sat, 16 Mar 2024 06:34:23 +0000 Subject: [PATCH] Update user.test.ts --- api/coverage/cobertura-coverage.xml | 400 ++++++++++++------------ api/src/controllers/agencyController.ts | 20 +- api/src/controllers/userController.ts | 10 +- api/tests/user.test.ts | 149 ++++++++- 4 files changed, 356 insertions(+), 223 deletions(-) diff --git a/api/coverage/cobertura-coverage.xml b/api/coverage/cobertura-coverage.xml index e09d1ea9..2a5ba81f 100644 --- a/api/coverage/cobertura-coverage.xml +++ b/api/coverage/cobertura-coverage.xml @@ -1,6 +1,6 @@ - + C:\dev\movinin\src\api @@ -53,14 +53,14 @@ - + - + - + - + @@ -70,8 +70,8 @@ - - + + @@ -117,9 +117,9 @@ - + - + @@ -127,14 +127,14 @@ - + - + - + - + @@ -147,9 +147,9 @@ - + - + @@ -157,9 +157,9 @@ - + - + @@ -169,57 +169,57 @@ - - - - + + + + - - - - + + + + - - - + + + - + - + - + - + - + - + - + - + - - - - - + + + + + - + @@ -320,9 +320,9 @@ - + - + @@ -349,19 +349,19 @@ - + - + - + - + - + @@ -442,23 +442,21 @@ - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + @@ -1372,21 +1370,21 @@ - + - + - + - + - + @@ -1394,9 +1392,9 @@ - + - + @@ -1464,9 +1462,9 @@ - + - + @@ -1489,14 +1487,14 @@ - + - + - + - + @@ -1519,9 +1517,9 @@ - + - + @@ -1538,51 +1536,51 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + - + - - - - - + + + + + - - - + + + @@ -1590,14 +1588,14 @@ - + - - - - - - + + + + + + @@ -1788,30 +1786,30 @@ - - - - + + + + - - + + - - - - - - - - - - + + + + + + + + + + - - - - + + + + @@ -1865,43 +1863,43 @@ - + - - - + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - + + + @@ -1963,18 +1961,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -1986,21 +1984,21 @@ - - + + - - + + - - - - + + + + @@ -2044,45 +2042,45 @@ - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + @@ -2175,17 +2173,17 @@ - + - + - + - + diff --git a/api/src/controllers/agencyController.ts b/api/src/controllers/agencyController.ts index a040be86..697928d3 100644 --- a/api/src/controllers/agencyController.ts +++ b/api/src/controllers/agencyController.ts @@ -230,12 +230,10 @@ export const getAgencies = async (req: Request, res: Response) => { { collation: { locale: env.DEFAULT_LANGUAGE, strength: 2 } }, ) - if (data.length > 0) { - data[0].resultData = data[0].resultData.map((agency: env.User) => { - const { _id, fullName, avatar } = agency - return { _id, fullName, avatar } - }) - } + data[0].resultData = data[0].resultData.map((agency: env.User) => { + const { _id, fullName, avatar } = agency + return { _id, fullName, avatar } + }) return res.json(data) } catch (err) { @@ -263,12 +261,10 @@ export const getAllAgencies = async (req: Request, res: Response) => { { collation: { locale: env.DEFAULT_LANGUAGE, strength: 2 } }, ) - if (data.length > 0) { - data = data.map((agency: env.User) => { - const { _id, fullName, avatar } = agency - return { _id, fullName, avatar } - }) - } + data = data.map((agency: env.User) => { + const { _id, fullName, avatar } = agency + return { _id, fullName, avatar } + }) return res.json(data) } catch (err) { diff --git a/api/src/controllers/userController.ts b/api/src/controllers/userController.ts index dcdebb47..2b85dc95 100644 --- a/api/src/controllers/userController.ts +++ b/api/src/controllers/userController.ts @@ -945,7 +945,7 @@ export const createAvatar = async (req: Request, res: Response) => { await fs.writeFile(filepath, req.file.buffer) return res.json(filename) } catch (err) { - console.error(`[user.createAvatar] ${i18n.t('DB_ERROR')} ${req.file && req.file.originalname}`, err) + console.error(`[user.createAvatar] ${i18n.t('DB_ERROR')}`, err) return res.status(400).send(i18n.t('ERROR') + err) } } @@ -972,7 +972,7 @@ export const updateAvatar = async (req: Request, res: Response) => { const user = await User.findById(userId) if (user) { - if (user.avatar && !user.avatar.startsWith('http')) { + if (user.avatar) { const avatar = path.join(env.CDN_USERS, user.avatar) if (await helper.exists(avatar)) { @@ -1013,7 +1013,7 @@ export const deleteAvatar = async (req: Request, res: Response) => { const user = await User.findById(userId) if (user) { - if (user.avatar && !user.avatar.startsWith('http')) { + if (user.avatar) { const avatar = path.join(env.CDN_USERS, user.avatar) if (await helper.exists(avatar)) { await fs.unlink(avatar) @@ -1189,8 +1189,8 @@ export const getUsers = async (req: Request, res: Response) => { ], } - if ($match.$and && userId) { - $match.$and.push({ _id: { $ne: new mongoose.Types.ObjectId(userId) } }) + if (userId) { + $match.$and!.push({ _id: { $ne: new mongoose.Types.ObjectId(userId) } }) } const users = await User.aggregate( diff --git a/api/tests/user.test.ts b/api/tests/user.test.ts index 80449f31..f68c6658 100644 --- a/api/tests/user.test.ts +++ b/api/tests/user.test.ts @@ -76,7 +76,7 @@ describe('POST /api/sign-up', () => { .post('/api/sign-up') .send(payload) expect(res.statusCode).toBe(200) - const user = await User.findOne({ email: USER1_EMAIL }) + let user = await User.findOne({ email: USER1_EMAIL }) expect(user).not.toBeNull() USER1_ID = user?.id expect(user?.type).toBe(movininTypes.UserType.User) @@ -89,6 +89,17 @@ describe('POST /api/sign-up', () => { expect(token).not.toBeNull() expect(token?.token.length).toBeGreaterThan(0) + const email = testHelper.GetRandomEmail() + payload.email = email + payload.avatar = `${uuid()}.jpg` + res = await request(app) + .post('/api/sign-up') + .send(payload) + expect(res.statusCode).toBe(200) + user = await User.findOne({ email }) + expect(user).not.toBeNull() + await user?.deleteOne() + res = await request(app) .post('/api/sign-up') expect(res.statusCode).toBe(400) @@ -152,7 +163,7 @@ describe('POST /api/create-user', () => { .set(env.X_ACCESS_TOKEN, token) .send(payload) expect(res.statusCode).toBe(200) - const user = await User.findOne({ email: USER2_EMAIL }) + let user = await User.findOne({ email: USER2_EMAIL }) expect(user).not.toBeNull() USER2_ID = user?.id expect(user?.type).toBe(movininTypes.UserType.User) @@ -168,6 +179,19 @@ describe('POST /api/create-user', () => { expect(userToken?.token.length).toBeGreaterThan(0) await userToken?.deleteOne() + let email = testHelper.GetRandomEmail() + payload.email = email + payload.avatar = undefined + res = await request(app) + .post('/api/create-user') + .set(env.X_ACCESS_TOKEN, token) + .send(payload) + expect(res.statusCode).toBe(200) + user = await User.findOne({ email }) + expect(user).not.toBeNull() + await user?.deleteOne() + + payload.email = USER2_EMAIL payload.avatar = 'unknown.jpg' res = await request(app) .post('/api/create-user') @@ -180,7 +204,7 @@ describe('POST /api/create-user', () => { .set(env.X_ACCESS_TOKEN, token) expect(res.statusCode).toBe(400) - const email = testHelper.GetRandomEmail() + email = testHelper.GetRandomEmail() payload.email = email payload.password = 'password' res = await request(app) @@ -625,6 +649,26 @@ describe('POST /api/update-user', () => { expect(user?.bio).toBe(payload.bio) expect(user?.payLater).toBeFalsy() + const { fullName, payLater } = (user!) + payload!.fullName = '' + payload!.birthDate = undefined + payload!.type = undefined + payload.payLater = undefined + res = await request(app) + .post('/api/update-user') + .set(env.X_ACCESS_TOKEN, token) + .send(payload) + expect(res.statusCode).toBe(200) + user = await User.findById(USER1_ID) + expect(user).not.toBeNull() + expect(user?.type).toBe(movininTypes.UserType.Agency) + expect(user?.fullName).toBe(fullName) + expect(user?.birthDate).toBeUndefined() + expect(user?.phone).toBe(payload.phone) + expect(user?.location).toBe(payload.location) + expect(user?.bio).toBe(payload.bio) + expect(user?.payLater).toBe(payLater) + payload._id = testHelper.GetRandromObjectIdAsString() res = await request(app) .post('/api/update-user') @@ -788,13 +832,33 @@ describe('POST /api/update-avatar/:userId', () => { .attach('image', AVATAR2_PATH) expect(res.statusCode).toBe(200) const filename = res.body as string - const avatarExists = await helper.exists(path.resolve(env.CDN_USERS, filename)) + let avatarExists = await helper.exists(path.resolve(env.CDN_USERS, filename)) expect(avatarExists).toBeTruthy() const user = await User.findById(USER1_ID) expect(user).not.toBeNull() expect(user?.avatar).toBeDefined() expect(user?.avatar).not.toBeNull() + user!.avatar = undefined + await user?.save() + res = await request(app) + .post(`/api/update-avatar/${USER1_ID}`) + .set(env.X_ACCESS_TOKEN, token) + .attach('image', AVATAR2_PATH) + expect(res.statusCode).toBe(200) + avatarExists = await helper.exists(path.resolve(env.CDN_USERS, filename)) + expect(avatarExists).toBeTruthy() + + user!.avatar = `${uuid()}.jpg` + await user?.save() + res = await request(app) + .post(`/api/update-avatar/${USER1_ID}`) + .set(env.X_ACCESS_TOKEN, token) + .attach('image', AVATAR2_PATH) + expect(res.statusCode).toBe(200) + avatarExists = await helper.exists(path.resolve(env.CDN_USERS, filename)) + expect(avatarExists).toBeTruthy() + res = await request(app) .post(`/api/update-avatar/${USER1_ID}`) .set(env.X_ACCESS_TOKEN, token) @@ -837,6 +901,20 @@ describe('POST /api/delete-avatar/:userId', () => { expect(user).not.toBeNull() expect(user?.avatar).toBeUndefined() + user!.avatar = undefined + await user?.save() + res = await request(app) + .post(`/api/delete-avatar/${USER1_ID}`) + .set(env.X_ACCESS_TOKEN, token) + expect(res.statusCode).toBe(200) + + user!.avatar = `${uuid()}.jpg` + await user?.save() + res = await request(app) + .post(`/api/delete-avatar/${USER1_ID}`) + .set(env.X_ACCESS_TOKEN, token) + expect(res.statusCode).toBe(200) + res = await request(app) .post(`/api/delete-avatar/${testHelper.GetRandromObjectIdAsString()}`) .set(env.X_ACCESS_TOKEN, token) @@ -1002,6 +1080,14 @@ describe('POST /api/users/:page/:size', () => { expect(res.statusCode).toBe(200) expect(res.body[0].resultData.length).toBeGreaterThan(3) + payload.user = '' + res = await request(app) + .post(`/api/users/${testHelper.PAGE}/${testHelper.SIZE}`) + .set(env.X_ACCESS_TOKEN, token) + .send(payload) + expect(res.statusCode).toBe(200) + expect(res.body[0].resultData.length).toBeGreaterThan(3) + res = await request(app) .post(`/api/users/unknown/${testHelper.SIZE}`) .set(env.X_ACCESS_TOKEN, token) @@ -1017,6 +1103,9 @@ describe('POST /api/delete-users', () => { const token = await testHelper.signinAsAdmin() let payload: string[] = [USER1_ID, USER2_ID, ADMIN_ID] + const user1 = await User.findById(USER1_ID) + user1!.avatar = `${uuid()}.jpg` + await user1?.save() let users = await User.find({ _id: { $in: payload } }) expect(users.length).toBe(3) let res = await request(app) @@ -1055,7 +1144,7 @@ describe('POST /api/delete-users', () => { if (!await helper.exists(additionalImage2)) { fs.copyFile(additionalImage2Path, additionalImage2) } - const property = new Property({ + let property = new Property({ name: 'Beautiful House in Detroit', agency: agencyId, type: movininTypes.PropertyType.House, @@ -1080,6 +1169,56 @@ describe('POST /api/delete-users', () => { rentalTerm: movininTypes.RentalTerm.Monthly, }) await property.save() + property = new Property({ + name: 'Beautiful House in Detroit', + agency: agencyId, + type: movininTypes.PropertyType.House, + description: '

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium rem aperiam, veritatis et quasi.

', + image: mainImageName, + images: undefined, + bedrooms: 3, + bathrooms: 2, + kitchens: 1, + parkingSpaces: 1, + size: 200, + petsAllowed: false, + furnished: true, + aircon: true, + minimumAge: 21, + location: locationId, + address: '', + price: 4000, + hidden: true, + cancellation: 0, + available: false, + rentalTerm: movininTypes.RentalTerm.Monthly, + }) + await property.save() + property = new Property({ + name: 'Beautiful House in Detroit', + agency: agencyId, + type: movininTypes.PropertyType.House, + description: '

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium rem aperiam, veritatis et quasi.

', + image: `${uuid()}.jpg`, + images: [`${uuid()}.jpg`], + bedrooms: 3, + bathrooms: 2, + kitchens: 1, + parkingSpaces: 1, + size: 200, + petsAllowed: false, + furnished: true, + aircon: true, + minimumAge: 21, + location: locationId, + address: '', + price: 4000, + hidden: true, + cancellation: 0, + available: false, + rentalTerm: movininTypes.RentalTerm.Monthly, + }) + await property.save() const booking = new Booking({ agency: agencyId, property: property._id,