Skip to content

Commit

Permalink
🔥 api: remove is-v3-eligibility-check-enabled feature toggle
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreiaPena committed Nov 7, 2024
1 parent 13efc44 commit c44af33
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 174 deletions.
5 changes: 0 additions & 5 deletions api/sample.env
Original file line number Diff line number Diff line change
Expand Up @@ -790,11 +790,6 @@ TEST_REDIS_URL=redis://localhost:6379
# default: false
# FT_NEW_AUTHENTICATION_DESIGN_ENABLED=false

# Enables complementary certification eligibility check for V3 certifications
# type: boolean
# default: false
#FT_ENABLE_V3_ELIGIBILITY_CHECK=false

# Consider the Pix Companion extension as active
#
# presence: optional
Expand Down
20 changes: 5 additions & 15 deletions api/src/certification/enrolment/application/user-controller.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,12 @@
import { config } from '../../../shared/config.js';
import { usecases } from '../domain/usecases/index.js';
import * as certificationEligibilitySerializer from '../infrastructure/serializers/certification-eligibility-serializer.js';
import * as userCertificationEligibilitySerializer from '../infrastructure/serializers/user-certification-eligibility-serializer.js';

const isCertifiable = async function (request, h, dependencies = { certificationEligibilitySerializer }) {
const isCertifiable = async function (request) {
const userId = request.auth.credentials.userId;
let certificationEligibility;
if (config.featureToggles.isV3EligibilityCheckEnabled) {
certificationEligibility = await usecases.getUserCertificationEligibility({
userId,
});
return userCertificationEligibilitySerializer.serialize(certificationEligibility);
} else {
certificationEligibility = await usecases.getV2UserCertificationEligibility({
userId,
});
return dependencies.certificationEligibilitySerializer.serialize(certificationEligibility);
}
const certificationEligibility = await usecases.getUserCertificationEligibility({
userId,
});
return userCertificationEligibilitySerializer.serialize(certificationEligibility);
};

const userController = {
Expand Down
2 changes: 0 additions & 2 deletions api/src/shared/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,6 @@ const configuration = (function () {
isSelfAccountDeletionEnabled: toBoolean(process.env.FT_SELF_ACCOUNT_DELETION),
isQuestEnabled: toBoolean(process.env.FT_ENABLE_QUESTS),
isTextToSpeechButtonEnabled: toBoolean(process.env.FT_ENABLE_TEXT_TO_SPEECH_BUTTON),
isV3EligibilityCheckEnabled: toBoolean(process.env.FT_ENABLE_V3_ELIGIBILITY_CHECK),
setupEcosystemBeforeStart: toBoolean(process.env.FT_SETUP_ECOSYSTEM_BEFORE_START) || false,
showExperimentalMissions: toBoolean(process.env.FT_SHOW_EXPERIMENTAL_MISSIONS),
showNewCampaignPresentationPage: toBoolean(process.env.FT_SHOW_NEW_CAMPAIGN_PRESENTATION_PAGE),
Expand Down Expand Up @@ -417,7 +416,6 @@ const configuration = (function () {
config.featureToggles.isPixCompanionEnabled = false;
config.featureToggles.isSelfAccountDeletionEnabled = false;
config.featureToggles.isTextToSpeechButtonEnabled = false;
config.featureToggles.isV3EligibilityCheckEnabled = false;
config.featureToggles.showNewResultPage = false;
config.featureToggles.showExperimentalMissions = false;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { config } from '../../../../../src/shared/config.js';
import { AssessmentResult } from '../../../../../src/shared/domain/models/index.js';
import {
createServer,
Expand All @@ -9,7 +8,7 @@ import {
mockLearningContent,
} from '../../../../test-helper.js';

describe('Certification | Enrolment | Acceptance | user routes', function () {
describe('Certification | Enrolment | Acceptance | Routes | User', function () {
let server;
let options;
let user;
Expand Down Expand Up @@ -263,76 +262,32 @@ describe('Certification | Enrolment | Acceptance | user routes', function () {
});

describe('Success case', function () {
let originalValueFt;

afterEach(function () {
config.featureToggles.isV3EligibilityCheckEnabled = originalValueFt;
});
context('when V3 feature toggle is enabled', function () {
beforeEach(function () {
originalValueFt = config.featureToggles.isV3EligibilityCheckEnabled;
config.featureToggles.isV3EligibilityCheckEnabled = true;
});
it('should return a 200 status code response with JSON API serialized isCertifiable', async function () {
// given
const expectedResponse = {
data: {
id: `${user.id}`,
type: 'isCertifiables',
attributes: {
'is-certifiable': true,
'complementary-certifications': [
{
imageUrl: 'http://badge-image-url.fr',
label: 'PARTNER_LABEL',
isOutdated: false,
isAcquiredExpectedLevel: false,
},
],
},
},
};

// when
const response = await server.inject(options);

// then
expect(response.statusCode).to.equal(200);
expect(response.result).to.deep.equal(expectedResponse);
});
});
context('when V3 feature toggle is disabled', function () {
beforeEach(function () {
originalValueFt = config.featureToggles.isV3EligibilityCheckEnabled;
config.featureToggles.isV3EligibilityCheckEnabled = false;
});
it('should return a 200 status code response with JSON API serialized isCertifiable', async function () {
// given
const expectedResponse = {
data: {
id: `${user.id}`,
type: 'isCertifiables',
attributes: {
'is-certifiable': true,
'complementary-certifications': [
{
imageUrl: 'http://badge-image-url.fr',
label: 'PARTNER_LABEL',
isOutdated: false,
isAcquiredExpectedLevel: false,
},
],
},
it('should return a 200 status code response with JSON API serialized isCertifiable', async function () {
// given
const expectedResponse = {
data: {
id: `${user.id}`,
type: 'isCertifiables',
attributes: {
'is-certifiable': true,
'complementary-certifications': [
{
imageUrl: 'http://badge-image-url.fr',
label: 'PARTNER_LABEL',
isOutdated: false,
isAcquiredExpectedLevel: false,
},
],
},
};
},
};

// when
const response = await server.inject(options);
// when
const response = await server.inject(options);

// then
expect(response.statusCode).to.equal(200);
expect(response.result).to.deep.equal(expectedResponse);
});
// then
expect(response.statusCode).to.equal(200);
expect(response.result).to.deep.equal(expectedResponse);
});
});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,97 +1,54 @@
import { userController } from '../../../../../src/certification/enrolment/application/user-controller.js';
import { usecases } from '../../../../../src/certification/enrolment/domain/usecases/index.js';
import { config } from '../../../../../src/shared/config.js';
import { domainBuilder, expect, sinon } from '../../../../test-helper.js';

describe('Certification | Enrolment | Unit | Application | Controller | user-controller', function () {
describe('#isCertifiable', function () {
describe('if V3 certification feature toggle is activated', function () {
it('should return user certification eligibility', async function () {
// given
sinon.stub(config.featureToggles, 'isV3EligibilityCheckEnabled').value(true);

sinon.stub(usecases, 'getUserCertificationEligibility').resolves(
domainBuilder.certification.enrolment.buildUserCertificationEligibility({
id: 123,
isCertifiable: true,
certificationEligibilities: [
domainBuilder.certification.enrolment.buildV3CertificationEligibility({
it('should return user certification eligibility', async function () {
// given
sinon.stub(usecases, 'getUserCertificationEligibility').resolves(
domainBuilder.certification.enrolment.buildUserCertificationEligibility({
id: 123,
isCertifiable: true,
certificationEligibilities: [
domainBuilder.certification.enrolment.buildV3CertificationEligibility({
label: 'Un super label',
imageUrl: 'Une super image',
isOutdated: false,
isAcquiredExpectedLevel: false,
}),
],
}),
);

const request = {
auth: {
credentials: {
userId: 123,
},
},
};

// when
const serializedEligibility = await userController.isCertifiable(request);

// then
expect(serializedEligibility).to.deep.equal({
data: {
id: '123',
type: 'isCertifiables',
attributes: {
'is-certifiable': true,
'complementary-certifications': [
{
label: 'Un super label',
imageUrl: 'Une super image',
isOutdated: false,
isAcquiredExpectedLevel: false,
}),
},
],
}),
);

const request = {
auth: {
credentials: {
userId: 123,
},
},
};

// when
const serializedEligibility = await userController.isCertifiable(request);

// then
expect(serializedEligibility).to.deep.equal({
data: {
id: '123',
type: 'isCertifiables',
attributes: {
'is-certifiable': true,
'complementary-certifications': [
{
label: 'Un super label',
imageUrl: 'Une super image',
isOutdated: false,
isAcquiredExpectedLevel: false,
},
],
},
},
});
});
});

describe('if V3 certification feature toggle is not activated', function () {
it('should return user certification eligibility', async function () {
// given
sinon.stub(config.featureToggles, 'isV3EligibilityCheckEnabled').value(false);
const certificationEligibility = domainBuilder.certification.enrolment.buildCertificationEligibility({
id: 123,
pixCertificationEligible: true,
complementaryCertifications: ['Pix+ Droit Maître', 'Pix+ Édu 1er degré Avancé'],
});
sinon
.stub(usecases, 'getV2UserCertificationEligibility')
.withArgs({ userId: 123 })
.resolves(certificationEligibility);
const request = {
auth: {
credentials: {
userId: 123,
},
},
};

// when
const serializedEligibility = await userController.isCertifiable(request);

// then
expect(serializedEligibility).to.deep.equal({
data: {
id: '123',
type: 'isCertifiables',
attributes: {
'is-certifiable': true,
'complementary-certifications': ['Pix+ Droit Maître', 'Pix+ Édu 1er degré Avancé'],
},
},
});
},
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ describe('Acceptance | Shared | Application | Controller | feature-toggle', func
'is-quest-enabled': false,
'is-self-account-deletion-enabled': false,
'is-text-to-speech-button-enabled': false,
'is-v3-eligibility-check-enabled': false,
'setup-ecosystem-before-start': false,
'show-experimental-missions': false,
'show-new-campaign-presentation-page': false,
Expand Down

0 comments on commit c44af33

Please sign in to comment.