Skip to content

Commit

Permalink
fixed testing
Browse files Browse the repository at this point in the history
  • Loading branch information
abdulhakim2902 committed Dec 9, 2021
1 parent 7cf5fe4 commit 013cb30
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,7 @@ describe('UserControllerIntegration', () => {
});

before(async () => {
controller = new UserController(
userRepository,
activityLogRepository,
friendRepository,
);
controller = new UserController(userRepository, activityLogRepository);
});

beforeEach(async () => {
Expand Down
14 changes: 2 additions & 12 deletions src/__tests__/unit/user.controller.unit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,12 @@ import {
} from '@loopback/testlab';
import {UserController} from '../../controllers/user.controller';
import {User} from '../../models';
import {
ActivityLogRepository,
FriendRepository,
UserRepository,
} from '../../repositories';
import {ActivityLogRepository, UserRepository} from '../../repositories';
import {givenUser} from '../helpers';

describe('UserController', () => {
let userRepository: StubbedInstanceWithSinonAccessor<UserRepository>;
let activityLogRepository: StubbedInstanceWithSinonAccessor<ActivityLogRepository>;
let friendRepository: StubbedInstanceWithSinonAccessor<FriendRepository>;
let controller: UserController;
let aUser: User;
let aUserWithId: User;
Expand Down Expand Up @@ -85,7 +80,6 @@ describe('UserController', () => {
function resetRepositories() {
userRepository = createStubInstance(UserRepository);
activityLogRepository = createStubInstance(ActivityLogRepository);
friendRepository = createStubInstance(FriendRepository);
aUser = givenUser({
bio: 'Hello, my name is Abdul Hakim!',
});
Expand All @@ -106,10 +100,6 @@ describe('UserController', () => {
bio: 'Hello, my name is irman!',
});

controller = new UserController(
userRepository,
activityLogRepository,
friendRepository,
);
controller = new UserController(userRepository, activityLogRepository);
}
});
71 changes: 69 additions & 2 deletions src/controllers/friend.controller.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import {intercept} from '@loopback/core';
import {Filter, FilterExcludingWhere, repository} from '@loopback/repository';
import {
Count,
CountSchema,
Filter,
FilterExcludingWhere,
repository,
} from '@loopback/repository';
import {
del,
get,
Expand All @@ -10,9 +16,10 @@ import {
requestBody,
response,
} from '@loopback/rest';
import {FriendStatusType} from '../enums';
import {PaginationInterceptor} from '../interceptors';
import {ValidateFriendRequestInterceptor} from '../interceptors/validate-friend-request.interceptor';
import {Friend} from '../models';
import {Friend, User} from '../models';
import {FriendRepository} from '../repositories';
// import {authenticate} from '@loopback/authentication';

Expand Down Expand Up @@ -112,6 +119,66 @@ export class FriendController {
await this.friendRepository.updateById(id, friend);
}

@get('/friends/{requestorId}/mutual/{requesteeId}')
@response(200, {
description: 'Count mutual friends',
content: {
'application/json': {
schema: CountSchema,
},
},
})
async countMutual(
@param.path.string('requestorId') requestorId: string,
@param.path.string('requesteeId') requesteeId: string,
): Promise<Count> {
/* eslint-disable @typescript-eslint/no-explicit-any */
const collection = (
this.friendRepository.dataSource.connector as any
).collection(Friend.modelName);

const countMutual = await collection
.aggregate([
{
$match: {
$or: [
{
requestorId: requestorId,
status: FriendStatusType.APPROVED,
},
{
requestorId: requesteeId,
status: FriendStatusType.APPROVED,
},
],
},
},
{$group: {_id: '$requesteeId', count: {$sum: 1}}},
{$match: {count: 2}},
{$group: {_id: null, count: {$sum: 1}}},
{$project: {_id: 0}},
])
.get();

if (countMutual.length === 0) return {count: 0};
return countMutual[0];
}

@intercept(PaginationInterceptor.BINDING_KEY)
@get('/friends/{requestorId}/detail/{requesteeId}')
@response(200, {
description: 'Detai Mutual Friends',
content: {
'application/json': {
schema: User,
},
},
})
mutualDetail(
@param.path.string('requestorId') requestorId: string,
@param.path.string('requesteeId') requesteeId: string,
) {}

@intercept(ValidateFriendRequestInterceptor.BINDING_KEY)
@del('/friends/{id}')
@response(204, {
Expand Down

0 comments on commit 013cb30

Please sign in to comment.