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
pull/18182/head
Kristofer Koishigawa 2018-04-11 05:23:36 +09:00 committed by Stuart Taylor
parent b208c477fc
commit 5fa098ea0d
2 changed files with 29 additions and 0 deletions

26
challengeTitles.js Normal file
View 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;

View File

@ -6,9 +6,11 @@ import tape from 'tape';
import getChallenges from './getChallenges';
import { modern } from '../common/app/utils/challengeTypes';
import MongoIds from './mongoIds';
import ChallengeTitles from './challengeTitles';
import addAssertsToTapTest from './addAssertsToTapTest';
let mongoIds = new MongoIds();
let challengeTitles = new ChallengeTitles();
function evaluateTest(solution, assert,
react, redux, reactRedux,
@ -115,6 +117,7 @@ function createTest({
reactRedux = false
}) {
mongoIds.check(id, title);
challengeTitles.check(title);
solutions = solutions.filter(solution => !!solution);
tests = tests.filter(test => !!test);