test(seed): Add Test for Unique Challenge Titles (#17035)
Due to the recent problem with two challenges having the same title, I added a check for unique titles to the test suite so that hopefully won't happen again. Addresses a comment in issue #16906, which was recently closed. BREAKING CHANGE: None Closes #16906
This commit is contained in:
committed by
Stuart Taylor
parent
b208c477fc
commit
5fa098ea0d
26
challengeTitles.js
Normal file
26
challengeTitles.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
class ChallengeTitles {
|
||||||
|
constructor() {
|
||||||
|
this.knownTitles = [];
|
||||||
|
}
|
||||||
|
check(title) {
|
||||||
|
if (typeof title !== 'string') {
|
||||||
|
throw new Error(`Expected a valid string for ${title}, got ${typeof title}`);
|
||||||
|
} else if (title.length === 0) {
|
||||||
|
throw new Error(`Expected a title length greater than 0`);
|
||||||
|
}
|
||||||
|
const titleToCheck = title.toLowerCase().replace(/\s+/g, '');
|
||||||
|
const titleIndex = _.findIndex(this.knownTitles, existing => titleToCheck === existing);
|
||||||
|
if (titleIndex !== -1) {
|
||||||
|
throw new Error(`
|
||||||
|
All challenges must have a unique title.
|
||||||
|
|
||||||
|
The title ${title} is already assigned
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
this.knownTitles = [ ...this.knownTitles, titleToCheck ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ChallengeTitles;
|
@ -6,9 +6,11 @@ import tape from 'tape';
|
|||||||
import getChallenges from './getChallenges';
|
import getChallenges from './getChallenges';
|
||||||
import { modern } from '../common/app/utils/challengeTypes';
|
import { modern } from '../common/app/utils/challengeTypes';
|
||||||
import MongoIds from './mongoIds';
|
import MongoIds from './mongoIds';
|
||||||
|
import ChallengeTitles from './challengeTitles';
|
||||||
import addAssertsToTapTest from './addAssertsToTapTest';
|
import addAssertsToTapTest from './addAssertsToTapTest';
|
||||||
|
|
||||||
let mongoIds = new MongoIds();
|
let mongoIds = new MongoIds();
|
||||||
|
let challengeTitles = new ChallengeTitles();
|
||||||
|
|
||||||
function evaluateTest(solution, assert,
|
function evaluateTest(solution, assert,
|
||||||
react, redux, reactRedux,
|
react, redux, reactRedux,
|
||||||
@ -115,6 +117,7 @@ function createTest({
|
|||||||
reactRedux = false
|
reactRedux = false
|
||||||
}) {
|
}) {
|
||||||
mongoIds.check(id, title);
|
mongoIds.check(id, title);
|
||||||
|
challengeTitles.check(title);
|
||||||
|
|
||||||
solutions = solutions.filter(solution => !!solution);
|
solutions = solutions.filter(solution => !!solution);
|
||||||
tests = tests.filter(test => !!test);
|
tests = tests.filter(test => !!test);
|
||||||
|
Reference in New Issue
Block a user