diff --git a/package-lock.json b/package-lock.json index d9726a8ac8ce5ee8c18b57b3fba03f2b5c82b4f5..2b96bfb58d8abae0a5942457b4b3d552bac7cab6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12004,8 +12004,7 @@ "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "bindings": "^1.5.0" } }, "normalize-path": { @@ -13822,13 +13821,6 @@ "thenify-all": "^1.0.0" } }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -19614,8 +19606,7 @@ "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "bindings": "^1.5.0" } }, "glob-parent": { @@ -19941,8 +19932,7 @@ "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "bindings": "^1.5.0" } }, "glob-parent": { diff --git a/src/views/Team.vue b/src/views/Team.vue index e600552e1d392a1a6f0144a066ea26de33bdbd52..f88abc223687d5167a726c1df535e901ed3e79e3 100644 --- a/src/views/Team.vue +++ b/src/views/Team.vue @@ -3,7 +3,6 @@
-
+
mdi-delete Remove Selected @@ -249,9 +244,7 @@ export default { team: {}, user: {}, loading: false, - isAdmin: false, search: "", - permission: false, snackbars: { add: false, delete: false, @@ -289,41 +282,39 @@ export default { }, methods: { async init() { - let isTeamLead = false; try { this.loading = true; - this.user = this.$store.state.user.user; + // no team specified if (!this.$route.params.teamId) { - // Admin and Super Admins don't have a team, so redirect them since + // Admin and Dojo Master don't have a team, so redirect them since // they don't have a reason to be on this page without a specific id + this.user = this.$store.state.user.user; if (this.user.permission !== Permission.USER) { console.warn("redirecting privileged user to /teams"); this.$router.push("/teams"); } else { // get the current user's team - const team = await TeamService.getMyTeam(); - this.team = await TeamService.getTeam(team[0].id); - isTeamLead = team[0].TeamMember.isTeamLead; + this.team = await TeamService.getMyTeam(); } } else { await this.getTeams(); } } catch (error) { + // TODO: WHY AREN'T ERRORS DISPLAYED TO THE USER??? console.error("!user error!", error); } finally { - this.isAdmin = - this.user.permission === Permission.SUPER_ADMIN || - this.user.permission === Permission.ADMIN; - this.permission = this.isAdmin || isTeamLead; this.loading = false; } }, async getTeams() { - this.loading = true; + if (this.initialLoad) { + this.loading = true; + } try { this.team = await TeamService.getTeam(this.$route.params.teamId); } catch (error) { + // TODO: WHY AREN'T ERRORS DISPLAYED TO THE USER??? console.error("!teams error!", error); } finally { this.loading = false; diff --git a/tests/unit/views/Team.spec.js b/tests/unit/views/Team.spec.js index 4e683b61d6da19ac2fbfb5b8f5f80c1697de6035..6a6cb1e079821620dd22896cc20ecedd362f076f 100644 --- a/tests/unit/views/Team.spec.js +++ b/tests/unit/views/Team.spec.js @@ -22,35 +22,14 @@ describe("Team", () => { jest.clearAllMocks(); }); it("should get team id from $route.params when present", async () => { - const store = new Vuex.Store({ - state: { - user: { - user: { name: "mock user", permission: Permission.ADMIN }, - }, - }, - }); TeamService.getTeam = jest.fn().mockResolvedValue({ name: "mock" }); - const wrapper = shallowMount(Team, { mocks: { $route }, store, localVue }); - expect(wrapper.vm.loading).toBe(true); - await flushPromises(); - expect(TeamService.getTeam).toHaveBeenCalledTimes(1); - expect(TeamService.getTeam).toHaveBeenCalledWith(42); - expect(wrapper.vm.loading).toBe(false); - }); - it("should throw an error in the getTeam statement", async () => { - const store = new Vuex.Store({ - state: { - user: { - user: { name: "mock user", permission: Permission.ADMIN }, - }, - }, - }); - TeamService.getTeam = jest.fn().mockRejectedValue("fake error"); - const wrapper = shallowMount(Team, { mocks: { $route }, store, localVue }); + const wrapper = shallowMount(Team, { mocks: { $route } }); + expect(wrapper.vm.loading).toBe(true); await flushPromises(); expect(TeamService.getTeam).toHaveBeenCalledTimes(1); + expect(TeamService.getTeam).toHaveBeenCalledWith(42); expect(wrapper.vm.loading).toBe(false); }); @@ -62,8 +41,7 @@ describe("Team", () => { }, }, }); - TeamService.getMyTeam = jest.fn().mockResolvedValue([{ id: 1 }]); - TeamService.getTeam = jest.fn().mockResolvedValue({ name: "mock" }); + TeamService.getMyTeam = jest.fn().mockResolvedValue({ name: "mock" }); const wrapper = shallowMount(Team, { mocks: { $route: blankRoute, $router: [] }, store, @@ -71,29 +49,10 @@ describe("Team", () => { }); expect(wrapper.vm.loading).toBe(true); await flushPromises(); - expect(TeamService.getTeam).toHaveBeenCalledTimes(1); expect(TeamService.getMyTeam).toHaveBeenCalledTimes(1); expect(wrapper.vm.loading).toBe(false); }); - it("should throw error in init statement", async () => { - const store = new Vuex.Store({ - state: { - user: { - user: { name: "mock user", permission: Permission.USER }, - }, - }, - }); - TeamService.getMyTeam = jest.fn().mockRejectedValue("fake error"); - const wrapper = shallowMount(Team, { - mocks: { $route: blankRoute, $router: [] }, - store, - localVue, - }); - expect(wrapper.vm.loading).toBe(true); - await flushPromises(); - expect(TeamService.getTeam).toHaveBeenCalledTimes(0); - expect(wrapper.vm.loading).toBe(false); - }); + it("should redirect non-users when team id is not in $route.params", async () => { const $router = { push: jest.fn(), @@ -117,6 +76,7 @@ describe("Team", () => { expect($router.push).toHaveBeenCalledWith("/teams"); expect(wrapper.vm.loading).toBe(false); }); + it("should toggle loading state on error", async () => { const store = new Vuex.Store({ state: { @@ -183,19 +143,8 @@ describe("Team", () => { describe("availableSlots", () => { it("should compute availableSlots when empty", async () => { // empty state - const store = new Vuex.Store({ - state: { - user: { - user: { name: "mock user", permission: Permission.ADMIN }, - }, - }, - }); TeamService.getTeam = jest.fn().mockResolvedValue({ name: "mock" }); - const wrapper = shallowMount(Team, { - mocks: { $route }, - store, - localVue, - }); + const wrapper = shallowMount(Team, { mocks: { $route } }); await flushPromises(); expect(wrapper.vm.availableSlots).toEqual(-1); }); @@ -205,18 +154,7 @@ describe("Team", () => { capacity: 3, members: [{}, {}], }); - const store = new Vuex.Store({ - state: { - user: { - user: { name: "mock user", permission: Permission.ADMIN }, - }, - }, - }); - const wrapper = shallowMount(Team, { - mocks: { $route }, - store, - localVue, - }); + const wrapper = shallowMount(Team, { mocks: { $route } }); await flushPromises(); expect(wrapper.vm.availableSlots).toEqual(1); }); @@ -240,14 +178,7 @@ describe("Team", () => { it("should compute deletingMessage", async () => { TeamService.getTeam = jest.fn().mockResolvedValue({ name: "mock" }); - const store = new Vuex.Store({ - state: { - user: { - user: { name: "mock user", permission: Permission.ADMIN }, - }, - }, - }); - const wrapper = shallowMount(Team, { mocks: { $route }, store, localVue }); + const wrapper = shallowMount(Team, { mocks: { $route } }); await flushPromises(); wrapper.vm.deletingMembers = [{ name: "mock member" }];