diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..d9c0303bd --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,34 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Jest All", + "program": "${workspaceFolder}/node_modules/@angular/cli/bin/ng", + "cwd": "${workspaceFolder}", + "args": [ + "test", + "--runInBand" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true, + }, + { + "type": "node", + "request": "launch", + "name": "Jest Current File", + "program": "${workspaceFolder}/node_modules/@angular/cli/bin/ng", + "cwd": "${workspaceFolder}", + "args": [ + "test", + "--testPathPattern=${fileBasenameNoExtension}", + "--runInBand", + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true, + } + ] + } diff --git a/package.json b/package.json index 982bb362f..ee93016db 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "ng": "ng", "api": "json-server --watch src/db.json", "lint": "tslint \"src/**/*.ts\" --project src/tsconfig.json --type-check && tslint \"e2e/**/*.ts\" --project e2e/tsconfig.json --type-check", - "test": "ng test", - "test:watch": "jest --watch", + "test": "ng test --coverage", + "test:watch": "ng test --watch", "pree2e": "webdriver-manager update --standalone false --gecko false", "e2e": "protractor" }, diff --git a/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.component.spec.ts b/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.component.spec.ts index 14c96bc00..ccad4faf4 100644 --- a/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.component.spec.ts +++ b/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.component.spec.ts @@ -192,9 +192,15 @@ describe('LeaderboardComponent', () => { it('score board should be set when values are emitted', () => { const user = TEST_DATA.userList[0]; + const categories = []; + for (const key in TEST_DATA.categoryDictionary) { + if (TEST_DATA.categoryDictionary.hasOwnProperty(key)) { + categories.push(TEST_DATA.categoryDictionary[key]); + } + } mockStore.overrideSelector>(appState.coreState, { topTopics: [], - categories: [], + categories: categories, user: user }); @@ -220,35 +226,83 @@ describe('LeaderboardComponent', () => { topTopics.push({id: data.id, categoryName: data.key, type: data.key}); }); + mockStore.overrideSelector>(appState.coreState, { + user: user, + topTopics: topTopics, + categories: categories + }); + mockStore.overrideSelector>(appState.dashboardState, { scoreBoard: TEST_DATA.leaderBoard }); + mockStore.refreshState(); + + const leaderBoardCat = []; + const items = []; + TEST_DATA.leaderBoard.map( + (leaderBoard: any) => { + if (leaderBoard.users.length > 0) { + leaderBoardCat.push(leaderBoard['type'] === 'category' ? TEST_DATA.categoryDictionary[leaderBoard.id].categoryName : + (`${leaderBoard.id.charAt(0).toUpperCase()}${leaderBoard.id.slice(1)}`)); + } + items.push(leaderBoard['type'] === 'category' ? TEST_DATA.categoryDictionary[leaderBoard.id].categoryName : + (`${leaderBoard.id.charAt(0).toUpperCase()}${leaderBoard.id.slice(1)}`)); + } + ); + + + expect(component.leaderBoardCat).toEqual(leaderBoardCat); + }); + + it('leaderboard category should be set when leaderboard contains more than one user values are emitted', () => { + const user = TEST_DATA.userList[0]; + const categories = []; + for (const key in TEST_DATA.categoryDictionary) { + if (TEST_DATA.categoryDictionary.hasOwnProperty(key)) { + categories.push(TEST_DATA.categoryDictionary[key]); + } + } + + const topTopics = []; + TEST_DATA.topTopics.forEach(data => { + topTopics.push({id: data.id, categoryName: data.key, type: data.key}); + }); + mockStore.overrideSelector>(appState.coreState, { user: user, topTopics: topTopics, categories: categories }); + mockStore.overrideSelector>(appState.dashboardState, { + scoreBoard: TEST_DATA.leaderBoard + }); + mockStore.refreshState(); + const leaderBoardCat = []; + const items = []; + const leaderBoardStatDictArr = {}; + TEST_DATA.leaderBoard.map( + (leaderBoard: any) => { + if (leaderBoard.users.length > 0) { + leaderBoardCat.push(leaderBoard['type'] === 'category' ? TEST_DATA.categoryDictionary[leaderBoard.id].categoryName : + (`${leaderBoard.id.charAt(0).toUpperCase()}${leaderBoard.id.slice(1)}`)); + } + items.push(leaderBoard['type'] === 'category' ? TEST_DATA.categoryDictionary[leaderBoard.id].categoryName : + (`${leaderBoard.id.charAt(0).toUpperCase()}${leaderBoard.id.slice(1)}`)); + } + ); + TEST_DATA.leaderBoard.filter((leaderBoardStatDict: any) => { + leaderBoardStatDictArr[leaderBoardStatDict['type'] === 'category' ? + TEST_DATA.categoryDictionary[leaderBoardStatDict.id].categoryName : + `${leaderBoardStatDict.id.charAt(0).toUpperCase()}${leaderBoardStatDict.id.slice(1)}`] = + leaderBoardStatDict.users; + }); - // const leaderBoardCat = []; - // const items = []; - // TEST_DATA.leaderBoard.map( - // (leaderBoard: any) => { - // if (leaderBoard.users.length > 0) { - // leaderBoardCat.push(leaderBoard['type'] === 'category' ? TEST_DATA.categoryDictionary[leaderBoard.id].categoryName : - // (`${leaderBoard.id.charAt(0).toUpperCase()}${leaderBoard.id.slice(1)}`)); - // } - // items.push(leaderBoard['type'] === 'category' ? TEST_DATA.categoryDictionary[leaderBoard.id].categoryName : - // (`${leaderBoard.id.charAt(0).toUpperCase()}${leaderBoard.id.slice(1)}`)); - // } - // ); - - - mockStore.refreshState(); - expect(component.leaderBoardStatDictArray).toEqual(TEST_DATA.leaderBoard); + expect(component.leaderBoardCat).toEqual(leaderBoardCat); + expect(component.leaderBoardStatDict).toEqual(leaderBoardStatDictArr); }); afterEach(() => { diff --git a/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.ts b/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.ts index f933b562f..ebd1f65ab 100644 --- a/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.ts +++ b/projects/trivia/src/app/dashboard/component/leaderboard/leaderboard.ts @@ -128,7 +128,7 @@ export class Leaderboard implements OnDestroy { }) ) .subscribe(lbsStat => { - if (lbsStat) { + if (lbsStat && Object.entries(this.categoryDict).length > 0) { this.leaderBoardStatDictArray = lbsStat; this.items = []; this.leaderBoardStatDictArray.map( diff --git a/projects/trivia/tsconfig.spec.json b/projects/trivia/tsconfig.spec.json index df46f0d8b..2d3261242 100644 --- a/projects/trivia/tsconfig.spec.json +++ b/projects/trivia/tsconfig.spec.json @@ -6,6 +6,7 @@ "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, + "esModuleInterop": true, "allowJs": true, "lib": [ "es2018",