freeCodeCamp/generate-spec-files.js

92 lines
2.3 KiB
JavaScript
Raw Normal View History

const { readdirSync, readFileSync, writeFileSync } = require('fs');
const path = require('path');
console.log('Creating challenge specfiles...');
function createSpecFiles() {
// Get blocks in directory
const challengesFiles = readdirSync(
path.join(__dirname, '/cypress/fixtures/path-data/challenges')
);
const projectsFiles = readdirSync(
path.join(
__dirname,
'/cypress/fixtures/path-data/projects-and-back-challenges'
)
);
const blockExist = readdirSync(
path.join(__dirname, '/cypress/integration/challenge-tests/blocks')
);
// Split the extensions
let blockInDir = [];
blockExist.forEach(block => {
blockInDir.push(block.split('.')[0]);
});
function divider(files, project) {
files.forEach(file => {
let files = JSON.parse(
readFileSync(
path.join(
__dirname,
`/cypress/fixtures/path-data/${
project ? 'projects-and-back-challenges' : 'challenges'
}/${file}`
),
'utf-8'
)
);
let challengeBlocks = Object.keys(files['blocks']);
challengeBlocks.forEach(block => {
if (!blockInDir.includes(block)) {
writeFileSync(
path.join(
__dirname,
`/cypress/integration/challenge-tests/blocks/${block}.js`
),
`/* global cy */
const superBlockPath = require('../../../fixtures/path-data/${
project ? 'projects-and-back-challenges' : 'challenges'
}/${file}');
const blocks = Object.entries(superBlockPath['blocks']['${block}'])
for(const [challengeName , challengePath] of blocks){
describe('loading challenge', () => {
before(() => {
cy.visit(challengePath)
})
it('Challenge ' + challengeName + ' should work correctly', () => {
${
project
? 'cy.testProjectsAndBackend(challengePath)'
: 'cy.testChallenges(challengePath)'
}
})
});
}
`
);
}
});
});
}
divider(challengesFiles, false);
divider(projectsFiles, true);
return null;
}
createSpecFiles();
console.log('specfiles generated!');