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/validate.js
utils/validate.test.js
utils/is-audited.js
### Old Generated files ###
# 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/validate.js
utils/validate.test.js
utils/is-audited.js
pnpm-lock.yaml
web/.next
curriculum-server/data/curriculum.json

View File

@ -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({

View File

@ -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<BlockProps> {
);
});
const isAudited = isAuditedCert(curriculumLocale, superBlock, {
const isAudited = isAuditedSuperBlock(curriculumLocale, superBlock, {
showNewCurriculum,
showUpcomingChanges
});

View File

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

View File

@ -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'`);

View File

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

View File

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

View File

@ -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(),

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