252 lines
4.6 KiB
JavaScript
252 lines
4.6 KiB
JavaScript
const { sortChallenges } = require('./sort-challenges');
|
||
|
||
const challenges = [
|
||
{
|
||
name: 'HTML - project 1 - step 1',
|
||
superOrder: 1,
|
||
order: 1,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'HTML - project 1 - step 2',
|
||
superOrder: 1,
|
||
order: 1,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'HTML - project 1 - step 3',
|
||
superOrder: 1,
|
||
order: 1,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'HTML - project 1 - step 4',
|
||
superOrder: 1,
|
||
order: 1,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'HTML - project 2 - step 1',
|
||
superOrder: 1,
|
||
order: 2,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'HTML - project 2 - step 2',
|
||
superOrder: 1,
|
||
order: 2,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'HTML - project 2 - step 3',
|
||
superOrder: 1,
|
||
order: 2,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'HTML - project 2 - step 4',
|
||
superOrder: 1,
|
||
order: 2,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'HTML - project 3 - step 1',
|
||
superOrder: 1,
|
||
order: 3,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'HTML - project 3 - step 2',
|
||
superOrder: 1,
|
||
order: 3,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'HTML - project 3 - step 3',
|
||
superOrder: 1,
|
||
order: 3,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'HTML - project 3 - step 4',
|
||
superOrder: 1,
|
||
order: 3,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'CSS - project 1 - step 1',
|
||
superOrder: 2,
|
||
order: 1,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'CSS - project 1 - step 2',
|
||
superOrder: 2,
|
||
order: 1,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'CSS - project 1 - step 3',
|
||
superOrder: 2,
|
||
order: 1,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'CSS - project 1 - step 4',
|
||
superOrder: 2,
|
||
order: 1,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'CSS - project 2 - step 1',
|
||
superOrder: 2,
|
||
order: 2,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'CSS - project 2 - step 2',
|
||
superOrder: 2,
|
||
order: 2,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'CSS - project 2 - step 3',
|
||
superOrder: 2,
|
||
order: 2,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'CSS - project 2 - step 4',
|
||
superOrder: 2,
|
||
order: 2,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'CSS - project 3 - step 1',
|
||
superOrder: 2,
|
||
order: 3,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'CSS - project 3 - step 2',
|
||
superOrder: 2,
|
||
order: 3,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'CSS - project 3 - step 3',
|
||
superOrder: 2,
|
||
order: 3,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'CSS - project 3 - step 4',
|
||
superOrder: 2,
|
||
order: 3,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'JS - project 1 - step 1',
|
||
superOrder: 3,
|
||
order: 1,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'JS - project 1 - step 2',
|
||
superOrder: 3,
|
||
order: 1,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'JS - project 1 - step 3',
|
||
superOrder: 3,
|
||
order: 1,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'JS - project 1 - step 4',
|
||
superOrder: 3,
|
||
order: 1,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'JS - project 2 - step 1',
|
||
superOrder: 3,
|
||
order: 2,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'JS - project 2 - step 2',
|
||
superOrder: 3,
|
||
order: 2,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'JS - project 2 - step 3',
|
||
superOrder: 3,
|
||
order: 2,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'JS - project 2 - step 4',
|
||
superOrder: 3,
|
||
order: 2,
|
||
challengeOrder: 4
|
||
},
|
||
{
|
||
name: 'JS - project 3 - step 1',
|
||
superOrder: 3,
|
||
order: 3,
|
||
challengeOrder: 1
|
||
},
|
||
{
|
||
name: 'JS - project 3 - step 2',
|
||
superOrder: 3,
|
||
order: 3,
|
||
challengeOrder: 2
|
||
},
|
||
{
|
||
name: 'JS - project 3 - step 3',
|
||
superOrder: 3,
|
||
order: 3,
|
||
challengeOrder: 3
|
||
},
|
||
{
|
||
name: 'JS - project 3 - step 4',
|
||
superOrder: 3,
|
||
order: 3,
|
||
challengeOrder: 4
|
||
}
|
||
];
|
||
|
||
describe('sortChallenges', () => {
|
||
it('sorts challenges by superblock, block and challenge order', () => {
|
||
const copyOfChallenges = [...challenges];
|
||
shuffle(copyOfChallenges);
|
||
const actualChallenges = sortChallenges(copyOfChallenges);
|
||
|
||
expect(actualChallenges).toEqual(challenges);
|
||
});
|
||
|
||
it('does not change the original array', () => {
|
||
const copyOfChallenges = [...challenges];
|
||
copyOfChallenges[0] = {
|
||
name: 'JS - project 3 - step 4',
|
||
superOrder: 3,
|
||
order: 3,
|
||
challengeOrder: 4
|
||
};
|
||
const actualChallenges = sortChallenges(copyOfChallenges);
|
||
|
||
expect(actualChallenges[0]).not.toEqual(copyOfChallenges[0]);
|
||
});
|
||
});
|
||
|
||
// Use the Fisher–Yates shuffle algorithm to shuffle array
|
||
const shuffle = arr => {
|
||
for (let i = arr.length - 1; i > 0; i--) {
|
||
const j = Math.floor(Math.random() * (i + 1));
|
||
[arr[i], arr[j]] = [arr[j], arr[i]];
|
||
}
|
||
};
|