From f2ec6d6dd58ad6ae3360293ca17a73d0845d1036 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Wed, 16 Oct 2024 21:48:04 +0200 Subject: [PATCH] feat(api): env var to control exam environment (#56701) --- api/src/app.ts | 5 ++--- api/src/exam-environment/routes/exam-environment.test.ts | 8 ++++++++ api/src/utils/env.ts | 7 +++++++ sample.env | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/api/src/app.ts b/api/src/app.ts index a41fa566dd3..9e56ab6ae83 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -38,7 +38,7 @@ import { FCC_ENABLE_DEV_LOGIN_MODE, FCC_ENABLE_SWAGGER_UI, FCC_ENABLE_SHADOW_CAPTURE, - FREECODECAMP_NODE_ENV + FCC_ENABLE_EXAM_ENVIRONMENT } from './utils/env'; import { isObjectID } from './utils/validation'; import { @@ -187,8 +187,7 @@ export const build = async ( } }); - // NOTE: Code behind the `FREECODECAMP_NODE_ENV` var is not ready to be deployed yet. - if (FREECODECAMP_NODE_ENV !== 'production') { + if (FCC_ENABLE_EXAM_ENVIRONMENT) { void fastify.register(function (fastify, _opts, done) { fastify.addHook('onRequest', fastify.authorizeExamEnvironmentToken); diff --git a/api/src/exam-environment/routes/exam-environment.test.ts b/api/src/exam-environment/routes/exam-environment.test.ts index 959cdc13514..4e76c4140fd 100644 --- a/api/src/exam-environment/routes/exam-environment.test.ts +++ b/api/src/exam-environment/routes/exam-environment.test.ts @@ -12,6 +12,14 @@ import { import * as mock from '../../../__mocks__/env-exam'; import { constructUserExam } from '../utils/exam'; +jest.mock('../../utils/env', () => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return { + ...jest.requireActual('../../utils/env'), + FCC_ENABLE_EXAM_ENVIRONMENT: 'true' + }; +}); + describe('/exam-environment/', () => { setupServer(); describe('Authenticated user with exam environment authorization token', () => { diff --git a/api/src/utils/env.ts b/api/src/utils/env.ts index c3abc0a1ea5..ea5ea69e379 100644 --- a/api/src/utils/env.ts +++ b/api/src/utils/env.ts @@ -58,6 +58,11 @@ assert.ok(process.env.MONGOHQ_URL); assert.ok(process.env.COOKIE_SECRET); if (process.env.FREECODECAMP_NODE_ENV !== 'development') { + assert.notEqual( + process.env.FCC_ENABLE_EXAM_ENVIRONMENT, + 'true', + 'Exam environment is not ready for production.' + ); assert.ok(process.env.SES_ID); assert.ok(process.env.SES_SECRET); assert.notEqual( @@ -127,6 +132,8 @@ export const FCC_ENABLE_DEV_LOGIN_MODE = process.env.FCC_ENABLE_DEV_LOGIN_MODE === 'true'; export const FCC_ENABLE_SHADOW_CAPTURE = process.env.FCC_ENABLE_SHADOW_CAPTURE === 'true'; +export const FCC_ENABLE_EXAM_ENVIRONMENT = + process.env.FCC_ENABLE_EXAM_ENVIRONMENT === 'true'; export const SENTRY_DSN = process.env.SENTRY_DSN === 'dsn_from_sentry_dashboard' ? '' diff --git a/sample.env b/sample.env index 99d7d9cd59b..02d454da719 100644 --- a/sample.env +++ b/sample.env @@ -69,6 +69,7 @@ PORT=3000 FCC_ENABLE_SWAGGER_UI=true FCC_ENABLE_DEV_LOGIN_MODE=true FCC_ENABLE_SHADOW_CAPTURE=false +FCC_ENABLE_EXAM_ENVIRONMENT=false # Email # use ses in production