refactor: convert is-audited to TypeScript (#51232)

pull/51263/head
Oliver Eyton-Williams 2023-08-14 12:20:22 +02:00 committed by GitHub
parent 0f9066e504
commit e99154665e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 61 additions and 56 deletions

1
.gitignore vendored
View File

@ -177,6 +177,7 @@ utils/get-lines.js
utils/get-lines.test.js utils/get-lines.test.js
utils/validate.js utils/validate.js
utils/validate.test.js utils/validate.test.js
utils/is-audited.js
### Old Generated files ### ### Old Generated files ###
# These files are no longer generated by the client, but can # These files are no longer generated by the client, but can

View File

@ -18,6 +18,7 @@ utils/get-lines.js
utils/get-lines.test.js utils/get-lines.test.js
utils/validate.js utils/validate.js
utils/validate.test.js utils/validate.test.js
utils/is-audited.js
pnpm-lock.yaml pnpm-lock.yaml
web/.next web/.next
curriculum-server/data/curriculum.json curriculum-server/data/curriculum.json

View File

@ -30,13 +30,13 @@ const linkSpacingStyle = {
}; };
const flatSuperBlockMap = createFlatSuperBlockMap({ const flatSuperBlockMap = createFlatSuperBlockMap({
showNewCurriculum: showNewCurriculum.toString(), showNewCurriculum,
showUpcomingChanges: showUpcomingChanges.toString() showUpcomingChanges
}); });
const firstNotAuditedSuperBlock = getFirstNotAuditedSuperBlock({ const firstNotAuditedSuperBlock = getFirstNotAuditedSuperBlock({
language: curriculumLocale, language: curriculumLocale,
showNewCurriculum: showNewCurriculum.toString(), showNewCurriculum,
showUpcomingChanges: showUpcomingChanges.toString() showUpcomingChanges
}); });
function MapLi({ function MapLi({

View File

@ -8,7 +8,7 @@ import { bindActionCreators, Dispatch } from 'redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { SuperBlocks } from '../../../../../config/superblocks'; import { SuperBlocks } from '../../../../../config/superblocks';
import envData from '../../../../../config/env.json'; 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 Caret from '../../../assets/icons/caret';
import DropDown from '../../../assets/icons/dropdown'; import DropDown from '../../../assets/icons/dropdown';
import GreenNotCompleted from '../../../assets/icons/green-not-completed'; import GreenNotCompleted from '../../../assets/icons/green-not-completed';
@ -130,7 +130,7 @@ class Block extends Component<BlockProps> {
); );
}); });
const isAudited = isAuditedCert(curriculumLocale, superBlock, { const isAudited = isAuditedSuperBlock(curriculumLocale, superBlock, {
showNewCurriculum, showNewCurriculum,
showUpcomingChanges showUpcomingChanges
}); });

View File

@ -24,8 +24,8 @@ describe('superBlockOrder', () => {
describe('createSuperBlockMap', () => { describe('createSuperBlockMap', () => {
it('should return an object with New and Upcoming when { showNewCurriculum: true, showUpcomingChanges: true }', () => { it('should return an object with New and Upcoming when { showNewCurriculum: true, showUpcomingChanges: true }', () => {
const result = createSuperBlockMap({ const result = createSuperBlockMap({
showNewCurriculum: 'true', showNewCurriculum: true,
showUpcomingChanges: 'true' showUpcomingChanges: true
}); });
expect(result[SuperBlockStages.New]).toHaveLength( expect(result[SuperBlockStages.New]).toHaveLength(
superBlockOrder[SuperBlockStages.New].length superBlockOrder[SuperBlockStages.New].length
@ -37,8 +37,8 @@ describe('createSuperBlockMap', () => {
it('should return an object without New and Upcoming when { showNewCurriculum: false, showUpcomingChanges: false }', () => { it('should return an object without New and Upcoming when { showNewCurriculum: false, showUpcomingChanges: false }', () => {
const result = createSuperBlockMap({ const result = createSuperBlockMap({
showNewCurriculum: 'false', showNewCurriculum: false,
showUpcomingChanges: 'false' showUpcomingChanges: false
}); });
expect(result[SuperBlockStages.New]).toHaveLength(0); expect(result[SuperBlockStages.New]).toHaveLength(0);
expect(result[SuperBlockStages.Upcoming]).toHaveLength(0); expect(result[SuperBlockStages.Upcoming]).toHaveLength(0);
@ -48,16 +48,16 @@ describe('createSuperBlockMap', () => {
describe('createFlatSuperBlockMap', () => { describe('createFlatSuperBlockMap', () => {
it('should return an array of SuperBlocks object with New and Upcoming when { showNewCurriculum: true, showUpcomingChanges: true }', () => { it('should return an array of SuperBlocks object with New and Upcoming when { showNewCurriculum: true, showUpcomingChanges: true }', () => {
const result = createFlatSuperBlockMap({ const result = createFlatSuperBlockMap({
showNewCurriculum: 'true', showNewCurriculum: true,
showUpcomingChanges: 'true' showUpcomingChanges: true
}); });
expect(result).toHaveLength(Object.values(superBlockOrder).flat().length); expect(result).toHaveLength(Object.values(superBlockOrder).flat().length);
}); });
it('should return an array of SuperBlocks without New and Upcoming when { showNewCurriculum: false, showUpcomingChanges: false }', () => { it('should return an array of SuperBlocks without New and Upcoming when { showNewCurriculum: false, showUpcomingChanges: false }', () => {
const result = createFlatSuperBlockMap({ const result = createFlatSuperBlockMap({
showNewCurriculum: 'false', showNewCurriculum: false,
showUpcomingChanges: 'false' showUpcomingChanges: false
}); });
const tempSuperBlockMap = { ...superBlockOrder }; const tempSuperBlockMap = { ...superBlockOrder };
tempSuperBlockMap[SuperBlockStages.New] = []; tempSuperBlockMap[SuperBlockStages.New] = [];
@ -70,8 +70,8 @@ describe('firstNotAuditedSuperBlock', () => {
it("should return 'null' when language is 'english'", () => { it("should return 'null' when language is 'english'", () => {
const result = getFirstNotAuditedSuperBlock({ const result = getFirstNotAuditedSuperBlock({
language: Languages.English, language: Languages.English,
showNewCurriculum: 'false', showNewCurriculum: false,
showUpcomingChanges: 'false' showUpcomingChanges: false
}); });
expect(result).toBeNull(); expect(result).toBeNull();
}); });
@ -79,8 +79,8 @@ describe('firstNotAuditedSuperBlock', () => {
it("should return a SuperBlock when language is 'chinese'", () => { it("should return a SuperBlock when language is 'chinese'", () => {
const result = getFirstNotAuditedSuperBlock({ const result = getFirstNotAuditedSuperBlock({
language: Languages.Chinese, language: Languages.Chinese,
showNewCurriculum: 'false', showNewCurriculum: false,
showUpcomingChanges: 'false' showUpcomingChanges: false
}); });
expect(result).toEqual(SuperBlocks.CollegeAlgebraPy); expect(result).toEqual(SuperBlocks.CollegeAlgebraPy);
}); });
@ -110,8 +110,8 @@ describe('getAuditedSuperBlocks', () => {
Object.keys(notAuditedSuperBlocks).forEach(language => { Object.keys(notAuditedSuperBlocks).forEach(language => {
it(`should return only audited SuperBlocks for ${language}`, () => { it(`should return only audited SuperBlocks for ${language}`, () => {
const auditedSuperBlocks = getAuditedSuperBlocks({ const auditedSuperBlocks = getAuditedSuperBlocks({
showNewCurriculum: 'true', showNewCurriculum: true,
showUpcomingChanges: 'true', showUpcomingChanges: true,
language language
}); });

View File

@ -206,8 +206,8 @@ export const notAuditedSuperBlocks: NotAuditedSuperBlocks = {
Object.freeze(notAuditedSuperBlocks); Object.freeze(notAuditedSuperBlocks);
type Config = { type Config = {
showNewCurriculum: string | undefined; showNewCurriculum: boolean;
showUpcomingChanges: string | undefined; showUpcomingChanges: boolean;
}; };
type LanguagesConfig = Config & { type LanguagesConfig = Config & {
@ -221,10 +221,10 @@ export function createSuperBlockMap({
showUpcomingChanges showUpcomingChanges
}: Config): SuperBlockOrder { }: Config): SuperBlockOrder {
const superBlockMap = { ...superBlockOrder }; const superBlockMap = { ...superBlockOrder };
if (showNewCurriculum !== 'true') { if (!showNewCurriculum) {
superBlockMap[SuperBlockStages.New] = []; superBlockMap[SuperBlockStages.New] = [];
} }
if (showUpcomingChanges !== 'true') { if (!showUpcomingChanges) {
superBlockMap[SuperBlockStages.Upcoming] = []; superBlockMap[SuperBlockStages.Upcoming] = [];
} }
return superBlockMap; return superBlockMap;
@ -235,10 +235,10 @@ export function createFlatSuperBlockMap({
showUpcomingChanges showUpcomingChanges
}: Config): SuperBlocks[] { }: Config): SuperBlocks[] {
const superBlockMap = { ...superBlockOrder }; const superBlockMap = { ...superBlockOrder };
if (showNewCurriculum !== 'true') { if (!showNewCurriculum) {
superBlockMap[SuperBlockStages.New] = []; superBlockMap[SuperBlockStages.New] = [];
} }
if (showUpcomingChanges !== 'true') { if (!showUpcomingChanges) {
superBlockMap[SuperBlockStages.Upcoming] = []; superBlockMap[SuperBlockStages.Upcoming] = [];
} }
return Object.values(superBlockMap).flat(); return Object.values(superBlockMap).flat();
@ -264,8 +264,8 @@ export function getFirstNotAuditedSuperBlock({
export function getAuditedSuperBlocks({ export function getAuditedSuperBlocks({
language = 'english', language = 'english',
showNewCurriculum = 'false', showNewCurriculum,
showUpcomingChanges = 'false' showUpcomingChanges
}: LanguagesConfig): SuperBlocks[] { }: LanguagesConfig): SuperBlocks[] {
if (!Object.prototype.hasOwnProperty.call(notAuditedSuperBlocks, language)) { if (!Object.prototype.hasOwnProperty.call(notAuditedSuperBlocks, language)) {
throw Error(`'${language}' key not found in 'notAuditedSuperBlocks'`); throw Error(`'${language}' key not found in 'notAuditedSuperBlocks'`);

View File

@ -14,7 +14,7 @@ const {
} = require('../tools/challenge-parser/translation-parser'); } = require('../tools/challenge-parser/translation-parser');
/* eslint-enable max-len*/ /* eslint-enable max-len*/
const { isAuditedCert } = require('../utils/is-audited'); const { isAuditedSuperBlock } = require('../utils/is-audited');
const { createPoly } = require('../utils/polyvinyl'); const { createPoly } = require('../utils/polyvinyl');
const { getSuperOrder, getSuperBlockFromDir } = require('./utils'); const { getSuperOrder, getSuperBlockFromDir } = require('./utils');
@ -321,9 +321,9 @@ ${getFullPath('english', filePath)}
challenge.helpCategory = challenge.helpCategory || meta.helpCategory; challenge.helpCategory = challenge.helpCategory || meta.helpCategory;
challenge.translationPending = challenge.translationPending =
lang !== 'english' && lang !== 'english' &&
!isAuditedCert(lang, meta.superBlock, { !isAuditedSuperBlock(lang, meta.superBlock, {
showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true',
showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true'
}); });
challenge.usesMultifileEditor = !!meta.usesMultifileEditor; 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. // We always try to translate comments (even English ones) to confirm that translations exist.
const translateComments = const translateComments =
isAuditedCert(lang, meta.superBlock, { isAuditedSuperBlock(lang, meta.superBlock, {
showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, showNewCurriculum: process.env.SHOW_NEW_CURRICULUM,
showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES
}) && fs.existsSync(getFullPath(lang, filePath)); }) && fs.existsSync(getFullPath(lang, filePath));

View File

@ -43,8 +43,8 @@ function createSuperOrder(superBlocks) {
} }
const flatSuperBlockMap = createFlatSuperBlockMap({ const flatSuperBlockMap = createFlatSuperBlockMap({
showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true',
showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true'
}); });
const superOrder = createSuperOrder(flatSuperBlockMap); const superOrder = createSuperOrder(flatSuperBlockMap);

View File

@ -111,8 +111,8 @@ void (async () => {
console.log(`\n=== ${lang} ===`); console.log(`\n=== ${lang} ===`);
const certs = getAuditedSuperBlocks({ const certs = getAuditedSuperBlocks({
language: lang, language: lang,
showNewCurriculum: process.env.SHOW_NEW_CURRICULUM, showNewCurriculum: process.env.SHOW_NEW_CURRICULUM === 'true',
showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES showUpcomingChanges: process.env.SHOW_UPCOMING_CHANGES === 'true'
}); });
const langCurriculumDirectory = join( const langCurriculumDirectory = join(
process.cwd(), process.cwd(),

View File

@ -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;

22
utils/is-audited.ts Normal file
View File

@ -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);
}