refactor: convert is-audited to TypeScript (#51232)
parent
0f9066e504
commit
e99154665e
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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({
|
||||||
|
|
|
@ -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
|
||||||
});
|
});
|
||||||
|
|
|
@ -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
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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'`);
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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;
|
|
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue