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 101 additions and 29 deletions
import { HttpService } from '@nestjs/axios';
import { Injectable, Logger } from '@nestjs/common';
import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { lastValueFrom } from 'rxjs';
......@@ -27,6 +27,13 @@ export class CategoriesService {
public async findCtmByInseeCode(inseeCode: string): Promise<Module> {
const ctm = await this.findOneComplete('ctm');
if (!ctm) {
this.logger.error(`CTM territories definition not found. For local dev, run init-ctm-territories.js script.`);
throw new HttpException(
`CTM territories definition not found in database. For local dev, run init-ctm-territories.js script.`,
HttpStatus.INTERNAL_SERVER_ERROR
);
}
return ctm.modules.find((ctm) => ctm.communes.includes(inseeCode));
}
......
export const configDev = {
url: process.env.MAIL_URL,
token: process.env.MAIL_TOKEN,
host: 'resin-dev.grandlyon.com',
host: process.env.APP_HOST,
protocol: 'https',
port: '443',
from: 'noreplyinclusionnumerique@grandlyon.com',
......
export const configProd = {
url: process.env.MAIL_URL,
token: process.env.MAIL_TOKEN,
host: 'resin.grandlyon.com',
host: process.env.APP_HOST,
protocol: 'https',
port: '443',
from: 'noreplyinclusionnumerique@grandlyon.com',
......
export const configRec = {
url: process.env.MAIL_URL,
token: process.env.MAIL_TOKEN,
host: 'resin-rec.grandlyon.com',
host: process.env.APP_HOST,
protocol: 'https',
port: '443',
from: 'noreplyinclusionnumerique@grandlyon.com',
......
export const config = {
url: process.env.MAIL_URL,
token: process.env.MAIL_TOKEN,
host: 'localhost',
host: process.env.APP_HOST || 'localhost',
protocol: 'http',
port: '4200',
from: 'noreplyinclusionnumerique@grandlyon.com',
......
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();
......@@ -33,7 +33,7 @@ describe('ConfigurationService', () => {
it('should init with dev conf', () => {
process.env.NODE_ENV = 'dev';
expect(configurationService.config.host).toBe('resin-dev.grandlyon.com');
expect(configurationService.config.from_name).toBe('[DEV] Réseau des acteurs de la médiation numérique');
});
});
......@@ -55,7 +55,7 @@ describe('ConfigurationService', () => {
it('should init with prod conf', () => {
process.env.NODE_ENV = 'production';
expect(configurationService.config.host).toBe('resin.grandlyon.com');
expect(configurationService.config.from_name).toBe('Réseau des acteurs de la médiation numérique');
});
});
......
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`
......
......@@ -72,7 +72,6 @@ export class MailerService {
/**
* Add site mail signature to a given html
* @param html
*/
public addSignature(html: string): string {
html += `<br /><br /><p>L’équipe projet inclusion numérique.</p><p style="font-family:helvetica;font-size:24px;font-weight:bold;margin:0;">rés<span style="color:red;font-weight:400;">’in</span></p><br /><br /><p>Ce mail est automatique. Merci de ne pas y répondre.<br/><br/>Pour nous contacter : <a href="mailto:inclusionnumerique@grandlyon.com">inclusionnumerique@grandlyon.com</a></p>`;
......
import { Db } from 'mongodb';
import { getDb } from '../migrations-utils/db';
export const up = async () => {
const db: Db = await getDb();
await db
.collection('categories')
.updateOne({ id: 'onlineProcedures' }, { $push: { modules: { id: 'disability', name: 'Handicap' } } });
console.log('Updated : "Handicap" added to "onlineProcedures" document in "categories" collection');
};
export const down = async () => {
const db: Db = await getDb();
await db
.collection('categories')
.updateOne({ id: 'onlineProcedures' }, { $pull: { modules: { id: 'disability', name: 'Handicap' } } });
console.log('Downgraded : "Handicap" removed from "onlineProcedures" document in "categories" collection');
};
import { Db } from 'mongodb';
import { getDb } from '../migrations-utils/db';
export const up = async () => {
const db: Db = await getDb();
await db
.collection('categories')
.updateOne({ id: 'onlineProcedures' }, { $pull: { modules: { id: 'disability', name: 'Handicap' } } });
console.log('Updated : "Handicap" removed to "onlineProcedures" document in "categories" collection');
};
export const down = async () => {
const db: Db = await getDb();
await db
.collection('categories')
.updateOne({ id: 'onlineProcedures' }, { $push: { modules: { id: 'disability', name: 'Handicap' } } });
console.log('Downgraded : "Handicap" added from "onlineProcedures" document in "categories" collection');
};
import { HttpModule } from '@nestjs/axios';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { ConfigurationModule } from '../configuration/configuration.module';
import { NewsletterSubscription } from './newsletter-subscription.schema';
import { NewsletterController } from './newsletter.controller';
......@@ -14,7 +14,7 @@ describe('NewsletterController', () => {
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [ConfigurationModule, HttpModule],
providers: [
NewsletterService,
......
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 { INewsletterSubscription } from './interface/newsletter-subscription.interface';
import { NewsletterSubscription } from './newsletter-subscription.schema';
import { NewsletterService } from './newsletter.service';
......@@ -28,7 +28,7 @@ describe('NewsletterService', () => {
beforeEach(async () => {
jest.resetModules(); // Most important - it clears the cache
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [HttpModule],
providers: [
NewsletterService,
......@@ -133,7 +133,6 @@ describe('NewsletterService', () => {
mockNewsletterModel.exec.mockResolvedValueOnce(undefined);
try {
await newsletterService.newsletterUnsubscribe('test@test.com');
// Fail test if above expression doesn't throw anything.
expect(true).toBe(false);
} catch (e) {
expect(e.message).toEqual('Email not found');
......
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { Test } from '@nestjs/testing';
import { onlineMediationMockData, singleOnlineMediationMock } from '../../test/mock/data/onlineMediation.mock.data';
import { OnlineMediationController } from './onlineMediation.controller';
import { OnlineMediation } from './onlineMediation.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 { onlineMediationMockData } from '../../test/mock/data/onlineMediation.mock.data';
import { ConfigurationService } from '../configuration/configuration.service';
......@@ -39,7 +39,7 @@ describe('userRegistryService', () => {
const mailerSpy = jest.spyOn(mockMailService, 'send');
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
const module = await Test.createTestingModule({
imports: [MailerModule, HttpModule],
providers: [
OnlineMediationService,
......