Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server
1 result
Show changes
Showing
with 335 additions and 186 deletions
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { Types } from 'mongoose';
import { ConfigurationModule } from '../../configuration/configuration.module';
import { CreateJobDto } from '../dto/create-job.dto';
......@@ -34,7 +34,7 @@ describe('JobsController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
{
......@@ -151,6 +151,7 @@ describe('JobsController', () => {
const req = { user: { _id: '6036721022462b001334c4bb', role: 0 } };
try {
await jobsController.createJob(req, { name: 'Dev', hasPersonalOffer: true, jobsGroup: null });
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('Job already exist');
expect(e.status).toBe(HttpStatus.UNPROCESSABLE_ENTITY);
......
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { Types } from 'mongoose';
import { ConfigurationModule } from '../../configuration/configuration.module';
import { CreateJobsGroupsDto } from '../dto/create-jobsGroups.dto';
......@@ -28,7 +28,7 @@ describe('JobsGroupsController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
{
......
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { multipleUsers } from '../../../test/mock/data/users.mock.data';
import { mockJwtAuthGuard } from '../../../test/mock/guards/jwt-auth.mock.guard';
import { mockRoleGuard } from '../../../test/mock/guards/role.mock.guard';
......@@ -22,7 +22,7 @@ describe('UserRegistryController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule],
providers: [
{
......
......@@ -53,7 +53,7 @@ export class UsersController {
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT')
@ApiOperation({ description: 'Get user profile' })
@ApiResponse({ status: HttpStatus.OK, description: 'Return user profil' })
@ApiResponse({ status: HttpStatus.OK, description: 'Return user profile' })
@ApiResponse({ status: HttpStatus.UNAUTHORIZED, description: 'User does not have sufficient rights' })
@Get('profile')
public getProfile(@Request() req) {
......@@ -63,7 +63,8 @@ export class UsersController {
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT')
@ApiOperation({ description: 'Set user profile with employer and job' })
@ApiResponse({ status: HttpStatus.OK, description: 'Return user profil' })
@ApiBody({ type: ProfileDto })
@ApiResponse({ status: HttpStatus.OK, description: 'Return user profile' })
@ApiResponse({ status: HttpStatus.BAD_REQUEST, description: 'Job does not exist' })
@ApiResponse({ status: HttpStatus.BAD_REQUEST, description: 'Employer does not exist' })
@Post('profile')
......@@ -79,17 +80,22 @@ export class UsersController {
this.logger.warn(`Job does not exist: ${profile.jobName}`);
throw new HttpException('Job does not exist', HttpStatus.BAD_REQUEST);
}
await this.usersService.updateUserProfile(req.user._id, employerDocument, jobDocument, profile.withAppointment);
return this.usersService.findOne(req.user.email);
const user = await this.usersService.updateUserProfile(
req.user._id,
employerDocument,
jobDocument,
profile.withAppointment
);
return user;
}
@UseGuards(JwtAuthGuard)
@ApiBearerAuth('JWT')
@ApiOperation({ description: 'Updates name, surname and phone number of a user' })
@ApiBody({ type: UpdateDetailsDto })
@ApiResponse({ status: HttpStatus.CREATED, description: 'Return user profil' })
@ApiResponse({ status: HttpStatus.CREATED, description: 'Return user profile' })
@ApiResponse({ status: HttpStatus.NOT_FOUND, description: 'User not found' })
@ApiResponse({ status: HttpStatus.BAD_REQUEST, description: 'Missing parametter' })
@ApiResponse({ status: HttpStatus.BAD_REQUEST, description: 'Missing parameter' })
@Post('details')
public async updateDetails(@Request() req, @Body() details: UpdateDetailsDto): Promise<User | HttpException> {
this.logger.debug('updateProfile details');
......@@ -239,7 +245,7 @@ export class UsersController {
this.structureService.sendStructureJoinRequest(userFromDb, structure, token[0]);
}
//add token in route + add infos in token
/** add token in route + add infos in token */
@Get('join-validate/:token/:status')
@ApiParam({ name: 'token', type: String, required: true })
@ApiParam({ name: 'status', type: String, required: true })
......@@ -250,7 +256,7 @@ export class UsersController {
id: string;
name: string;
}> {
const decoded: IPendingStructureToken = this.jwtService.decode(token) as IPendingStructureToken;
const decoded = this.jwtService.decode(token) as IPendingStructureToken;
const today = DateTime.local().setZone('utc', { keepLocalTime: true });
if (!token || !status) {
......@@ -272,7 +278,7 @@ export class UsersController {
if (
!userFromDb.pendingStructuresLink
.map((pending) => pending.id)
.filter((id) => id.equals(new Types.ObjectId(decoded.idStructure)))
.some((id) => id.equals(new Types.ObjectId(decoded.idStructure)))
) {
throw new HttpException('User not linked to structure', HttpStatus.NOT_FOUND);
}
......@@ -289,7 +295,7 @@ export class UsersController {
return { id: decoded.idStructure, name: structure.structureName };
}
// Cancel a user's join request
/** Cancel a user's join request */
@Get('join-cancel/:idStructure/:idUser')
@ApiParam({ name: 'idStructure', type: String, required: true })
@ApiParam({ name: 'idUser', type: String, required: true })
......@@ -307,7 +313,7 @@ export class UsersController {
if (
!userFromDb.pendingStructuresLink
.map((pending) => pending.id)
.filter((id) => id.equals(new Types.ObjectId(idStructure)))
.some((id) => id.equals(new Types.ObjectId(idStructure)))
) {
throw new HttpException('This structure is in pending state', HttpStatus.NOT_FOUND);
}
......
import { Reflector } from '@nestjs/core';
import { createMock } from '@golevelup/ts-jest';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { ExecutionContext } from '@nestjs/common';
import { UserRole } from '../enum/user-role.enum';
import { IsPersonalOfferOwnerGuard } from './isPersonalOfferOwner.guard';
......@@ -10,7 +10,7 @@ describe('isPersonalOfferOwner', () => {
let reflector: Reflector;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [],
providers: [
IsPersonalOfferOwnerGuard,
......@@ -63,8 +63,7 @@ describe('isPersonalOfferOwner', () => {
}),
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeTruthy();
});
......@@ -96,8 +95,7 @@ describe('isPersonalOfferOwner', () => {
}),
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeFalsy();
expect(reflector.get).toHaveBeenCalled();
});
......
import { Reflector } from '@nestjs/core';
import { createMock } from '@golevelup/ts-jest';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { ExecutionContext } from '@nestjs/common';
import { UserRole } from '../enum/user-role.enum';
import { IsStructureOwnerGuard } from './isStructureOwner.guard';
......@@ -10,7 +10,7 @@ describe('isStrructureOwner', () => {
let reflector: Reflector;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [],
providers: [
IsStructureOwnerGuard,
......@@ -63,8 +63,7 @@ describe('isStrructureOwner', () => {
}),
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeTruthy();
});
......@@ -96,8 +95,7 @@ describe('isStrructureOwner', () => {
}),
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeFalsy();
expect(reflector.get).toHaveBeenCalled();
});
......
import { Reflector } from '@nestjs/core';
import { createMock } from '@golevelup/ts-jest';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { RolesGuard } from './roles.guard';
import { ExecutionContext } from '@nestjs/common';
import { UserRole } from '../enum/user-role.enum';
......@@ -10,7 +10,7 @@ describe('RolesGuard', () => {
let reflector: Reflector;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [],
providers: [
RolesGuard,
......@@ -39,7 +39,7 @@ describe('RolesGuard', () => {
it('should skip(return true) if the `HasRoles` decorator is not set', async () => {
jest.spyOn(reflector, 'get').mockImplementation(() => null);
const context = createMock<ExecutionContext>();
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeTruthy();
expect(reflector.get).toHaveBeenCalled();
......@@ -56,7 +56,7 @@ describe('RolesGuard', () => {
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeTruthy();
expect(reflector.get).toHaveBeenCalled();
});
......@@ -72,7 +72,7 @@ describe('RolesGuard', () => {
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeFalsy();
expect(reflector.get).toHaveBeenCalled();
});
......@@ -88,7 +88,7 @@ describe('RolesGuard', () => {
}),
});
const result = await guard.canActivate(context);
const result = guard.canActivate(context);
expect(result).toBeTruthy();
expect(reflector.get).toHaveBeenCalled();
});
......
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { Types } from 'mongoose';
import { ConfigurationModule } from '../../configuration/configuration.module';
import { SearchModule } from '../../search/search.module';
......@@ -36,7 +36,7 @@ describe('EmployerSearchService Search cases', () => {
let employerSearchService: EmployerSearchService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [SearchModule, ConfigurationModule],
providers: [EmployerSearchService],
}).compile();
......
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { AxiosResponse } from 'axios';
import { Types } from 'mongoose';
import { ConfigurationModule } from '../../configuration/configuration.module';
......@@ -39,7 +39,7 @@ describe('EmployerService', () => {
getAdmins: jest.fn(),
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
EmployerService,
......@@ -303,6 +303,7 @@ describe('EmployerService', () => {
sourceEmployerId: '623aed68c5d45b6fbbaa7e60',
targetEmployerId: '623aed68c5d45b6fbbaa7e61',
});
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('Cannot operate on employer.');
expect(e.status).toBe(HttpStatus.NOT_FOUND);
......
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import * as ejs from 'ejs';
import { Types } from 'mongoose';
import { ConfigurationModule } from '../../configuration/configuration.module';
......@@ -72,7 +72,7 @@ describe('JobsService', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
JobsService,
......@@ -265,15 +265,11 @@ describe('JobsService', () => {
})
.mockResolvedValueOnce(result);
try {
const reply = await jobsService.mergeJob({
sourceJobId: '623aed68c5d45b6fbbaa7e60',
targetJobId: '623aed68c5d45b6fbbaa7e61',
});
expect(reply).toBe(result);
} catch (e) {
expect(e).toBe(null);
}
const reply = await jobsService.mergeJob({
sourceJobId: '623aed68c5d45b6fbbaa7e60',
targetJobId: '623aed68c5d45b6fbbaa7e61',
});
expect(reply).toBe(result);
});
it('should throw error if target job is not validated', async () => {
mockJobModel.exec
......
......@@ -154,7 +154,7 @@ export class JobsService {
}
public getJobsGroupsAttachedJobs(jobsGroupId: string): Promise<JobDocument[]> {
return this.jobModel.find({ jobsGroup: jobsGroupId }).exec();
return this.jobModel.find({ jobsGroup: jobsGroupId.toString() }).exec();
}
public isConseillerNumerique(jobId: Types.ObjectId) {
......
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { Types } from 'mongoose';
import { ConfigurationModule } from '../../configuration/configuration.module';
import { MailerService } from '../../mailer/mailer.service';
......@@ -47,7 +47,7 @@ describe('JobsGroupsService', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
JobsGroupsService,
......
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { multipleUsers } from '../../../test/mock/data/users.mock.data';
import { ConfigurationModule } from '../../configuration/configuration.module';
import { SearchModule } from '../../search/search.module';
......@@ -10,7 +10,7 @@ describe('UserRegistrySearchService Search cases', () => {
let userRegistrySearchService: UserRegistrySearchService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [SearchModule, ConfigurationModule],
providers: [UserRegistrySearchService],
}).compile();
......
import { HttpModule } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { Types } from 'mongoose';
import { multipleUsers } from '../../../test/mock/data/users.mock.data';
import { ConfigurationModule } from '../../configuration/configuration.module';
......@@ -40,7 +40,7 @@ describe('userRegistryService', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
UserRegistryService,
......
......@@ -2,7 +2,7 @@ import { HttpModule } from '@nestjs/axios';
import { HttpException, HttpStatus } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import * as bcrypt from 'bcrypt';
import { Types } from 'mongoose';
import { employersMockData } from '../../../test/mock/data/employers.mock.data';
......@@ -131,7 +131,7 @@ describe('UsersService', () => {
let usersService: UsersService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [HttpModule, MailerModule, ConfigurationModule],
providers: [
UsersService,
......@@ -313,7 +313,6 @@ describe('UsersService', () => {
jest.spyOn(usersService, 'findById').mockResolvedValue(null);
try {
await usersService.addPersonalOffer('abcd', personalOfferDocumentMock);
// Fail test if above expression doesn't throw anything.
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('User not found for the personal offer attachment');
......@@ -324,7 +323,6 @@ describe('UsersService', () => {
jest.spyOn(usersService, 'findById').mockResolvedValue(usersMockData[1]);
try {
await usersService.addPersonalOffer('6093ba0e2ab5775cfc01ed3e', personalOfferDocumentMock);
// Fail test if above expression doesn't throw anything.
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('Personal offer already exist in the user');
......
......@@ -446,11 +446,11 @@ export class UsersService {
}
public getJobAttachedUsers(jobId: JobDocument): Promise<IUser[]> {
return this.userModel.find({ job: jobId._id }).select('-password -job').exec();
return this.userModel.find({ job: jobId._id.toString() }).select('-password -job').exec();
}
public getEmployerAttachedUsers(employerId: EmployerDocument): Promise<IUser[]> {
return this.userModel.find({ employer: employerId._id }).select('-password -employer').exec();
return this.userModel.find({ employer: employerId._id.toString() }).select('-password -employer').exec();
}
public async populateJobswithUsers(jobs: JobDocument[]) {
......
import { Types } from 'mongoose';
import { IUser } from '../../../src/users/interfaces/user.interface';
import { IUserRegistry } from '../../../src/users/interfaces/userRegistry.interface';
import { User } from '../../../src/users/schemas/user.schema';
export const usersMockData: IUser[] = [
{
......@@ -222,8 +223,8 @@ export const userRegistryMockData: IUserRegistry = {
save: jest.fn(),
} as any;
export const mockUser = {
_id: 'id',
export const mockUser: User = {
// _id: 'id',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: true,
......@@ -234,4 +235,13 @@ export const mockUser = {
surname: 'Pauline',
personalOffers: [],
structuresLink: [new Types.ObjectId('6093ba0e2ab5775cfc01ed3e')],
createdAt: new Date(2024, 1, 1),
phone: '',
resetPasswordToken: '',
changeEmailToken: '',
newEmail: '',
pendingStructuresLink: [],
structureOutdatedMailSent: [],
unattachedSince: new Date(2024, 1, 1),
lastLoginDate: new Date(2024, 1, 1),
};
......@@ -1309,6 +1309,9 @@ export class StructuresServiceMock {
async updateDenormalizedFields() {
return;
}
async getInseeCode() {
return null;
}
}
export const mockSearchAdressBan: { features: PhotonPoints[] } = {
......