forked from freeCodeCamp/freeCodeCamp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
getChallenges.test.js
129 lines (110 loc) · 3.85 KB
/
getChallenges.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const path = require('path');
const {
createChallenge,
hasEnglishSource,
createCommentMap
} = require('./getChallenges');
const EXISTING_CHALLENGE_PATH = 'challenge.md';
const MISSING_CHALLENGE_PATH = 'no/challenge.md';
const basePath = '__fixtures__';
describe('create non-English challenge', () => {
describe('createChallenge', () => {
it('throws if lang is an invalid language', async () => {
await expect(
createChallenge(basePath, EXISTING_CHALLENGE_PATH, 'notlang', {})
).rejects.toThrow('notlang is not a accepted language');
});
it('throws an error if the source challenge is missing', async () => {
await expect(
createChallenge(basePath, MISSING_CHALLENGE_PATH, 'chinese', {})
).rejects.toThrow(
`Missing English challenge for
${MISSING_CHALLENGE_PATH}
It should be in
`
);
});
});
describe('hasEnglishSource', () => {
it('returns a boolean', async () => {
const sourceExists = await hasEnglishSource(
basePath,
EXISTING_CHALLENGE_PATH
);
expect(typeof sourceExists).toBe('boolean');
});
it('returns true if the English challenge exists', async () => {
const sourceExists = await hasEnglishSource(
basePath,
EXISTING_CHALLENGE_PATH
);
expect(sourceExists).toBe(true);
});
it('returns false if the English challenge is missing', async () => {
const sourceExists = await hasEnglishSource(
basePath,
MISSING_CHALLENGE_PATH
);
expect(sourceExists).toBe(false);
});
});
describe('createCommentMap', () => {
const dictionaryDir = path.resolve(
__dirname,
'__fixtures__',
'dictionaries'
);
const incompleteDictDir = path.resolve(
__dirname,
'__fixtures__',
'incomplete-dicts'
);
it('returns an object', () => {
expect(typeof createCommentMap(dictionaryDir)).toBe('object');
});
it('throws if an entry is missing', () => {
expect.assertions(1);
expect(() => createCommentMap(incompleteDictDir)).toThrow();
});
it('returns an object with an expected form', () => {
expect.assertions(4);
const expectedIds = [
'To be translated one',
'To be translated two',
'Not translated one',
'Not translated two'
];
const map = createCommentMap(dictionaryDir);
expect(Object.keys(map)).toEqual(expect.arrayContaining(expectedIds));
const mapValue = map['To be translated one'];
expect(Object.keys(mapValue)).toEqual(
expect.arrayContaining(['chinese', 'spanish'])
);
expect(typeof mapValue.chinese).toBe('string');
expect(typeof mapValue.spanish).toBe('string');
});
it('returns an object with expected values', () => {
expect.assertions(9);
const expectedIds = [
'To be translated one',
'To be translated two',
'Not translated one',
'Not translated two'
];
const map = createCommentMap(dictionaryDir);
expect(Object.keys(map)).toEqual(expect.arrayContaining(expectedIds));
const translatedOne = map['To be translated one'];
expect(translatedOne.chinese).toBe('Chinese translation one');
expect(translatedOne.spanish).toBe('Spanish translation one');
const translatedTwo = map['To be translated two'];
expect(translatedTwo.chinese).toBe('Chinese translation two');
expect(translatedTwo.spanish).toBe('Spanish translation two');
const untranslatedOne = map['Not translated one'];
expect(untranslatedOne.chinese).toBe('Not translated one');
expect(untranslatedOne.spanish).toBe('Not translated one');
const untranslatedTwo = map['Not translated two'];
expect(untranslatedTwo.chinese).toBe('Not translated two');
expect(untranslatedTwo.spanish).toBe('Not translated two');
});
});
});