diff --git a/frontend/playwright/data/dashboard/delete-team.json b/frontend/playwright/data/dashboard/delete-team.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/frontend/playwright/data/dashboard/delete-team.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/frontend/playwright/data/logged-in-user/get-teams-complete-owner.json b/frontend/playwright/data/logged-in-user/get-teams-complete-owner.json new file mode 100644 index 000000000..910e1543f --- /dev/null +++ b/frontend/playwright/data/logged-in-user/get-teams-complete-owner.json @@ -0,0 +1,48 @@ +[ + { + "~:features": { + "~#set": [ + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true + }, + "~:name": "Default", + "~:modified-at": "~m1713533116375", + "~:id": "~uc7ce0794-0992-8105-8004-38e630f40f6d", + "~:created-at": "~m1713533116375", + "~:is-default": true +}, + { + "~:features": { + "~#set": [ + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true + }, + "~:name": "Second team", + "~:modified-at": "~m1701164272671", + "~:id": "~udd33ff88-f4e5-8033-8003-8096cc07bdf3", + "~:created-at": "~m1701164272671", + "~:is-default": false + } +] diff --git a/frontend/playwright/ui/pages/DashboardPage.js b/frontend/playwright/ui/pages/DashboardPage.js index 16423fd4d..9dfde8843 100644 --- a/frontend/playwright/ui/pages/DashboardPage.js +++ b/frontend/playwright/ui/pages/DashboardPage.js @@ -155,6 +155,9 @@ export class DashboardPage extends BaseWebSocketPage { await this.mockRPC("search-files", "dashboard/search-files.json", { method: "POST", }); + await this.mockRPC("delete-team", "dashboard/delete-team.json", { + method: "POST", + }); await this.mockRPC("search-files", "dashboard/search-files.json"); await this.mockRPC("get-teams", "logged-in-user/get-teams-complete.json"); } diff --git a/frontend/playwright/ui/specs/dashboard.spec.js b/frontend/playwright/ui/specs/dashboard.spec.js index aa734d54d..58f2f07d0 100644 --- a/frontend/playwright/ui/specs/dashboard.spec.js +++ b/frontend/playwright/ui/specs/dashboard.spec.js @@ -158,3 +158,31 @@ test("Bug 9927, Don't show the banner to invite team members if the user has dis await expect(page.getByText("Second team")).toBeVisible(); await expect(page.getByText("Team Up")).not.toBeVisible(); }); + +test("Bug 10141, The team does not disappear from the team list after deletion", async ({ + page, +}) => { + const dashboardPage = new DashboardPage(page); + await dashboardPage.setupDashboardFull(); + await DashboardPage.mockRPC( + page, + "get-teams", + "logged-in-user/get-teams-complete-owner.json", + ); + await dashboardPage.goToDashboard(); + await dashboardPage.teamDropdown.click(); + await expect(page.getByText("Second Team")).toBeVisible(); + await page.getByText("Second Team").click(); + await page.getByRole("button", { name: "team-management" }).click(); + await page.getByTestId("delete-team").click(); + + await DashboardPage.mockRPC( + page, + "get-teams", + "logged-in-user/get-teams-default.json", + ); + + await page.getByRole("button", { name: "Delete team" }).click(); + await dashboardPage.teamDropdown.click(); + await expect(page.getByText("Second Team")).not.toBeVisible(); +}); diff --git a/frontend/src/app/main/data/team.cljs b/frontend/src/app/main/data/team.cljs index b145b07cc..7ffb46463 100644 --- a/frontend/src/app/main/data/team.cljs +++ b/frontend/src/app/main/data/team.cljs @@ -474,6 +474,13 @@ (rx/tap on-success) (rx/catch on-error)))))) +(defn- team-deleted + [id] + (ptk/reify ::team-deleted + ptk/UpdateEvent + (update [_ state] + (update state :teams dissoc id)))) + (defn delete-team [{:keys [id] :as params}] (ptk/reify ::delete-team @@ -485,7 +492,10 @@ (meta params)] (->> (rp/cmd! :delete-team {:id id}) - (rx/mapcat on-success) + (rx/mapcat (fn [result] + (rx/concat + (rx/of (team-deleted id)) + (on-success result)))) (rx/catch on-error)))))) (defn delete-webhook