epam-ai-conductor 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/content/{content/module-1/tests/Button.test.tsx → module-1/tests/Button.test.js} +8 -8
- package/dist/content/module-1/tests/CourseCard.test.js +68 -0
- package/dist/content/module-1/tests/CourseInfo.test.js +136 -0
- package/dist/content/module-1/tests/Courses.test.js +81 -0
- package/dist/content/{content/module-1/tests/Header.test.tsx → module-1/tests/Header.test.js} +5 -7
- package/dist/content/module-1/tests/Input.test.js +42 -0
- package/dist/content/module-1/tests/helpers.test.js +13 -0
- package/dist/content/module-2/tests/App.test.js +130 -0
- package/dist/content/module-2/tests/Button.test.js +22 -0
- package/dist/content/module-2/tests/CourseCard.test.js +93 -0
- package/dist/content/module-2/tests/CourseInfo.test.js +125 -0
- package/dist/content/module-2/tests/Courses.test.js +106 -0
- package/dist/content/module-2/tests/CreateCourse.test.js +117 -0
- package/dist/content/module-2/tests/Header.test.js +45 -0
- package/dist/content/module-2/tests/Input.test.js +42 -0
- package/dist/content/module-2/tests/Login.test.js +128 -0
- package/dist/content/module-2/tests/Registration.test.js +119 -0
- package/dist/content/module-2/tests/helpers.test.js +13 -0
- package/dist/content/module-2/tests/services.test.js +79 -0
- package/dist/content/module-3/tests/App.test.js +192 -0
- package/dist/content/{module-1/tests/Button.test.tsx → module-3/tests/Button.test.js} +8 -8
- package/dist/content/module-3/tests/CourseCard.test.js +50 -0
- package/dist/content/module-3/tests/CourseInfo.test.js +148 -0
- package/dist/content/module-3/tests/Courses.test.js +107 -0
- package/dist/content/module-3/tests/CreateAuthor.test.js +36 -0
- package/dist/content/module-3/tests/CreateCourse.test.js +66 -0
- package/dist/content/module-3/tests/Header.test.js +76 -0
- package/dist/content/module-3/tests/Input.test.js +42 -0
- package/dist/content/module-3/tests/Login.test.js +62 -0
- package/dist/content/{module-2/tests/Registration.test.tsx → module-3/tests/Registration.test.js} +13 -13
- package/dist/content/module-3/tests/helpers.test.js +13 -0
- package/dist/content/module-3/tests/services.test.js +83 -0
- package/dist/content/module-3/tests/slices.test.js +146 -0
- package/dist/content/module-4/tests/App.test.js +309 -0
- package/dist/content/module-4/tests/Button.test.js +22 -0
- package/dist/content/module-4/tests/CourseCard.test.js +111 -0
- package/dist/content/module-4/tests/CourseForm.test.js +108 -0
- package/dist/content/module-4/tests/CourseInfo.test.js +146 -0
- package/dist/content/module-4/tests/Courses.test.js +129 -0
- package/dist/content/module-4/tests/CreateAuthor.test.js +37 -0
- package/dist/content/module-4/tests/Header.test.js +79 -0
- package/dist/content/{content/module-1/tests/Input.test.tsx → module-4/tests/Input.test.js} +17 -11
- package/dist/content/module-4/tests/Login.test.js +61 -0
- package/dist/content/module-4/tests/PrivateRoute.test.js +45 -0
- package/dist/content/{content/module-2/tests/Registration.test.tsx → module-4/tests/Registration.test.js} +14 -13
- package/dist/content/module-4/tests/helpers.test.js +13 -0
- package/dist/content/module-4/tests/services.test.js +267 -0
- package/dist/content/module-4/tests/slices.test.js +146 -0
- package/dist/content/module-4/tests/thunk.test.js +238 -0
- package/dist/context-builder.js +20 -2
- package/dist/context-builder.js.map +1 -1
- package/dist/version-pin.d.ts +5 -0
- package/dist/version-pin.js +84 -0
- package/dist/version-pin.js.map +1 -0
- package/package.json +2 -2
- package/dist/content/content/module-1/task/module-1_home-task_components.md +0 -257
- package/dist/content/content/module-1/task/module-1_home-task_good_practices.md +0 -69
- package/dist/content/content/module-1/task/module-1_home-task_task.md +0 -253
- package/dist/content/content/module-1/tests/CourseCard.test.tsx +0 -64
- package/dist/content/content/module-1/tests/CourseInfo.test.tsx +0 -73
- package/dist/content/content/module-1/tests/Courses.test.tsx +0 -87
- package/dist/content/content/module-1/tests/helpers.test.ts +0 -13
- package/dist/content/content/module-1/theory/module-1_elements-render.md +0 -66
- package/dist/content/content/module-1/theory/module-1_hooks_useEffect.md +0 -178
- package/dist/content/content/module-1/theory/module-1_hooks_useState.md +0 -131
- package/dist/content/content/module-1/theory/module-1_react.md +0 -64
- package/dist/content/content/module-1/theory/module-1_spa.md +0 -74
- package/dist/content/content/module-2/task/module-2_home-task_components.md +0 -313
- package/dist/content/content/module-2/task/module-2_home-task_good_practices.md +0 -35
- package/dist/content/content/module-2/task/module-2_home-task_task.md +0 -210
- package/dist/content/content/module-2/tests/App.test.tsx +0 -54
- package/dist/content/content/module-2/tests/Login.test.tsx +0 -73
- package/dist/content/content/module-2/tests/SearchBar.test.tsx +0 -39
- package/dist/content/content/module-2/theory/module-2_custom-hooks.md +0 -201
- package/dist/content/content/module-2/theory/module-2_hooks.md +0 -117
- package/dist/content/content/module-2/theory/module-2_react-router.md +0 -328
- package/dist/content/content/module-3/task/module-3_home-task_components.md +0 -94
- package/dist/content/content/module-3/task/module-3_home-task_good_practices.md +0 -26
- package/dist/content/content/module-3/task/module-3_home-task_task.md +0 -170
- package/dist/content/content/module-3/tests/App.test.tsx +0 -54
- package/dist/content/content/module-3/tests/Courses.test.tsx +0 -87
- package/dist/content/content/module-3/tests/CreateAuthor.test.tsx +0 -44
- package/dist/content/content/module-3/tests/CreateCourse.test.tsx +0 -122
- package/dist/content/content/module-3/theory/module-3_redux-hooks.md +0 -194
- package/dist/content/content/module-3/theory/module-3_state-actions-reducers.md +0 -445
- package/dist/content/content/module-4/task/module-4_home-task_components.md +0 -187
- package/dist/content/content/module-4/task/module-4_home-task_task.md +0 -139
- package/dist/content/content/module-4/tests/App.test.tsx +0 -54
- package/dist/content/content/module-4/tests/Courses.test.tsx +0 -87
- package/dist/content/content/module-4/tests/CreateCourse.test.tsx +0 -122
- package/dist/content/content/module-4/tests/Login.test.tsx +0 -73
- package/dist/content/content/module-4/theory/module-4_async-redux.md +0 -99
- package/dist/content/content/module-4/theory/module-4_private-routes.md +0 -55
- package/dist/content/content/module-5/task/module-5_home-task_instruction.md +0 -68
- package/dist/content/content/module-5/task/module-5_home-task_task.md +0 -154
- package/dist/content/content/module-5/tests/App.test.tsx +0 -54
- package/dist/content/content/module-5/tests/CourseCard.test.tsx +0 -64
- package/dist/content/content/module-5/tests/Courses.test.tsx +0 -87
- package/dist/content/content/module-5/tests/Header.test.tsx +0 -23
- package/dist/content/content/module-5/theory/module-5_react-testing-library_example.md +0 -379
- package/dist/content/content/module-5/theory/module-5_redux-writing-tests.md +0 -246
- package/dist/content/module-1/tests/CourseCard.test.tsx +0 -64
- package/dist/content/module-1/tests/CourseInfo.test.tsx +0 -73
- package/dist/content/module-1/tests/Courses.test.tsx +0 -87
- package/dist/content/module-1/tests/Header.test.tsx +0 -23
- package/dist/content/module-1/tests/Input.test.tsx +0 -36
- package/dist/content/module-1/tests/helpers.test.ts +0 -13
- package/dist/content/module-2/tests/App.test.tsx +0 -54
- package/dist/content/module-2/tests/Login.test.tsx +0 -73
- package/dist/content/module-2/tests/SearchBar.test.tsx +0 -39
- package/dist/content/module-3/tests/App.test.tsx +0 -54
- package/dist/content/module-3/tests/Courses.test.tsx +0 -87
- package/dist/content/module-3/tests/CreateAuthor.test.tsx +0 -44
- package/dist/content/module-3/tests/CreateCourse.test.tsx +0 -122
- package/dist/content/module-4/tests/App.test.tsx +0 -54
- package/dist/content/module-4/tests/Courses.test.tsx +0 -87
- package/dist/content/module-4/tests/CreateCourse.test.tsx +0 -122
- package/dist/content/module-4/tests/Login.test.tsx +0 -73
- package/dist/content/module-5/tests/App.test.tsx +0 -54
- package/dist/content/module-5/tests/CourseCard.test.tsx +0 -64
- package/dist/content/module-5/tests/Courses.test.tsx +0 -87
- package/dist/content/module-5/tests/Header.test.tsx +0 -23
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ import ora from 'ora';
|
|
|
9
9
|
import inquirer from 'inquirer';
|
|
10
10
|
import * as pty from 'node-pty';
|
|
11
11
|
import { ensureAuth } from './auth-check.js';
|
|
12
|
+
import { ensureSupportedClaude } from './version-pin.js';
|
|
12
13
|
import { buildContext, MODULE_TITLES } from './context-builder.js';
|
|
13
14
|
import { TOTAL_MODULES } from './content-loader.js';
|
|
14
15
|
import { startMcpServer } from './mcp-server.js';
|
|
@@ -126,6 +127,9 @@ program
|
|
|
126
127
|
console.log(chalk.white(' Install it with:'), chalk.cyan('codemie install claude'));
|
|
127
128
|
process.exit(1);
|
|
128
129
|
}
|
|
130
|
+
// 3.5. Align Claude Code with the CodeMie-supported version (best-effort,
|
|
131
|
+
// avoids CodeMie's interactive version-mismatch menu mid-launch).
|
|
132
|
+
ensureSupportedClaude();
|
|
129
133
|
// 4. Build context into target dir
|
|
130
134
|
const spinner = ora(`Preparing Module ${moduleNum} mentor context...`).start();
|
|
131
135
|
try {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAClF,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAgB;IAC1E,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElD,MAAM,YAAY,GAAG,2BAA2B,SAAS,oDAAoD,CAAC;IAE9G,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE;QACpF,IAAI,EAAE,aAAa;QACnB,IAAI;QACJ,IAAI;QACJ,GAAG,EAAE,SAAS;QACd,GAAG;KACJ,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,cAAc;IAC9B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,UAAU,SAAS,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,kBAAkB,SAAS,KAAK,QAAQ,EAAE,CAAC;IAE7D,MAAM,MAAM,GAAG,MAAM;QACnB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM;QAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM;QAC9G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM;QACnF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM;QAC9G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAErD,mFAAmF;IACnF,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,oEAAoE;QACpE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,kDAAkD;QAClD,IAAI,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,iEAAiE;IACjE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEnE,gCAAgC;IAChC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC/B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,2FAA2F,CAAC;KACxG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;KACtD,MAAM,CAAC,kBAAkB,EAAE,yDAAyD,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACpG,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAE3D,gBAAgB;IAChB,MAAM,UAAU,EAAE,CAAC;IAEnB,2BAA2B;IAC3B,IAAI,SAAiB,CAAC;IAEtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,yCAAyC;gBAClD,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxD,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;oBACvB,KAAK,EAAE,CAAC,GAAG,CAAC;iBACb,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;aACX,CAAC,CAAC,CAAC;QACJ,SAAS,GAAG,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,aAAa,GAAG,CAAC,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,wBAAwB,EAAE,CAAC;IACrD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mCAAmC;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,SAAS,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/E,IAAI,CAAC;QACH,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,UAAU,SAAS,gBAAgB,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,SAAS,SAAS,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,SAAS,kBAAkB,CAAC,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,SAAS,oBAAoB,CAAC,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,SAAS,qBAAqB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,wDAAwD;IACxD,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACrH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,gEAAgE,CAAC;KAC7E,cAAc,CAAC,uBAAuB,EAAE,eAAe,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/content/{content/module-1/tests/Button.test.tsx → module-1/tests/Button.test.js}
RENAMED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
2
|
import { render, fireEvent, screen } from "@testing-library/react";
|
|
3
|
-
import { Button } from "
|
|
3
|
+
import { Button } from "../../common/Button";
|
|
4
4
|
|
|
5
|
-
describe(
|
|
6
|
-
test("
|
|
5
|
+
describe("Button component", () => {
|
|
6
|
+
test("should render with provided `buttonText` prop value", () => {
|
|
7
7
|
const handleClickMock = jest.fn();
|
|
8
|
-
render(<Button buttonText=
|
|
8
|
+
render(<Button buttonText="Hello" handleClick={handleClickMock} />);
|
|
9
9
|
const buttonElement = screen.getByText("Hello");
|
|
10
10
|
|
|
11
11
|
expect(buttonElement).toBeInTheDocument();
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
test("
|
|
14
|
+
test("should call provided handleClick callback prop", () => {
|
|
15
15
|
const handleClickMock = jest.fn();
|
|
16
|
-
render(<Button handleClick={handleClickMock} buttonText=
|
|
16
|
+
render(<Button handleClick={handleClickMock} buttonText="Click me" />);
|
|
17
17
|
const buttonElement = screen.getByText("Click me");
|
|
18
18
|
|
|
19
19
|
fireEvent.click(buttonElement);
|
|
20
20
|
expect(handleClickMock).toHaveBeenCalledTimes(1);
|
|
21
21
|
});
|
|
22
|
-
})
|
|
22
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { CourseCard } from "../../components/Courses/components/CourseCard/CourseCard";
|
|
4
|
+
|
|
5
|
+
describe("CourseCard component", () => {
|
|
6
|
+
const course = {
|
|
7
|
+
id: "1",
|
|
8
|
+
title: "Course Title",
|
|
9
|
+
description: "Course Description",
|
|
10
|
+
creationDate: "08/03/2021",
|
|
11
|
+
duration: 60,
|
|
12
|
+
authors: [
|
|
13
|
+
"27cc3006-e93a-4748-8ca8-73d06aa93b6d",
|
|
14
|
+
"f762978b-61eb-4096-812b-ebde22838167",
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
const authorsList = [
|
|
18
|
+
{ id: "df32994e-b23d-497c-9e4d-84e4dc02882f", name: "name1" },
|
|
19
|
+
{ id: "27cc3006-e93a-4748-8ca8-73d06aa93b6d", name: "name2" },
|
|
20
|
+
{ id: "f762978b-61eb-4096-812b-ebde22838167", name: "name3" },
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
test("should render correct title from course prop", () => {
|
|
24
|
+
render(<CourseCard course={course} authorsList={authorsList} />);
|
|
25
|
+
|
|
26
|
+
const titleElement = screen.getByText("Course Title");
|
|
27
|
+
|
|
28
|
+
expect(titleElement).toBeInTheDocument();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("should render correct description from course prop", () => {
|
|
32
|
+
render(<CourseCard course={course} authorsList={authorsList} />);
|
|
33
|
+
const descriptionElement = screen.getByText("Course Description");
|
|
34
|
+
expect(descriptionElement).toBeInTheDocument();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("should render correct duration (use getCourseDuration e.g. duration: 60 => 01:00 hour)", () => {
|
|
38
|
+
render(<CourseCard course={course} authorsList={authorsList} />);
|
|
39
|
+
|
|
40
|
+
const durationElement = screen.getByText(/01:00 hour/);
|
|
41
|
+
|
|
42
|
+
expect(durationElement).toBeInTheDocument();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("should render correct date (use formatCreationDate e.g. creationDate: 08/03/2021 => 08.03.2021)", () => {
|
|
46
|
+
render(<CourseCard course={course} authorsList={authorsList} />);
|
|
47
|
+
|
|
48
|
+
const creationDateElement = screen.getByText(/08.03.2021/);
|
|
49
|
+
|
|
50
|
+
expect(creationDateElement).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("should render authors list (match data from props course.authors and authorsList)", () => {
|
|
54
|
+
render(<CourseCard course={course} authorsList={authorsList} />);
|
|
55
|
+
|
|
56
|
+
const creationDateElement = screen.getByText(/name2, name3/);
|
|
57
|
+
|
|
58
|
+
expect(creationDateElement).toBeInTheDocument();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("should render 'SHOW COURSE' button", () => {
|
|
62
|
+
render(<CourseCard course={course} authorsList={authorsList} />);
|
|
63
|
+
|
|
64
|
+
const creationDateElement = screen.getByText(/Show course/i);
|
|
65
|
+
|
|
66
|
+
expect(creationDateElement).toBeInTheDocument();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, screen, fireEvent } from "@testing-library/react";
|
|
3
|
+
import { CourseInfo } from "../../components/CourseInfo";
|
|
4
|
+
import { formatCreationDate, getCourseDuration } from "../../helpers";
|
|
5
|
+
|
|
6
|
+
const mockedCoursesList = [
|
|
7
|
+
{
|
|
8
|
+
id: "1",
|
|
9
|
+
title: "Course 1",
|
|
10
|
+
description: "Course 1 description",
|
|
11
|
+
creationDate: "2022-01-01",
|
|
12
|
+
duration: 60,
|
|
13
|
+
authors: [
|
|
14
|
+
"27cc3006-e93a-4748-8ca8-73d06aa93b6d",
|
|
15
|
+
"f762978b-61eb-4096-812b-ebde22838167",
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "2",
|
|
20
|
+
title: "Course 2",
|
|
21
|
+
description: "Course 2 description",
|
|
22
|
+
creationDate: "2022-02-01",
|
|
23
|
+
duration: 90,
|
|
24
|
+
authors: ["df32994e-b23d-497c-9e4d-84e4dc02882f"],
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
const authorsList = [
|
|
28
|
+
{ id: "df32994e-b23d-497c-9e4d-84e4dc02882f", name: "name1" },
|
|
29
|
+
{ id: "27cc3006-e93a-4748-8ca8-73d06aa93b6d", name: "name2" },
|
|
30
|
+
{ id: "f762978b-61eb-4096-812b-ebde22838167", name: "name3" },
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
describe("CourseInfo", () => {
|
|
34
|
+
test("should renders correct title (find correct course from coursesList based on showCourseId prop) ", () => {
|
|
35
|
+
render(
|
|
36
|
+
<CourseInfo
|
|
37
|
+
coursesList={mockedCoursesList}
|
|
38
|
+
authorsList={authorsList}
|
|
39
|
+
showCourseId="1"
|
|
40
|
+
/>
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const courseTitle = screen.getByRole("heading", { level: 1 });
|
|
44
|
+
|
|
45
|
+
expect(courseTitle.textContent).toBe("Course 1");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("should renders correct description", () => {
|
|
49
|
+
render(
|
|
50
|
+
<CourseInfo
|
|
51
|
+
coursesList={mockedCoursesList}
|
|
52
|
+
authorsList={authorsList}
|
|
53
|
+
showCourseId="1"
|
|
54
|
+
/>
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const courseDescription = screen.getByText("Course 1 description");
|
|
58
|
+
|
|
59
|
+
expect(courseDescription).toBeInTheDocument();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("should renders correct course duration (use getCourseDuration)", () => {
|
|
63
|
+
render(
|
|
64
|
+
<CourseInfo
|
|
65
|
+
coursesList={mockedCoursesList}
|
|
66
|
+
authorsList={authorsList}
|
|
67
|
+
showCourseId="1"
|
|
68
|
+
/>
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const courseDuration = screen.queryByText(getCourseDuration(60));
|
|
72
|
+
|
|
73
|
+
expect(courseDuration).toBeInTheDocument();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("should renders correct course creation date (use formatCreationDate)", () => {
|
|
77
|
+
render(
|
|
78
|
+
<CourseInfo
|
|
79
|
+
coursesList={mockedCoursesList}
|
|
80
|
+
authorsList={authorsList}
|
|
81
|
+
showCourseId="1"
|
|
82
|
+
/>
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
const courseCreationDate = screen.getByText(
|
|
86
|
+
formatCreationDate(mockedCoursesList[0].creationDate)
|
|
87
|
+
);
|
|
88
|
+
expect(courseCreationDate).toBeInTheDocument();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test("should renders correct course authors names (find a course in the coursesList and match data from course authors and authorsList prop)", () => {
|
|
92
|
+
render(
|
|
93
|
+
<CourseInfo
|
|
94
|
+
coursesList={mockedCoursesList}
|
|
95
|
+
authorsList={authorsList}
|
|
96
|
+
showCourseId="1"
|
|
97
|
+
/>
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
const authorNames = screen
|
|
101
|
+
.getAllByRole("listitem")
|
|
102
|
+
.map((li) => li.textContent);
|
|
103
|
+
|
|
104
|
+
expect(authorNames).toEqual(["name2", "name3"]);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("should render `BACK` button correctly", () => {
|
|
108
|
+
render(
|
|
109
|
+
<CourseInfo
|
|
110
|
+
coursesList={mockedCoursesList}
|
|
111
|
+
authorsList={authorsList}
|
|
112
|
+
showCourseId="1"
|
|
113
|
+
/>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
const backButton = screen.getByRole("button");
|
|
117
|
+
|
|
118
|
+
expect(backButton).toBeInTheDocument();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("should call onBack handler on Back button click", () => {
|
|
122
|
+
const onBack = jest.fn();
|
|
123
|
+
render(
|
|
124
|
+
<CourseInfo
|
|
125
|
+
coursesList={mockedCoursesList}
|
|
126
|
+
authorsList={authorsList}
|
|
127
|
+
showCourseId="1"
|
|
128
|
+
onBack={onBack}
|
|
129
|
+
/>
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const backButton = screen.queryByText(/back/i);
|
|
133
|
+
fireEvent.click(backButton);
|
|
134
|
+
expect(onBack).toHaveBeenCalledTimes(1);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { Courses } from "../../components/Courses/Courses";
|
|
4
|
+
|
|
5
|
+
describe("Courses component", () => {
|
|
6
|
+
const mockedCoursesList = [
|
|
7
|
+
{
|
|
8
|
+
id: "1",
|
|
9
|
+
title: "Course 1",
|
|
10
|
+
description: "Course 1 description",
|
|
11
|
+
creationDate: "2022-01-01",
|
|
12
|
+
duration: 60,
|
|
13
|
+
authors: [
|
|
14
|
+
"27cc3006-e93a-4748-8ca8-73d06aa93b6d",
|
|
15
|
+
"f762978b-61eb-4096-812b-ebde22838167",
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "2",
|
|
20
|
+
title: "Course 2",
|
|
21
|
+
description: "Course 2 description",
|
|
22
|
+
creationDate: "2022-02-01",
|
|
23
|
+
duration: 90,
|
|
24
|
+
authors: ["df32994e-b23d-497c-9e4d-84e4dc02882f"],
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
const authorsList = [
|
|
28
|
+
{ id: "df32994e-b23d-497c-9e4d-84e4dc02882f", name: "name" },
|
|
29
|
+
{ id: "27cc3006-e93a-4748-8ca8-73d06aa93b6d", name: "name" },
|
|
30
|
+
{ id: "f762978b-61eb-4096-812b-ebde22838167", name: "name" },
|
|
31
|
+
];
|
|
32
|
+
const onAddClick = jest.fn();
|
|
33
|
+
|
|
34
|
+
test("should render list of courses from coursesList prop", () => {
|
|
35
|
+
render(
|
|
36
|
+
<Courses
|
|
37
|
+
coursesList={mockedCoursesList}
|
|
38
|
+
authorsList={authorsList}
|
|
39
|
+
onAddClick={onAddClick}
|
|
40
|
+
handleShowCourse={(id) => {}}
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const courseElements = screen.getAllByTestId("courseCard");
|
|
45
|
+
|
|
46
|
+
expect(courseElements[0]).toBeInTheDocument();
|
|
47
|
+
expect(courseElements).toHaveLength(2);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("should render 'ADD NEW COURSE' button", () => {
|
|
51
|
+
render(
|
|
52
|
+
<Courses
|
|
53
|
+
coursesList={mockedCoursesList}
|
|
54
|
+
authorsList={authorsList}
|
|
55
|
+
onAddClick={onAddClick}
|
|
56
|
+
handleShowCourse={(id) => {}}
|
|
57
|
+
/>
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const button = screen.getByText(/Add new/i);
|
|
61
|
+
|
|
62
|
+
expect(button).toBeInTheDocument();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test("should render EmptycoursesList component if no courses (with 'Your List Is Empty' text and button with data-testid='addCourse')", () => {
|
|
66
|
+
render(
|
|
67
|
+
<Courses
|
|
68
|
+
coursesList={[]}
|
|
69
|
+
authorsList={authorsList}
|
|
70
|
+
onAddClick={onAddClick}
|
|
71
|
+
handleShowCourse={(id) => {}}
|
|
72
|
+
/>
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const emptyText = screen.queryByText(/Your List Is Empty/i);
|
|
76
|
+
const addButtonElement = screen.getByTestId("addCourse");
|
|
77
|
+
|
|
78
|
+
expect(emptyText).toBeInTheDocument();
|
|
79
|
+
expect(addButtonElement).toBeInTheDocument();
|
|
80
|
+
});
|
|
81
|
+
});
|
package/dist/content/{content/module-1/tests/Header.test.tsx → module-1/tests/Header.test.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "@testing-library/jest-dom";
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
|
-
import { Header } from "
|
|
3
|
+
import { Header } from "../../components/Header/Header";
|
|
4
4
|
|
|
5
|
-
describe(
|
|
6
|
-
test("
|
|
5
|
+
describe("Header component", () => {
|
|
6
|
+
test("should render logo (<img /> tag)", () => {
|
|
7
7
|
render(<Header />);
|
|
8
8
|
|
|
9
9
|
const imageElement = screen.getByRole("img");
|
|
@@ -11,13 +11,11 @@ describe('Header component', () => {
|
|
|
11
11
|
expect(imageElement).toBeInTheDocument();
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
test("
|
|
14
|
+
test("should render logout button", () => {
|
|
15
15
|
render(<Header />);
|
|
16
16
|
|
|
17
17
|
const logoutButtonElement = screen.getByRole("button");
|
|
18
18
|
|
|
19
19
|
expect(logoutButtonElement).toBeInTheDocument();
|
|
20
20
|
});
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, fireEvent, screen } from "@testing-library/react";
|
|
3
|
+
import { Input } from "../../common/Input";
|
|
4
|
+
|
|
5
|
+
describe("Input component", () => {
|
|
6
|
+
const placeholderTextMock = "Enter a value";
|
|
7
|
+
|
|
8
|
+
test("should render input with provided labelText prop value", () => {
|
|
9
|
+
render(
|
|
10
|
+
<Input labelText="Test Input" placeholderText={placeholderTextMock} />
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
const inputElement = screen.getByLabelText("Test Input");
|
|
14
|
+
expect(inputElement).toBeInTheDocument();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("should render input with provided placeholderText prop value", () => {
|
|
18
|
+
const { getByPlaceholderText } = render(
|
|
19
|
+
<Input labelText="Test Input" placeholderText={placeholderTextMock} />
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
expect(getByPlaceholderText(placeholderTextMock)).toBeInTheDocument();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test("should call provided callback for onChange event", () => {
|
|
26
|
+
const handleChange = jest.fn();
|
|
27
|
+
|
|
28
|
+
render(
|
|
29
|
+
<Input
|
|
30
|
+
labelText="Test Input"
|
|
31
|
+
onChange={handleChange}
|
|
32
|
+
placeholderText={placeholderTextMock}
|
|
33
|
+
/>
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const inputElement = screen.getByLabelText("Test Input");
|
|
37
|
+
fireEvent.change(inputElement, { target: { value: "Hello" } });
|
|
38
|
+
|
|
39
|
+
expect(handleChange).toHaveBeenCalledTimes(1);
|
|
40
|
+
expect(inputElement.value).toBe("Hello");
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { formatCreationDate, getCourseDuration } from "../../helpers";
|
|
2
|
+
|
|
3
|
+
test("formatCreationDate function returns formatted date", () => {
|
|
4
|
+
const date = "2022/01/01";
|
|
5
|
+
const formattedDate = formatCreationDate(date);
|
|
6
|
+
expect(formattedDate).toBe("2022.01.01");
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test("getCourseDuration function returns formatted duration", () => {
|
|
10
|
+
expect(getCourseDuration(60)).toBe("01:00 hour");
|
|
11
|
+
expect(getCourseDuration(90)).toBe("01:30 hour");
|
|
12
|
+
expect(getCourseDuration(120)).toBe("02:00 hours");
|
|
13
|
+
});
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
3
|
+
import { MemoryRouter } from "react-router-dom";
|
|
4
|
+
import App from "../../App";
|
|
5
|
+
|
|
6
|
+
describe("App", () => {
|
|
7
|
+
test('should render Login component when "token" is not present in localStorage and route "/"', () => {
|
|
8
|
+
localStorage.removeItem("token");
|
|
9
|
+
render(
|
|
10
|
+
<MemoryRouter initialEntries={["/"]}>
|
|
11
|
+
<App />
|
|
12
|
+
</MemoryRouter>
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
expect(
|
|
16
|
+
screen.getByText(/If you don't have an account you/i)
|
|
17
|
+
).toBeInTheDocument();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('should switch to registration page from login page on "Registration" link click', () => {
|
|
21
|
+
localStorage.removeItem("token");
|
|
22
|
+
|
|
23
|
+
render(
|
|
24
|
+
<MemoryRouter initialEntries={["/"]}>
|
|
25
|
+
<App />
|
|
26
|
+
</MemoryRouter>
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
expect(
|
|
30
|
+
screen.getByText(/If you don't have an account you/i)
|
|
31
|
+
).toBeInTheDocument();
|
|
32
|
+
|
|
33
|
+
fireEvent.click(screen.getByText(/registration/i));
|
|
34
|
+
|
|
35
|
+
expect(screen.queryByText(/name/i)).toBeInTheDocument();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('should render Registration component when route "/registration"', () => {
|
|
39
|
+
localStorage.removeItem("token");
|
|
40
|
+
render(
|
|
41
|
+
<MemoryRouter initialEntries={["/registration"]}>
|
|
42
|
+
<App />
|
|
43
|
+
</MemoryRouter>
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
expect(screen.queryByText(/name/i)).toBeInTheDocument();
|
|
47
|
+
expect(screen.queryByText(/email/i)).toBeInTheDocument();
|
|
48
|
+
expect(screen.queryByText(/password/i)).toBeInTheDocument();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test('should switch to login page from registration page on "Login" link click', () => {
|
|
52
|
+
localStorage.removeItem("token");
|
|
53
|
+
render(
|
|
54
|
+
<MemoryRouter initialEntries={["/registration"]}>
|
|
55
|
+
<App />
|
|
56
|
+
</MemoryRouter>
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
expect(screen.queryByText(/name/i)).toBeInTheDocument();
|
|
60
|
+
expect(screen.queryByText(/email/i)).toBeInTheDocument();
|
|
61
|
+
expect(screen.queryByText(/password/i)).toBeInTheDocument();
|
|
62
|
+
|
|
63
|
+
fireEvent.click(screen.getByRole("link", { name: /login/i }));
|
|
64
|
+
|
|
65
|
+
expect(screen.queryByText(/name/i)).not.toBeInTheDocument();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('should render CourseCard components with data-testid="courseCard" when token is present in localStorage and route "/"', () => {
|
|
69
|
+
localStorage.setItem("token", "token");
|
|
70
|
+
render(
|
|
71
|
+
<MemoryRouter initialEntries={["/"]}>
|
|
72
|
+
<App />
|
|
73
|
+
</MemoryRouter>
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const courseElements = screen.getAllByTestId("courseCard");
|
|
77
|
+
|
|
78
|
+
expect(courseElements[0]).toBeInTheDocument();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('should render CourseForm component with "CREATE COURSE" button with data-testid="createCourseButton" if route "/courses/add"', () => {
|
|
82
|
+
render(
|
|
83
|
+
<MemoryRouter initialEntries={["/courses/add"]}>
|
|
84
|
+
<App />
|
|
85
|
+
</MemoryRouter>
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
expect(screen.getByTestId("createCourseButton")).toBeInTheDocument();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('should render CourseInfo component with data-testid="courseInfo" when route "/courses/:courseId"', () => {
|
|
92
|
+
render(
|
|
93
|
+
<MemoryRouter
|
|
94
|
+
initialEntries={["/courses/de5aaa59-90f5-4dbc-b8a9-aaf205c551ba"]}
|
|
95
|
+
>
|
|
96
|
+
<App />
|
|
97
|
+
</MemoryRouter>
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
expect(screen.getByTestId("courseInfo")).toBeInTheDocument();
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('should render CourseInfo with data-testid="courseInfo" component after "SHOW COURSE" button click', () => {
|
|
104
|
+
render(
|
|
105
|
+
<MemoryRouter>
|
|
106
|
+
<App />
|
|
107
|
+
</MemoryRouter>
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
fireEvent.click(screen.queryAllByText(/show/i)[0]);
|
|
111
|
+
|
|
112
|
+
expect(screen.getByTestId("courseInfo")).toBeInTheDocument();
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('should render list of courses with data-testid="courseCard" after "BACK" button click on CourseInfo page', () => {
|
|
116
|
+
render(
|
|
117
|
+
<MemoryRouter>
|
|
118
|
+
<App />
|
|
119
|
+
</MemoryRouter>
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
fireEvent.click(screen.queryAllByText(/show/i)[0]);
|
|
123
|
+
expect(screen.getByTestId("courseInfo")).toBeInTheDocument();
|
|
124
|
+
|
|
125
|
+
fireEvent.click(screen.queryAllByText(/back/i)[0]);
|
|
126
|
+
expect(screen.getAllByTestId("courseCard").length).toBeGreaterThanOrEqual(
|
|
127
|
+
1
|
|
128
|
+
);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { render, fireEvent, screen } from "@testing-library/react";
|
|
3
|
+
import { Button } from "../../common/Button";
|
|
4
|
+
|
|
5
|
+
describe("Button component", () => {
|
|
6
|
+
test("should render button with provided buttonText prop value", () => {
|
|
7
|
+
const handleClickMock = jest.fn();
|
|
8
|
+
render(<Button buttonText="Hello" handleClick={handleClickMock} />);
|
|
9
|
+
const buttonElement = screen.getByText("Hello");
|
|
10
|
+
|
|
11
|
+
expect(buttonElement).toBeInTheDocument();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test("should call provided handleClick callback prop", () => {
|
|
15
|
+
const handleClickMock = jest.fn();
|
|
16
|
+
render(<Button handleClick={handleClickMock} buttonText="Click me" />);
|
|
17
|
+
const buttonElement = screen.getByText("Click me");
|
|
18
|
+
|
|
19
|
+
fireEvent.click(buttonElement);
|
|
20
|
+
expect(handleClickMock).toHaveBeenCalledTimes(1);
|
|
21
|
+
});
|
|
22
|
+
});
|