Skip to content

Commit 793d1e3

Browse files
committed
refactor then/catch/finally patterns to use async/await patterns (javascript); refactor front-end unit tests
1 parent c2c71de commit 793d1e3

28 files changed

+224
-188
lines changed

FullStackTesting/FullStackTesting.Web.Api/ClientApp/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@
2323
},
2424
"devDependencies": {
2525
"@testing-library/jest-dom": "^5.11.9",
26-
"@types/jest": "^26.0.20",
27-
"@vue/cli-plugin-babel": "^4.5.11",
28-
"@vue/cli-plugin-e2e-nightwatch": "^4.5.11",
29-
"@vue/cli-plugin-pwa": "^4.5.11",
30-
"@vue/cli-plugin-typescript": "^4.5.11",
31-
"@vue/cli-plugin-unit-jest": "^4.5.11",
32-
"@vue/cli-service": "^4.5.11",
26+
"@types/jest": "^26.0.21",
27+
"@vue/cli-plugin-babel": "^4.5.12",
28+
"@vue/cli-plugin-e2e-nightwatch": "^4.5.12",
29+
"@vue/cli-plugin-pwa": "^4.5.12",
30+
"@vue/cli-plugin-typescript": "^4.5.12",
31+
"@vue/cli-plugin-unit-jest": "^4.5.12",
32+
"@vue/cli-service": "^4.5.12",
3333
"@vue/test-utils": "1.1.3",
3434
"node-sass": "^5.0.0",
3535
"sass-loader": "^10.1.1",
36-
"ts-jest": "^26.5.3",
36+
"ts-jest": "^26.5.4",
3737
"typescript": "^4.2.3",
3838
"vue-template-compiler": "^2.6.12",
3939
"vuex-module-decorators": "^1.0.1"

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/App.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<script lang="ts">
1212
import { Component, Vue } from 'vue-property-decorator';
13-
import Navbar from '@/components/NavBar.vue';
13+
import { Navbar } from '@/components';
1414
1515
@Component({
1616
components: {

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/api/base.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ export abstract class BaseService {
1616
});
1717

1818
this.$http.interceptors.response.use(
19-
(response: AxiosResponse<any>) => {
19+
(response: AxiosResponse) => {
2020
return response;
2121
},
22-
(error: AxiosError<any>) => {
22+
(error: AxiosError) => {
2323
alertAxiosError(error);
2424
return Promise.reject(error);
2525
}

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/api/employees.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ class EmployeeService extends BaseService {
2222
return data;
2323
}
2424

25-
public async addEmployeeAsync(employee: IEmployee): Promise<any> {
25+
public async addEmployeeAsync(employee: IEmployee): Promise<void> {
2626
const config: AxiosRequestConfig = { params: { id: employee.id } };
2727
await this.$http.post("AddEmployeeAsync", employee, config);
2828
}
2929

30-
public async deleteEmployeeAsync(employee: IEmployee): Promise<any> {
30+
public async deleteEmployeeAsync(employee: IEmployee): Promise<void> {
3131
const config: AxiosRequestConfig = { params: { id: employee.id } };
3232
await this.$http.delete("DeleteEmployeeAsync", config);
3333
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { EmployeeApi } from './employees.service';
2+
3+
export {
4+
EmployeeApi
5+
};

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/components/AddEmployee.vue

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ import { alertAxiosSuccess } from "../utils";
8484
import { IDropdownOption, IEmployee } from "../types";
8585
import VCheckbox from "./VCheckbox.render";
8686
import VDropdown from "./VDropdown.render";
87-
import { dropdownTestData, modalIDs } from "../config/constants";
87+
import { dropdownTestData, modalIDs } from "../config";
8888
import { EmployeeModule } from "../store/modules/employee.module";
8989
9090
@Component({
@@ -129,39 +129,40 @@ export default class AddEmployee extends Vue {
129129
}
130130
131131
get employeeIds(): number[] {
132-
return EmployeeModule.employees.map((employee) => employee.id) || [];
132+
return EmployeeModule.employees.map(({ id }) => id);
133133
}
134134
135-
public handleAddEmployee(): void {
135+
public async handleAddEmployee(): Promise<void> {
136136
if (!this.firstName || !this.lastName) {
137137
this.invalidInputs = true;
138138
return;
139139
}
140140
141141
this.invalidInputs = false;
142-
143142
const newEmployeeId: number = this.getNewEmployeeId();
144-
const addEmployee: IEmployee = {
145-
id: newEmployeeId,
146-
...EmployeeModule.activeEmployee,
147-
};
148-
149-
EmployeeModule.AddEmployee(addEmployee).then(() => {
150-
this.handleCloseModal();
151-
EmployeeModule.GetAllEmployees().then(() => {
152-
setTimeout(() => this.$emit("employeeAdded", newEmployeeId), 250);
153-
alertAxiosSuccess("Employee was added!", "Success", 400);
154-
});
155-
});
143+
const addEmployee: IEmployee = { id: newEmployeeId, ...EmployeeModule.activeEmployee };
144+
145+
try {
146+
await EmployeeModule.AddEmployee(addEmployee);
147+
await this.handleCloseModal();
148+
await EmployeeModule.GetAllEmployees();
149+
setTimeout(() => this.$emit("employeeAdded", newEmployeeId), 250);
150+
alertAxiosSuccess("Employee was added!", "Success", 400);
151+
} catch (e) {
152+
console.error(e);
153+
}
156154
}
157155
158-
public handleCloseModal(): void {
159-
EmployeeModule.ResetActiveEmployeeFields().then(() => {
156+
public async handleCloseModal(): Promise<void> {
157+
try {
158+
await EmployeeModule.ResetActiveEmployeeFields();
160159
this.$modal.hide(this.modalIDs.ADD_EMPLOYEE);
161-
});
160+
} catch (e) {
161+
console.error(e);
162+
}
162163
}
163164
164-
public getNewEmployeeId(): number {
165+
private getNewEmployeeId(): number {
165166
let newId;
166167
167168
do {

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/components/HomeContent.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
<script lang="ts">
2828
import { Component, Prop, Vue } from 'vue-property-decorator';
29-
import { npmLinksConfig } from '../config/constants';
29+
import { npmLinksConfig } from '../config';
3030
3131
@Component
3232
export default class HomeContent extends Vue {

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/components/NavBar.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<template>
2-
<nav id="nav" role="navigation" aria-label="main navigation">
2+
<nav
3+
id="nav"
4+
role="navigation"
5+
aria-label="main navigation"
6+
>
37
<router-link
48
v-for="route in $router.options.routes"
59
:key="route.path"

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/components/VCheckbox.render.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ export default class VCheckBox extends Vue {
3333
}
3434

3535
private handleOnChange(e: Event): void {
36-
this.$emit("checked", !!(e.target as HTMLInputElement).checked);
36+
this.$emit("checked", (e.target as HTMLInputElement).checked);
3737
}
3838
}

FullStackTesting/FullStackTesting.Web.Api/ClientApp/src/components/VDropdown.render.tsx

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,12 @@ export default class VDropdown extends Vue {
5656

5757
public renderListOption(option: any, index: number): VNode {
5858
const optionLabel = this.getOptionLabelName(option);
59+
5960
return (
6061
<li key={index}>
6162
<a
6263
role="button"
63-
class={[
64-
"dropdown-item",
65-
{ "selected-option": optionLabel === this.selectedOptionLabel },
66-
]}
64+
class={["dropdown-item", { "selected-option": optionLabel === this.selectedOptionLabel }]}
6765
onClick={() => this.updateSelectedOption(option)}
6866
>
6967
{optionLabel}
@@ -89,17 +87,21 @@ export default class VDropdown extends Vue {
8987
}
9088

9189
public keyDownHandler(e: KeyboardEvent): void {
92-
if (e.keyCode === 38 || e.keyCode === 40) {
93-
// up and down keys
94-
this.toggleDropdownMenu();
95-
e.preventDefault();
96-
} else if (e.keyCode === 27) {
97-
// Esc key
98-
this.$refs.dropdownButton.focus();
99-
this.hideDropdownMenu();
100-
} else if (e.keyCode === 9) {
101-
// Tab key
102-
this.hideDropdownMenu();
90+
switch (e.key) {
91+
case 'ArrowUp':
92+
case 'ArrowDown':
93+
this.toggleDropdownMenu();
94+
e.preventDefault();
95+
break;
96+
case 'Escape':
97+
this.$refs.dropdownButton.focus();
98+
this.hideDropdownMenu();
99+
break;
100+
case 'Tab':
101+
this.hideDropdownMenu();
102+
break;
103+
default:
104+
break;
103105
}
104106
}
105107
}

0 commit comments

Comments
 (0)