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
Commits on Source (18)
Showing
with 92 additions and 65 deletions
......@@ -47,12 +47,21 @@
"courriel",
"cpam",
"espace",
"friday",
"grandlyon",
"healthcheck",
"luxon",
"monday",
"nestjs",
"orientator",
"permanences",
"photonban",
"saturday",
"spyer",
"Unvalidated"
"sunday",
"thursday",
"tuesday",
"Unvalidated",
"wednesday"
]
}
......@@ -2,7 +2,7 @@
"name": "ram_server",
"private": true,
"version": "3.0.1",
"description": "Nest TypeScript starter repository",
"description": "Res'in API",
"license": "MIT",
"scripts": {
"build": "nest build",
......
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 { structuresDocumentDataMock } from '../../test/mock/data/structures.mock.data';
import { mockJwtAuthGuard } from '../../test/mock/guards/jwt-auth.mock.guard';
......@@ -88,7 +88,7 @@ describe('AdminController', () => {
updatedAt: new Date('2021-03-02T10:07:48.000Z'),
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule, SearchModule],
providers: [
{
......@@ -169,8 +169,10 @@ describe('AdminController', () => {
});
it('should get structure does not exist', async () => {
mockStructureService.findOne.mockResolvedValue(null);
try {
await adminController.validatePendingStructure(pendingStructureTest);
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('Structure does not exist');
expect(e.status).toBe(404);
......@@ -186,8 +188,10 @@ describe('AdminController', () => {
});
it('should get structure does not exist', async () => {
mockStructureService.findOne.mockResolvedValue(null);
try {
await adminController.refusePendingStructure(pendingStructureTest);
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('Structure does not exist');
expect(e.status).toBe(404);
......@@ -204,6 +208,7 @@ describe('AdminController', () => {
it('should return nonexisting user', async () => {
try {
await adminController.deleteUser({ id: 'userDoesNotExist' });
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe('Invalid user id');
expect(e.status).toBe(400);
......
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { AdminService } from './admin.service';
describe('AdminService', () => {
let adminService: AdminService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
providers: [AdminService],
}).compile();
......
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { version } from '../package.json';
import { AppController } from './app.controller';
describe('AppController', () => {
let app: TestingModule;
let appController: AppController;
beforeAll(async () => {
app = await Test.createTestingModule({
beforeEach(async () => {
const module = await Test.createTestingModule({
controllers: [AppController],
}).compile();
appController = module.get<AppController>(AppController);
});
describe('healthcheck', () => {
it('should return "Hello World!"', async () => {
const appController = app.get<AppController>(AppController);
const result = { status: 'API Online', uptime: 1, version: '' };
jest
.spyOn(appController, 'healthcheck')
.mockImplementation(async (): Promise<{ status; uptime; version }> => result);
const healthcheck = await appController.healthcheck();
expect(healthcheck.status).toBe(result.status);
expect(healthcheck.uptime).toBe(result.uptime);
it('should return healthcheck', async () => {
const healthcheck = appController.healthcheck();
expect(healthcheck.status).toBe('API Online');
expect(healthcheck.uptime).not.toBeNull();
expect(healthcheck.version).toBe(version);
});
});
});
......@@ -2,15 +2,10 @@ import { Controller, Get } from '@nestjs/common';
import { version } from '../package.json';
@Controller()
export class AppController {
private start: number;
private version: string = version;
constructor() {
this.start = Date.now();
}
private start = Date.now();
@Get('healthcheck')
async healthcheck() {
healthcheck() {
const now = Date.now();
return {
status: 'API Online',
......
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { appointmentMockData, singleAppointmentMock } from '../../test/mock/data/appointment.mock.data';
import { AppointmentController } from './appointment.controller';
import { Appointment } from './appointment.schema';
......@@ -14,7 +14,7 @@ describe('UserRegistryController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [],
providers: [
{
......
import { HttpModule } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import * as ejs from 'ejs';
import { appointmentMockData } from '../../test/mock/data/appointment.mock.data';
import { StructuresServiceMock } from '../../test/mock/services/structures.mock.service';
......@@ -38,7 +38,7 @@ describe('userRegistryService', () => {
const ejsSpy = jest.spyOn(ejs, 'renderFile');
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [MailerModule, HttpModule],
providers: [
AppointmentService,
......
......@@ -2,7 +2,7 @@ import { HttpService } from '@nestjs/axios';
import { JwtModule } from '@nestjs/jwt';
import { getModelToken } from '@nestjs/mongoose';
import { PassportModule } from '@nestjs/passport';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { AuthServiceMock } from '../../test/mock/services/auth.mock.service';
import { StructuresServiceMock } from '../../test/mock/services/structures.mock.service';
import { CategoriesService } from '../categories/services/categories.service';
......@@ -35,7 +35,7 @@ describe('AuthController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [
PassportModule,
MailerModule,
......@@ -111,15 +111,4 @@ describe('AuthController', () => {
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
});
});
it('should not login invalid user', async () => {
const loginCredentials: LoginDto = { email: 'jacques.dupont@mii.com', password: process.env.USER_PWD };
try {
await authController.login(loginCredentials);
} catch (e) {
expect(e.response).toBe('Invalid credentials');
expect(e.message).toBe('Invalid credentials');
expect(e.status).toBe(401);
}
});
});
import { JwtService } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { JwtServiceMock } from '../../test/mock/services/jwt.mock.service';
import { UsersServiceMock } from '../../test/mock/services/user.mock.service';
import { ConfigurationModule } from '../configuration/configuration.module';
......@@ -13,7 +13,7 @@ describe('AuthService', () => {
let authService: AuthService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [PassportModule, MailerModule, ConfigurationModule],
providers: [
AuthService,
......@@ -62,7 +62,6 @@ describe('AuthService', () => {
_createToken = jest.spyOn(AuthService.prototype as any, '_createToken');
});
it('should login user pauline.dupont@mii.com', async () => {
// Token creation mock
const token = {
accessToken:
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InBhdWxpbmUuZHVwb250QG1paS5jb20iLCJyb2xlIjowLCJpYXQiOjE2MjAwNDg5MDYsImV4cCI6MTYyMDEzNTMwNn0.jbLazQNJzU_X9Yp1S7XH1rYD5W7yyd1pdGebmkyTMB4',
......@@ -82,7 +81,6 @@ describe('AuthService', () => {
});
it('should login not login user jacques.dupont@mii.com because email is not verified', async () => {
// Token creation mock
const token = {
accessToken:
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InBhdWxpbmUuZHVwb250QG1paS5jb20iLCJyb2xlIjowLCJpYXQiOjE2MjAwNDg5MDYsImV4cCI6MTYyMDEzNTMwNn0.jbLazQNJzU_X9Yp1S7XH1rYD5W7yyd1pdGebmkyTMB4',
......@@ -93,6 +91,7 @@ describe('AuthService', () => {
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: 'test1A!!' }; //NOSONAR
try {
await authService.login(loginDto);
expect(true).toBe(false);
} catch (e) {
expect(e.response).toBe('Unverified user');
expect(e.message).toBe('Unverified user');
......@@ -101,7 +100,6 @@ describe('AuthService', () => {
});
it('should login not login user toto@mii.com because email does not exist', async () => {
// Token creation mock
const token = {
accessToken:
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InBhdWxpbmUuZHVwb250QG1paS5jb20iLCJyb2xlIjowLCJpYXQiOjE2MjAwNDg5MDYsImV4cCI6MTYyMDEzNTMwNn0.jbLazQNJzU_X9Yp1S7XH1rYD5W7yyd1pdGebmkyTMB4',
......@@ -112,6 +110,7 @@ describe('AuthService', () => {
const loginDto: LoginDto = { email: 'toto@mii.com', password: 'test1A!!' }; //NOSONAR
try {
await authService.login(loginDto);
expect(true).toBe(false);
} catch (e) {
expect(e.response).toBe('Invalid credentials');
expect(e.message).toBe('Invalid credentials');
......@@ -120,7 +119,6 @@ describe('AuthService', () => {
});
it('should login not login user toto@mii.com because password is invalid', async () => {
// Token creation mock
const token = {
accessToken:
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InBhdWxpbmUuZHVwb250QG1paS5jb20iLCJyb2xlIjowLCJpYXQiOjE2MjAwNDg5MDYsImV4cCI6MTYyMDEzNTMwNn0.jbLazQNJzU_X9Yp1S7XH1rYD5W7yyd1pdGebmkyTMB4',
......@@ -131,6 +129,7 @@ describe('AuthService', () => {
const loginDto: LoginDto = { email: 'jacques.dupont@mii.com', password: '1' }; //NOSONAR
try {
await authService.login(loginDto);
expect(true).toBe(false);
} catch (e) {
expect(e.response).toBe('Invalid credentials');
expect(e.message).toBe('Invalid credentials');
......
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { mockJwtAuthGuard } from '../../../test/mock/guards/jwt-auth.mock.guard';
import { mockRoleGuard } from '../../../test/mock/guards/role.mock.guard';
import { CategoriesServiceMock } from '../../../test/mock/services/categories.mock.service';
......@@ -13,7 +13,7 @@ describe('CategoriesAccompagnementController', () => {
let categoriesController: CategoriesController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [],
providers: [
{
......
import { HttpModule } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { CreateCategories } from '../dto/create-categories.dto';
import { CategoriesService } from './categories.service';
......@@ -16,7 +16,7 @@ describe('CategoriesService', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [HttpModule],
providers: [
CategoriesService,
......
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { ConfigurationService } from './configuration.service';
describe('ConfigurationService', () => {
......@@ -7,7 +7,7 @@ describe('ConfigurationService', () => {
process.env.NODE_ENV = 'local';
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [],
providers: [ConfigurationService],
}).compile();
......
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { MailerModule } from '../mailer/mailer.module';
import { ContactController } from './contact.controller';
import { ContactService } from './contact.service';
......@@ -12,7 +12,7 @@ describe('ContactController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [MailerModule],
providers: [
{
......
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { MailerMockService } from '../../test/mock/services/mailer.mock.service';
import { ConfigurationService } from '../configuration/configuration.service';
import { MailerModule } from '../mailer/mailer.module';
......@@ -12,7 +12,7 @@ describe('ContactService', () => {
let contactService: ContactService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [HttpModule, MailerModule],
providers: [ContactService, ConfigurationService, { provide: MailerService, useClass: MailerMockService }],
}).compile();
......
import { HttpService } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import {
espaceCoopCNFSMockData,
espaceCoopPermanencesMockData,
......@@ -26,7 +26,7 @@ describe('EspaceCoopCNFSService', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
providers: [
EspaceCoopService,
{
......
......@@ -6,6 +6,7 @@ import { IndicatorController } from './controllers/indicator.controller';
import { IndicatorService } from './services/indicator.service';
import { UsersModule } from '../users/users.module';
import { User, UserSchema } from '../users/schemas/user.schema';
import { StructuresModule } from '../structures/structures.module';
@Module({
imports: [
......@@ -15,6 +16,7 @@ import { User, UserSchema } from '../users/schemas/user.schema';
]),
UsersModule,
HttpModule,
StructuresModule,
],
controllers: [IndicatorController],
providers: [IndicatorService],
......
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { mockIndicator, mockIndicators } from '../../../test/mock/data/indicators/orientationIndicators.mock.data';
import { User } from '../../users/schemas/user.schema';
import { OrientationIndicator } from '../schemas/orientation-indicator.schema';
import { IndicatorService } from './indicator.service';
import { StructuresService } from '../../structures/services/structures.service';
import { StructuresServiceMock } from '../../../test/mock/services/structures.mock.service';
describe('IndicatorService', () => {
let indicatorService: IndicatorService;
......@@ -15,7 +17,7 @@ describe('IndicatorService', () => {
create: jest.fn(),
};
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
providers: [
IndicatorService,
{
......@@ -26,6 +28,10 @@ describe('IndicatorService', () => {
provide: getModelToken(User.name),
useValue: User,
},
{
provide: StructuresService,
useClass: StructuresServiceMock,
},
],
}).compile();
......
......@@ -4,18 +4,38 @@ import { Model } from 'mongoose';
import { OrientationIndicator, OrientationIndicatorDocument } from '../schemas/orientation-indicator.schema';
import { User } from '../../users/schemas/user.schema';
import { IUser } from '../../users/interfaces/user.interface';
import { StructuresService } from '../../structures/services/structures.service';
@Injectable()
export class IndicatorService {
private readonly logger = new Logger(IndicatorService.name);
constructor(
private structuresService: StructuresService,
@InjectModel(OrientationIndicator.name) private OrientationIndicatorModel: Model<OrientationIndicatorDocument>,
@InjectModel(User.name) private userModel: Model<IUser>
) {}
public async createOrientation(orientationIndicator: OrientationIndicator): Promise<OrientationIndicator> {
this.logger.debug('new orientation indicator');
// Remove name (because the API is public)
orientationIndicator.origin.nom = undefined;
if (orientationIndicator.origin.adresse?.postcode && orientationIndicator.origin.adresse.commune) {
const inseeCode = await this.structuresService.getInseeCode(
orientationIndicator.origin.adresse?.postcode,
orientationIndicator.origin.adresse?.commune
);
// Remove address of the origin and add inseeCode
orientationIndicator.origin.adresse.numero = undefined;
orientationIndicator.origin.adresse.commune = undefined;
orientationIndicator.origin.adresse.postcode = undefined;
orientationIndicator.origin.adresse['coordinates'] = undefined;
orientationIndicator.origin.adresse.inseeCode = inseeCode;
}
return this.OrientationIndicatorModel.create(orientationIndicator);
}
......
import { HttpModule, HttpService } from '@nestjs/axios';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { AxiosResponse } from 'axios';
import * as fs from 'fs';
import * as path from 'path';
......@@ -15,7 +15,7 @@ describe('MailerService', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [HttpModule],
providers: [
MailerService,
......@@ -70,6 +70,7 @@ describe('MailerService', () => {
httpServiceMock.post.mockImplementationOnce(() => throwError(result));
try {
await mailerService.send('a@a.com', 'test', '<p>This is a test</p>');
expect(true).toBe(false);
} catch (e) {
expect(e.data.detail).toBe('There was a validation error');
expect(e.status).toBe(400);
......@@ -90,6 +91,7 @@ describe('MailerService', () => {
jest.spyOn(fs, 'existsSync').mockImplementationOnce(() => false);
try {
expect(mailerService.getTemplateLocation(filename)).toBe('/path/to/template');
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe(`Email template '${filename}' cannot be found in ./src/mailer/mail-templates`);
}
......@@ -113,6 +115,7 @@ describe('MailerService', () => {
jest.spyOn(fs, 'existsSync').mockImplementationOnce(() => false);
try {
expect(mailerService.loadJsonConfig(filename)).toBe('/path/to/template');
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe(
`Email json definition file '${filename}' cannot be found in ./src/mailer/mail-templates`
......