From a53224359f6836a77d4ad73eafb2ab25f9de4a60 Mon Sep 17 00:00:00 2001 From: abdulhakim2902 Date: Thu, 2 Sep 2021 15:22:38 +0700 Subject: [PATCH 1/5] given-instances.ts: added new instances --- src/__tests__/helpers/given-instances.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/__tests__/helpers/given-instances.ts b/src/__tests__/helpers/given-instances.ts index f460a39cf..361b39d78 100644 --- a/src/__tests__/helpers/given-instances.ts +++ b/src/__tests__/helpers/given-instances.ts @@ -28,6 +28,7 @@ import { ActivityLogRepository, CommentRepository, CurrencyRepository, + ExperienceRepository, FriendRepository, LikeRepository, NotificationRepository, @@ -36,6 +37,7 @@ import { TagRepository, TransactionRepository, UserCurrencyRepository, + UserExperienceRepository, UserRepository, UserSocialMediaRepository, } from '../../repositories'; @@ -468,6 +470,13 @@ export function givenExperience(experience?: Partial) { return new Experience(data); } +export function givenExperienceInstance( + experienceRepository: ExperienceRepository, + experience?: Partial, +) { + return experienceRepository.create(givenExperience(experience)); +} + export function givenUserExperience(userExperience?: Partial) { const data = Object.assign( { @@ -479,3 +488,10 @@ export function givenUserExperience(userExperience?: Partial) { ); return new UserExperience(data); } + +export function givenUserExperienceInstance( + userExperienceRepository: UserExperienceRepository, + userExperience?: Partial, +) { + return userExperienceRepository.create(givenUserExperience(userExperience)); +} From 4961eb4a3016f3d8fb2459a509b9bdc7c320e569 Mon Sep 17 00:00:00 2001 From: abdulhakim2902 Date: Thu, 2 Sep 2021 15:23:26 +0700 Subject: [PATCH 2/5] added experience integration test --- .../experience.controller.integration.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/__tests__/integration/controllers/experience.controller.integration.ts diff --git a/src/__tests__/integration/controllers/experience.controller.integration.ts b/src/__tests__/integration/controllers/experience.controller.integration.ts new file mode 100644 index 000000000..87ca2cc78 --- /dev/null +++ b/src/__tests__/integration/controllers/experience.controller.integration.ts @@ -0,0 +1,63 @@ +import {expect} from '@loopback/testlab'; +import {ExperienceController} from '../../../controllers'; +import {ExperienceRepository, UserRepository} from '../../../repositories'; +import { + givenEmptyDatabase, + givenExperienceInstance, + givenRepositories, + givenUserInstance, + testdb, +} from '../../helpers'; + +describe('ExperienceControllerIntegration', () => { + let userRepository: UserRepository; + let experienceRepository: ExperienceRepository; + let controller: ExperienceController; + + before(async () => { + ({userRepository, experienceRepository} = await givenRepositories(testdb)); + }); + + before(async () => { + controller = new ExperienceController(experienceRepository); + }); + + beforeEach(async () => { + await givenEmptyDatabase(testdb); + }); + + it('includes User in find method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const experience = await givenExperienceInstance(experienceRepository, { + createdBy: user.id, + }); + + const response = await controller.find({include: ['user']}); + + expect(response).to.containDeep([ + { + ...experience, + user: user, + }, + ]); + }); + + it('includes User in findById method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const experience = await givenExperienceInstance(experienceRepository, { + createdBy: user.id, + }); + const response = await controller.findById(experience.id ?? '', {include: ['user']}); + + expect(response).to.containDeep({ + ...experience, + user: user, + }); + }); +}); From 5bb25679842a5c2c4ad45b85a0009ca866e2c13f Mon Sep 17 00:00:00 2001 From: abdulhakim2902 Date: Thu, 2 Sep 2021 16:31:22 +0700 Subject: [PATCH 3/5] User Experience integration test --- .../user-experience.controller.integration.ts | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 src/__tests__/integration/controllers/user-experience.controller.integration.ts diff --git a/src/__tests__/integration/controllers/user-experience.controller.integration.ts b/src/__tests__/integration/controllers/user-experience.controller.integration.ts new file mode 100644 index 000000000..2a6e00093 --- /dev/null +++ b/src/__tests__/integration/controllers/user-experience.controller.integration.ts @@ -0,0 +1,172 @@ +import {expect} from '@loopback/testlab'; +import {UserExperienceController} from '../../../controllers'; +import { + ExperienceRepository, + UserExperienceRepository, + UserRepository, +} from '../../../repositories'; +import { + givenEmptyDatabase, + givenExperienceInstance, + givenRepositories, + givenUserExperienceInstance, + givenUserInstance, + testdb, +} from '../../helpers'; + +describe('UserExperienceControllerIntegration', () => { + let userRepository: UserRepository; + let experienceRepository: ExperienceRepository; + let userExperienceRepository: UserExperienceRepository; + let controller: UserExperienceController; + + before(async () => { + ({userRepository, experienceRepository, userExperienceRepository} = await givenRepositories( + testdb, + )); + }); + + before(async () => { + controller = new UserExperienceController( + userRepository, + userExperienceRepository, + experienceRepository, + ); + }); + + beforeEach(async () => { + await givenEmptyDatabase(testdb); + }); + + it('includes User in find method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const userExperience = await givenUserExperienceInstance(userExperienceRepository, { + userId: user.id, + }); + + const response = await controller.find({include: ['user']}); + + expect(response).to.containDeep([ + { + ...userExperience, + user: user, + }, + ]); + }); + + it('includes Experience in find method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const experience = await givenExperienceInstance(experienceRepository, {createdBy: user.id}); + + const userExperience = await givenUserExperienceInstance(userExperienceRepository, { + experienceId: experience.id, + }); + + const response = await controller.find({include: ['experience']}); + + expect(response).to.containDeep([ + { + ...userExperience, + experience: experience, + }, + ]); + }); + + it('includes both User and Experience in find method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const experience = await givenExperienceInstance(experienceRepository, { + createdBy: user.id, + }); + + const userExperience = await givenUserExperienceInstance(userExperienceRepository, { + userId: user.id, + experienceId: experience.id, + }); + + const response = await controller.find({include: ['user', 'experience']}); + + expect(response).to.containDeep([ + { + ...userExperience, + user: user, + experience: experience, + }, + ]); + }); + + it('includes User in findById method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const userExperience = await givenUserExperienceInstance(userExperienceRepository, { + userId: user.id, + }); + + const response = await controller.findById(userExperience.id, { + include: ['user'], + }); + + expect(response).to.containDeep({ + ...userExperience, + user: user, + }); + }); + + it('includes Experience in findById method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const experience = await givenExperienceInstance(experienceRepository, { + createdBy: user.id, + }); + + const userExperience = await givenUserExperienceInstance(userExperienceRepository, { + experienceId: experience.id, + }); + + const response = await controller.findById(userExperience.id, { + include: ['experience'], + }); + + expect(response).to.containDeep({ + ...userExperience, + experience: experience, + }); + }); + + it('includes both User and Experience in findById method result', async () => { + const user = await givenUserInstance(userRepository, { + id: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee618bc', + }); + + const experience = await givenExperienceInstance(experienceRepository, { + createdBy: user.id, + }); + + const userExperience = await givenUserExperienceInstance(userExperienceRepository, { + userId: user.id, + experienceId: experience.id, + }); + + const response = await controller.findById(userExperience.id, { + include: ['user', 'experience'], + }); + + expect(response).to.containDeep({ + ...userExperience, + user: user, + experience: experience, + }); + }); +}); From 58006a0984a29827cc1d48801ffcf01a3f00e26a Mon Sep 17 00:00:00 2001 From: abdulhakim2902 Date: Thu, 2 Sep 2021 17:01:54 +0700 Subject: [PATCH 4/5] given-repositories.ts: added new repository helpers --- src/__tests__/helpers/given-repositories.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/__tests__/helpers/given-repositories.ts b/src/__tests__/helpers/given-repositories.ts index 1e397f058..45d27b1ea 100644 --- a/src/__tests__/helpers/given-repositories.ts +++ b/src/__tests__/helpers/given-repositories.ts @@ -3,6 +3,7 @@ import { ActivityLogRepository, CommentRepository, CurrencyRepository, + ExperienceRepository, FriendRepository, LikeRepository, NotificationRepository, @@ -11,6 +12,7 @@ import { TagRepository, TransactionRepository, UserCurrencyRepository, + UserExperienceRepository, UserRepository, UserSocialMediaRepository, } from '../../repositories'; @@ -66,3 +68,11 @@ export async function givenUserCurrencyRepository(app: MyriadApiApplication) { export async function givenActivityLogRepository(app: MyriadApiApplication) { return app.getRepository(ActivityLogRepository); } + +export async function givenExperienceRepository(app: MyriadApiApplication) { + return app.getRepository(ExperienceRepository); +} + +export async function givenUserExperienceRepository(app: MyriadApiApplication) { + return app.getRepository(UserExperienceRepository); +} From 979dbf2a4d668d6978c65f093abc96f2e1bc51ed Mon Sep 17 00:00:00 2001 From: abdulhakim2902 Date: Thu, 2 Sep 2021 17:02:35 +0700 Subject: [PATCH 5/5] given-instances.ts: added new instances --- src/__tests__/helpers/given-instances.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/__tests__/helpers/given-instances.ts b/src/__tests__/helpers/given-instances.ts index 361b39d78..d9f98073b 100644 --- a/src/__tests__/helpers/given-instances.ts +++ b/src/__tests__/helpers/given-instances.ts @@ -477,6 +477,29 @@ export function givenExperienceInstance( return experienceRepository.create(givenExperience(experience)); } +export async function givenMultipleExperienceInstances(experienceRepository: ExperienceRepository) { + return Promise.all([ + givenExperienceInstance(experienceRepository), + givenExperienceInstance(experienceRepository, { + name: 'cryptocurrency', + tags: ['cryptocurrency'], + people: [ + new People({ + id: '60efac8c565ab8004ed28ba7', + name: 'Gavin Wood', + username: 'gavofyork', + platform: 'twitter', + originUserId: '33962758', + profilePictureURL: + 'https://pbs.twimg.com/profile_images/981390758870683656/RxA_8cyN_400x400.jpg', + }), + ], + description: 'best projects in cryptoverse', + createdBy: '0x06cc7ed22ebd12ccc28fb9c0d14a5c4420a331d89a5fef48b915e8449ee61821', + }), + ]); +} + export function givenUserExperience(userExperience?: Partial) { const data = Object.assign( {