Skip to content

Commit

Permalink
[FEATURE] API - statut béta (PIX-15350)
Browse files Browse the repository at this point in the history
  • Loading branch information
pix-service-auto-merge authored Nov 21, 2024
2 parents 69e89f1 + 516f419 commit ffc6fd1
Show file tree
Hide file tree
Showing 19 changed files with 86 additions and 10 deletions.
6 changes: 4 additions & 2 deletions api/src/devcomp/domain/models/module/Module.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { assertNotNullOrUndefined } from '../../../../shared/domain/models/asser
import { ModuleInstantiationError } from '../../errors.js';

class Module {
constructor({ id, slug, title, grains, details, transitionTexts = [] }) {
constructor({ id, slug, title, isBeta, grains, details, transitionTexts = [] }) {
assertNotNullOrUndefined(id, 'The id is required for a module');
assertNotNullOrUndefined(title, 'The title is required for a module');
assertNotNullOrUndefined(slug, 'The slug is required for a module');
assertNotNullOrUndefined(title, 'The title is required for a module');
assertNotNullOrUndefined(isBeta, 'isBeta value is required for a module');
assertNotNullOrUndefined(grains, 'A list of grains is required for a module');
this.#assertGrainsIsAnArray(grains);
assertNotNullOrUndefined(details, 'The details are required for a module');
Expand All @@ -14,6 +15,7 @@ class Module {
this.id = id;
this.slug = slug;
this.title = title;
this.isBeta = isBeta;
this.grains = grains;
this.transitionTexts = transitionTexts;
this.details = details;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "6282925d-4775-4bca-b513-4c3009ec5886",
"slug": "adresse-ip-publique-et-vous",
"title": "L'adresse IP publique : ce qu'elle révèle sur vous !",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "<p>Quand vous naviguez sur internet, vous partagez des informations et laissez ainsi de nombreuses traces : adresse IP, cookies, historique, etc. Dans ce module, découvrez ce qu'est une adresse IP publique et ce qu’elle dévoile sur vous.</p>",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "f7b3a2e1-0d5c-4c6c-9c4d-1a3d8f7e9f5d",
"slug": "bien-ecrire-son-adresse-mail",
"title": "Bien écrire son adresse mail",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/bien-ecrire-son-adresse-mail-details.svg",
"description": "Bien écrire son adresse mail est important. Dans ce module, vous allez apprendre à écrire correctement une adresse e-mail pour mieux communiquer et éviter les erreurs courantes.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "01151659-77c1-41cc-8724-89091357af3d",
"slug": "chatgpt-parle-francais",
"title": "ChatGPT parle-t-il vraiment français ?",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "<p>Les Large Language Models (LLM) sont des systèmes d'intelligence artificielle générative. Ils donnent l'impression de parler toutes les langues mais, du fait de leurs biais, leurs productions sont parfois stéréotypées ou discriminantes. Dans ce module, vous allez découvrir les origines de ces biais et interroger directement des LLM pour les repérer !</p>",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "6282925d-4775-4bca-b513-4c3009ec5886",
"slug": "didacticiel-modulix",
"title": "Didacticiel Modulix",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "<p>Découvrez avec ce didacticiel comment fonctionne Modulix !</p>",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "65b761ab-3ebd-44a9-84b7-8b5e151aee76",
"slug": "distinguer-vrai-faux-sur-internet",
"title": "Les informations sur internet : distinguer le vrai du faux",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "Sur internet, de nombreuses informations circulent. Certaines sont vraies, d'autres sont fausses. Dans ce module, vous allez découvrir une méthode pour analyser l'information et aiguiser votre esprit critique !",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "8bdec793-7508-41b4-9df2-e1cf96969680",
"slug": "mots-de-passe-securises",
"title": "Des mots de passe solides",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "Aujourd'hui, on utilise des mots de passe pour tout : son téléphone, son adresse mail, ses réseaux sociaux. Dans ce module, vous allez découvrir pourquoi et comment créer des mots de passe solides.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "6282925d-4775-4bca-b513-4c3009ec5886",
"slug": "ports-connexions-essentiels",
"title": "Les ports de connexion d’un ordinateur",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "Pour savoir ce qu'on peut brancher ou non à un ordinateur, il faut bien connaître les principaux ports de connexion !",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "a64d1ca8-5222-464a-ae0c-e8bbdf949e18",
"slug": "principes-fondateurs-wikipedia",
"title": "Les principes fondateurs de Wikipédia",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "Wikipédia est un site très connu, que vous avez sans doute déjà utilisé. Dans ce module, vous trouverez des explications sur les principes de Wikipédia. Vous découvrirez aussi des méthodes pour l'utiliser.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"id": "68f92c57-9e66-4258-a2f4-b71fad7ab004",
"slug": "sources-informations",
"title": "Les sources d'information",
"isBeta": true,
"details": {
"image": "https://images.pix.fr/modulix/placeholder-details.svg",
"description": "Sur internet et les réseaux sociaux, il est parfois difficile de savoir si une information est vraie ou fausse. Dans ce module, vous allez découvrir pourquoi il est important de s’intéresser à la source d’une information pour démêler le vrai du faux.",
Expand Down
1 change: 1 addition & 0 deletions api/src/devcomp/infrastructure/factories/module-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export class ModuleFactory {
id: moduleData.id,
slug: moduleData.slug,
title: moduleData.title,
isBeta: moduleData.isBeta,
transitionTexts: moduleData.transitionTexts?.map((transitionText) => new TransitionText(transitionText)) ?? [],
details: new Details(moduleData.details),
grains: moduleData.grains.map((grain) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ function serialize(module) {
return {
id: module.slug,
title: module.title,
isBeta: module.isBeta,
transitionTexts: module.transitionTexts,
details: module.details,
grains: module.grains.map((grain) => {
Expand All @@ -20,7 +21,7 @@ function serialize(module) {
}),
};
},
attributes: ['title', 'grains', 'transitionTexts', 'details'],
attributes: ['title', 'isBeta', 'grains', 'transitionTexts', 'details'],
grains: {
ref: 'id',
includes: true,
Expand Down
3 changes: 2 additions & 1 deletion api/tests/devcomp/integration/domain/models/Module_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ describe('Integration | Devcomp | Domain | Models | Module', function () {
const id = '1';
const slug = 'les-adresses-email';
const title = 'Les adresses email';
const isBeta = true;
const grains = [grain];
const transitionTexts = [
{
Expand All @@ -30,7 +31,7 @@ describe('Integration | Devcomp | Domain | Models | Module', function () {
const details = Symbol('details');

// when
const error = catchErrSync(() => new Module({ id, slug, title, grains, transitionTexts, details }))();
const error = catchErrSync(() => new Module({ id, slug, title, isBeta, grains, transitionTexts, details }))();

// then
expect(error).to.be.instanceOf(ModuleInstantiationError);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ describe('Integration | DevComp | Repositories | ModuleRepository', function ()
id: 'f7b3a2e1-0d5c-4c6c-9c4d-1a3d8f7e9f5d',
slug: existingModuleSlug,
title: 'Bien écrire son adresse mail',
isBeta: true,
details: {
image: 'https://images.pix.fr/modulix/bien-ecrire-son-adresse-mail-details.svg',
description:
Expand Down
33 changes: 28 additions & 5 deletions api/tests/devcomp/unit/domain/models/module/Module_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,19 @@ describe('Unit | Devcomp | Domain | Models | Module | Module', function () {
const id = 1;
const slug = 'les-adresses-email';
const title = 'Les adresses email';
const isBeta = false;
const grains = [Symbol('text')];
const transitionTexts = [];
const details = Symbol('details');

// when
const module = new Module({ id, slug, title, grains, details, transitionTexts });
const module = new Module({ id, slug, title, isBeta, grains, details, transitionTexts });

// then
expect(module.id).to.equal(id);
expect(module.slug).to.equal(slug);
expect(module.title).to.equal(title);
expect(module.isBeta).to.equal(isBeta);
expect(module.transitionTexts).to.equal(transitionTexts);
expect(module.grains).to.have.lengthOf(grains.length);
expect(module.details).to.deep.equal(details);
Expand All @@ -37,25 +39,43 @@ describe('Unit | Devcomp | Domain | Models | Module | Module', function () {
});
});

describe('if a module does not have a title', function () {
describe('if a module does not have a slug', function () {
it('should throw an error', function () {
// when
const error = catchErrSync(() => new Module({ id: 1 }))();

// then
expect(error).to.be.instanceOf(DomainError);
expect(error.message).to.equal('The slug is required for a module');
});
});

describe('if a module does not have a title', function () {
it('should throw an error', function () {
// when
const error = catchErrSync(() => new Module({ id: 1, slug: 'my-slug' }))();

// then
expect(error).to.be.instanceOf(DomainError);
expect(error.message).to.equal('The title is required for a module');
});
});

describe('if a module does not have a slug', function () {
describe('if a module does not have isBeta value', function () {
it('should throw an error', function () {
// when
const error = catchErrSync(() => new Module({ id: 1, title: '' }))();
const error = catchErrSync(
() =>
new Module({
id: 'id_module_1',
slug: 'bien-ecrire-son-adresse-mail',
title: 'Bien écrire son adresse mail',
}),
)();

// then
expect(error).to.be.instanceOf(DomainError);
expect(error.message).to.equal('The slug is required for a module');
expect(error.message).to.equal('isBeta value is required for a module');
});
});

Expand All @@ -68,6 +88,7 @@ describe('Unit | Devcomp | Domain | Models | Module | Module', function () {
id: 'id_module_1',
slug: 'bien-ecrire-son-adresse-mail',
title: 'Bien écrire son adresse mail',
isBeta: true,
}),
)();

Expand All @@ -86,6 +107,7 @@ describe('Unit | Devcomp | Domain | Models | Module | Module', function () {
id: 'id_module_1',
slug: 'bien-ecrire-son-adresse-mail',
title: 'Bien écrire son adresse mail',
isBeta: true,
grains: 'elements',
}),
)();
Expand All @@ -105,6 +127,7 @@ describe('Unit | Devcomp | Domain | Models | Module | Module', function () {
id: 'id_module_1',
slug: 'bien-ecrire-son-adresse-mail',
title: 'Bien écrire son adresse mail',
isBeta: true,
grains: [],
}),
)();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ const moduleSchema = Joi.object({
.regex(/^[a-z0-9-]+$/)
.required(),
title: htmlNotAllowedSchema.required(),
isBeta: Joi.boolean().required(),
details: moduleDetailsSchema.required(),
transitionTexts: Joi.array().items(transitionTextSchema),
grains: Joi.array().items(grainSchema).required(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ describe('Unit | Infrastructure | Datasources | Learning Content | Module Dataso
id: '6282925d-4775-4bca-b513-4c3009ec5886',
slug: 'didacticiel-modulix',
title: '<h1>Didacticiel Modulix</h1>',
isBeta: true,
details: {
image: 'https://images.pix.fr/modulix/placeholder-details.svg',
description: 'Découvrez avec ce didacticiel comment fonctionne Modulix !',
Expand Down
Loading

0 comments on commit ffc6fd1

Please sign in to comment.