diff --git a/.gitignore b/.gitignore index de837300e6e..fe39f29358e 100644 --- a/.gitignore +++ b/.gitignore @@ -177,6 +177,7 @@ utils/get-lines.js utils/get-lines.test.js utils/validate.js utils/validate.test.js +utils/is-audited.js ### Old Generated files ### # These files are no longer generated by the client, but can diff --git a/.prettierignore b/.prettierignore index c4f76080b97..caf1d943ab9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -18,6 +18,7 @@ utils/get-lines.js utils/get-lines.test.js utils/validate.js utils/validate.test.js +utils/is-audited.js pnpm-lock.yaml web/.next curriculum-server/data/curriculum.json diff --git a/client/src/components/Map/index.tsx b/client/src/components/Map/index.tsx index ae7cc112be3..9ca1ac33d7c 100644 --- a/client/src/components/Map/index.tsx +++ b/client/src/components/Map/index.tsx @@ -30,13 +30,13 @@ const linkSpacingStyle = { }; const flatSuperBlockMap = createFlatSuperBlockMap({ - showNewCurriculum: showNewCurriculum.toString(), - showUpcomingChanges: showUpcomingChanges.toString() + showNewCurriculum, + showUpcomingChanges }); const firstNotAuditedSuperBlock = getFirstNotAuditedSuperBlock({ language: curriculumLocale, - showNewCurriculum: showNewCurriculum.toString(), - showUpcomingChanges: showUpcomingChanges.toString() + showNewCurriculum, + showUpcomingChanges }); function MapLi({ diff --git a/client/src/templates/Introduction/components/block.tsx b/client/src/templates/Introduction/components/block.tsx index ae86d85f650..b6143f537b6 100644 --- a/client/src/templates/Introduction/components/block.tsx +++ b/client/src/templates/Introduction/components/block.tsx @@ -8,7 +8,7 @@ import { bindActionCreators, Dispatch } from 'redux'; import { createSelector } from 'reselect'; import { SuperBlocks } from '../../../../../config/superblocks'; import envData from '../../../../../config/env.json'; -import { isAuditedCert } from '../../../../../utils/is-audited'; +import { isAuditedSuperBlock } from '../../../../../utils/is-audited'; import Caret from '../../../assets/icons/caret'; import DropDown from '../../../assets/icons/dropdown'; import GreenNotCompleted from '../../../assets/icons/green-not-completed'; @@ -130,7 +130,7 @@ class Block extends Component { ); }); - const isAudited = isAuditedCert(curriculumLocale, superBlock, { + const isAudited = isAuditedSuperBlock(curriculumLocale, superBlock, { showNewCurriculum, showUpcomingChanges }); diff --git a/config/superblocks.test.ts b/config/superblocks.test.ts index ba76f7388e0..1c2fcb822d3 100644 --- a/config/superblocks.test.ts +++ b/config/superblocks.test.ts @@ -24,8 +24,8 @@ describe('superBlockOrder', () => { describe('createSuperBlockMap', () => { it('should return an object with New and Upcoming when { showNewCurriculum: true, showUpcomingChanges: true }', () => { const result = createSuperBlockMap({ - showNewCurriculum: 'true', - showUpcomingChanges: 'true' + showNewCurriculum: true, + showUpcomingChanges: true }); expect(result[SuperBlockStages.New]).toHaveLength( superBlockOrder[SuperBlockStages.New].length @@ -37,8 +37,8 @@ describe('createSuperBlockMap', () => { it('should return an object without New and Upcoming when { showNewCurriculum: false, showUpcomingChanges: false }', () => { const result = createSuperBlockMap({ - showNewCurriculum: 'false', - showUpcomingChanges: 'false' + showNewCurriculum: false, + showUpcomingChanges: false }); expect(result[SuperBlockStages.New]).toHaveLength(0); expect(result[SuperBlockStages.Upcoming]).toHaveLength(0); @@ -48,16 +48,16 @@ describe('createSuperBlockMap', () => { describe('createFlatSuperBlockMap', () => { it('should return an array of SuperBlocks object with New and Upcoming when { showNewCurriculum: true, showUpcomingChanges: true }', () => { const result = createFlatSuperBlockMap({ - showNewCurriculum: 'true', - showUpcomingChanges: 'true' + showNewCurriculum: true, + showUpcomingChanges: true }); expect(result).toHaveLength(Object.values(superBlockOrder).flat().length); }); it('should return an array of SuperBlocks without New and Upcoming when { showNewCurriculum: false, showUpcomingChanges: false }', () => { const result = createFlatSuperBlockMap({ - showNewCurriculum: 'false', - showUpcomingChanges: 'false' + showNewCurriculum: false, + showUpcomingChanges: false }); const tempSuperBlockMap = { ...superBlockOrder }; tempSuperBlockMap[SuperBlockStages.New] = []; @@ -70,8 +70,8 @@ describe('firstNotAuditedSuperBlock', () => { it("should return 'null' when language is 'english'", () => { const result = getFirstNotAuditedSuperBlock({ language: Languages.English, - showNewCurriculum: 'false', - showUpcomingChanges: 'false' + showNewCurriculum: false, + showUpcomingChanges: false }); expect(result).toBeNull(); }); @@ -79,8 +79,8 @@ describe('firstNotAuditedSuperBlock', () => { it("should return a SuperBlock when language is 'chinese'", () => { const result = getFirstNotAuditedSuperBlock({ language: Languages.Chinese, - showNewCurriculum: 'false', - showUpcomingChanges: 'false' + showNewCurriculum: false, + showUpcomingChanges: false }); expect(result).toEqual(SuperBlocks.CollegeAlgebraPy); }); @@ -110,8 +110,8 @@ describe('getAuditedSuperBlocks', () => { Object.keys(notAuditedSuperBlocks).forEach(language => { it(`should return only audited SuperBlocks for ${language}`, () => { const auditedSuperBlocks = getAuditedSuperBlocks({ - showNewCurriculum: 'true', - showUpcomingChanges: 'true', + showNewCurriculum: true, + showUpcomingChanges: true, language }); diff --git a/config/superblocks.ts b/config/superblocks.ts index 9036c810dff..a4538609aa6 100644 --- a/config/superblocks.ts +++ b/config/superblocks.ts @@ -206,8 +206,8 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = { Object.freeze(notAuditedSuperBlocks); type Config = { - showNewCurriculum: string | undefined; - showUpcomingChanges: string | undefined; + showNewCurriculum: boolean; + showUpcomingChanges: boolean; }; type LanguagesConfig = Config & { @@ -221,10 +221,10 @@ export function createSuperBlockMap({ showUpcomingChanges }: Config): SuperBlockOrder { const superBlockMap = { ...superBlockOrder }; - if (showNewCurriculum !== 'true') { + if (!showNewCurriculum) { superBlockMap[SuperBlockStages.New] = []; } - if (showUpcomingChanges !== 'true') { + if (!showUpcomingChanges) { superBlockMap[SuperBlockStages.Upcoming] = []; } return superBlockMap; @@ -235,10 +235,10 @@ export function createFlatSuperBlockMap({ showUpcomingChanges }: Config): SuperBlocks[] { const superBlockMap = { ...superBlockOrder }; - if (showNewCurriculum !== 'true') { + if (!showNewCurriculum) { superBlockMap[SuperBlockStages.New] = []; } - if (showUpcomingChanges !== 'true') { + if (!showUpcomingChanges) { superBlockMap[SuperBlockStages.Upcoming] = []; } return Object.values(superBlockMap).flat(); @@ -264,8 +264,8 @@ export function getFirstNotAuditedSuperBlock({ export function getAuditedSuperBlocks({ language = 'english', - showNewCurriculum = 'false', - showUpcomingChanges = 'false' + showNewCurriculum, + showUpcomingChanges }: LanguagesConfig): SuperBlocks[] { if (!Object.prototype.hasOwnProperty.call(notAuditedSuperBlocks, language)) { throw Error(`'${language}' key not found in 'notAuditedSuperBlocks'`); diff --git a/curriculum/get-challenges.js b/curriculum/get-challenges.js index 95cb8bbb504..ab4bad4e31e 100644 --- a/curriculum/get-challenges.js +++ b/curriculum/get-challenges.js @@ -14,7 +14,7 @@ const { } = require('../tools/challenge-parser/translation-parser'); /* eslint-enable max-len*/ -const { isAuditedCert } = require('../utils/is-audited'); +const { isAuditedSuperBlock } = require('../utils/is-audited'); const { createPoly } = require('../utils/polyvinyl'); const { getSuperOrder, getSuperBlockFromDir } = require('./utils'); @@ -321,9 +321,9 @@ ${getFullPath('english', filePath)} challenge.helpCategory = challenge.helpCategory || meta.helpCategory; challenge.translationPending = lang !== 'english' && - !isAuditedCert(lang, meta.superBlock, { - showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, - showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES + !isAuditedSuperBlock(lang, meta.superBlock, { + showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true', + showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true' }); challenge.usesMultifileEditor = !!meta.usesMultifileEditor; } @@ -358,7 +358,7 @@ ${getFullPath('english', filePath)} // We always try to translate comments (even English ones) to confirm that translations exist. const translateComments = - isAuditedCert(lang, meta.superBlock, { + isAuditedSuperBlock(lang, meta.superBlock, { showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES }) && fs.existsSync(getFullPath(lang, filePath)); diff --git a/curriculum/utils.js b/curriculum/utils.js index aeb5e326c93..2dcc3601931 100644 --- a/curriculum/utils.js +++ b/curriculum/utils.js @@ -43,8 +43,8 @@ function createSuperOrder(superBlocks) { } const flatSuperBlockMap = createFlatSuperBlockMap({ - showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, - showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES + showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true', + showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true' }); const superOrder = createSuperOrder(flatSuperBlockMap); diff --git a/tools/challenge-auditor/index.ts b/tools/challenge-auditor/index.ts index 6421022f440..21b30452063 100644 --- a/tools/challenge-auditor/index.ts +++ b/tools/challenge-auditor/index.ts @@ -111,8 +111,8 @@ void (async () => { console.log(`\n=== ${lang} ===`); const certs = getAuditedSuperBlocks({ language: lang, - showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, - showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES + showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true', + showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true' }); const langCurriculumDirectory = join( process.cwd(), diff --git a/utils/is-audited.js b/utils/is-audited.js deleted file mode 100644 index 504167afda8..00000000000 --- a/utils/is-audited.js +++ /dev/null @@ -1,19 +0,0 @@ -const { getAuditedSuperBlocks } = require('../config/superblocks'); - -function isAuditedCert( - language, - superblock, - { showNewCurriculum, showUpcomingChanges } -) { - if (!language || !superblock) - throw Error('Both arguments must be provided for auditing'); - - const auditedSuperBlocks = getAuditedSuperBlocks({ - showNewCurriculum, - showUpcomingChanges, - language - }); - return auditedSuperBlocks.includes(superblock); -} - -exports.isAuditedCert = isAuditedCert; diff --git a/utils/is-audited.ts b/utils/is-audited.ts new file mode 100644 index 00000000000..a56a8c80013 --- /dev/null +++ b/utils/is-audited.ts @@ -0,0 +1,22 @@ +import { type SuperBlocks, getAuditedSuperBlocks } from '../config/superblocks'; + +export function isAuditedSuperBlock( + language: string, + superblock: SuperBlocks, + { + showNewCurriculum, + showUpcomingChanges + }: { showNewCurriculum: boolean; showUpcomingChanges: boolean } +) { + // TODO: when all the consumers of this function use TypeScript we can remove + // this check + if (!language || !superblock) + throw Error('Both arguments must be provided for auditing'); + + const auditedSuperBlocks = getAuditedSuperBlocks({ + showNewCurriculum, + showUpcomingChanges, + language + }); + return auditedSuperBlocks.includes(superblock); +}