From 7d3954ad13791cfaa29e3f5b5dcb8f43289d73b8 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:58:42 +0200 Subject: [PATCH 1/5] Modernize DiskUsageSummary component - Convert to script setup + Typescript - Adapt tests --- .../User/DiskUsage/DiskUsageSummary.test.ts | 37 ++--- .../User/DiskUsage/DiskUsageSummary.vue | 146 ++++++++---------- .../User/DiskUsage/Quota/model/QuotaUsage.ts | 8 +- client/src/stores/userStore.ts | 5 +- 4 files changed, 91 insertions(+), 105 deletions(-) diff --git a/client/src/components/User/DiskUsage/DiskUsageSummary.test.ts b/client/src/components/User/DiskUsage/DiskUsageSummary.test.ts index c2fe85c41ed0..40508d6323a5 100644 --- a/client/src/components/User/DiskUsage/DiskUsageSummary.test.ts +++ b/client/src/components/User/DiskUsage/DiskUsageSummary.test.ts @@ -3,8 +3,6 @@ import flushPromises from "flush-promises"; import { createPinia } from "pinia"; import { getLocalVue } from "tests/jest/helpers"; -import MockCurrentUser from "@/components/providers/MockCurrentUser"; -import MockProvider from "@/components/providers/MockProvider"; import { mockFetcher } from "@/schema/__mocks__"; import { useUserStore } from "@/stores/userStore"; @@ -14,17 +12,19 @@ jest.mock("@/schema"); const localVue = getLocalVue(); -const quotaUsageSummaryComponentId = "quota-usage-summary"; -const basicDiskUsageSummaryId = "basic-disk-usage-summary"; +const quotaUsageClassSelector = ".quota-usage"; +const basicDiskUsageSummaryId = "#basic-disk-usage-summary"; -const fakeUser = { +const fakeUserWithQuota = { + id: "fakeUser", + email: "fakeUserEmail", + tags_used: [], + isAnonymous: false, total_disk_usage: 1054068, + quota_bytes: 1000000000, + quota_percent: 0.1, + quota_source_label: "Default", }; -const CurrentUserMock = MockCurrentUser(fakeUser); -const QuotaUsageProviderMock = MockProvider({ - result: [], -}); -const QuotaUsageSummaryMock = { template: `
` }; async function mountDiskUsageSummaryWrapper(enableQuotas: boolean) { mockFetcher @@ -33,16 +33,11 @@ async function mountDiskUsageSummaryWrapper(enableQuotas: boolean) { .mock({ data: { enable_quotas: enableQuotas } }); const pinia = createPinia(); const wrapper = mount(DiskUsageSummary, { - stubs: { - CurrentUser: CurrentUserMock, - QuotaUsageProvider: QuotaUsageProviderMock, - QuotaUsageSummary: QuotaUsageSummaryMock, - }, localVue, pinia, }); const userStore = useUserStore(); - userStore.currentUser = { id: "fakeUser", email: "fakeUserEmail", tags_used: [], isAnonymous: false }; + userStore.currentUser = fakeUserWithQuota; await flushPromises(); return wrapper; } @@ -51,14 +46,16 @@ describe("DiskUsageSummary.vue", () => { it("should display basic disk usage summary if quotas are NOT enabled", async () => { const enableQuotasInConfig = false; const wrapper = await mountDiskUsageSummaryWrapper(enableQuotasInConfig); - expect(wrapper.find(`#${basicDiskUsageSummaryId}`).exists()).toBe(true); - expect(wrapper.find(`#${quotaUsageSummaryComponentId}`).exists()).toBe(false); + expect(wrapper.find(basicDiskUsageSummaryId).exists()).toBe(true); + const quotaUsages = wrapper.findAll(quotaUsageClassSelector); + expect(quotaUsages.length).toBe(0); }); it("should display quota usage summary if quotas are enabled", async () => { const enableQuotasInConfig = true; const wrapper = await mountDiskUsageSummaryWrapper(enableQuotasInConfig); - expect(wrapper.find(`#${basicDiskUsageSummaryId}`).exists()).toBe(false); - expect(wrapper.find(`#${quotaUsageSummaryComponentId}`).exists()).toBe(true); + expect(wrapper.find(basicDiskUsageSummaryId).exists()).toBe(false); + const quotaUsages = wrapper.findAll(quotaUsageClassSelector); + expect(quotaUsages.length).toBe(1); }); }); diff --git a/client/src/components/User/DiskUsage/DiskUsageSummary.vue b/client/src/components/User/DiskUsage/DiskUsageSummary.vue index bb1baea3ee65..2cc07c3c1a76 100644 --- a/client/src/components/User/DiskUsage/DiskUsageSummary.vue +++ b/client/src/components/User/DiskUsage/DiskUsageSummary.vue @@ -1,7 +1,71 @@ + - - diff --git a/client/src/components/User/DiskUsage/Quota/model/QuotaUsage.ts b/client/src/components/User/DiskUsage/Quota/model/QuotaUsage.ts index 28ce5dfb1b84..b34eeb57f10c 100644 --- a/client/src/components/User/DiskUsage/Quota/model/QuotaUsage.ts +++ b/client/src/components/User/DiskUsage/Quota/model/QuotaUsage.ts @@ -1,13 +1,9 @@ +import type { components } from "@/schema"; import { bytesToString } from "@/utils/utils"; export const DEFAULT_QUOTA_SOURCE_LABEL = "Default"; -export interface QuotaUsageResponse { - quota_source_label?: string; - quota_bytes?: number; - total_disk_usage: number; - quota_percent?: number; -} +type QuotaUsageResponse = components["schemas"]["UserQuotaUsage"]; /** * Contains information about quota usage for a particular ObjectStore. diff --git a/client/src/stores/userStore.ts b/client/src/stores/userStore.ts index 5cb89f483c41..43dfb82c0b7a 100644 --- a/client/src/stores/userStore.ts +++ b/client/src/stores/userStore.ts @@ -2,6 +2,7 @@ import { defineStore } from "pinia"; import { computed, ref } from "vue"; import { useUserLocalStorage } from "@/composables/userLocalStorage"; +import { components } from "@/schema"; import { useHistoryStore } from "@/stores/historyStore"; import { addFavoriteToolQuery, @@ -10,7 +11,9 @@ import { setCurrentThemeQuery, } from "@/stores/users/queries"; -interface User { +type QuotaUsageResponse = components["schemas"]["UserQuotaUsage"]; + +interface User extends QuotaUsageResponse { id: string; email: string; tags_used: string[]; From 9163f376dc292fce08bb5a0ec17a57bfb1c5d5a1 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Fri, 8 Sep 2023 15:52:07 +0200 Subject: [PATCH 2/5] Enhance reactivity of disk usage recalculation If we have the task ID of the recalculation task we use it to track when it finishes instead of waiting a fixed amount of time. --- .../User/DiskUsage/DiskUsageSummary.vue | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/client/src/components/User/DiskUsage/DiskUsageSummary.vue b/client/src/components/User/DiskUsage/DiskUsageSummary.vue index 2cc07c3c1a76..ed561346c6f5 100644 --- a/client/src/components/User/DiskUsage/DiskUsageSummary.vue +++ b/client/src/components/User/DiskUsage/DiskUsageSummary.vue @@ -1,8 +1,9 @@