From 442ecdd3c021af38382d6b6691fdb5ddcb5a33c2 Mon Sep 17 00:00:00 2001
From: Tim Macdonald <tim@metabase.com>
Date: Mon, 20 Feb 2023 14:22:31 +0000
Subject: [PATCH] Ensure dashcards are deleted after actions are deleted
 (#28446)

(c.f. discussion at https://metaboat.slack.com/archives/C04FG88HL95/p1676649795131089)
---
 test/metabase/models/action_test.clj | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/test/metabase/models/action_test.clj b/test/metabase/models/action_test.clj
index 129ff11b477..44610ab7928 100644
--- a/test/metabase/models/action_test.clj
+++ b/test/metabase/models/action_test.clj
@@ -1,7 +1,7 @@
 (ns metabase.models.action-test
   (:require
    [clojure.test :refer :all]
-   [metabase.models :refer [Dashboard DashboardCard]]
+   [metabase.models :refer [Action Dashboard DashboardCard]]
    [metabase.models.action :as action]
    [metabase.test :as mt]
    [toucan.hydrate :refer [hydrate]]
@@ -59,10 +59,19 @@
 (deftest dashcard-deletion-test
   (mt/test-drivers (mt/normal-drivers-with-feature :actions/custom)
     (mt/with-actions-enabled
-      (mt/with-actions [{:keys [action-id]} {}]
-        (mt/with-temp* [Dashboard [{dashboard-id :id}]
-                        DashboardCard [{dashcard-id :id} {:action_id action-id
-                                                          :dashboard_id dashboard-id}]]
-          (is (= 1 (t2/count DashboardCard :id dashcard-id)))
-          (action/update! {:id action-id, :archived true} {:id action-id})
-          (is (zero? (t2/count DashboardCard :id dashcard-id))))))))
+      (testing "Dashcards are deleted after actions are archived"
+        (mt/with-actions [{:keys [action-id]} {}]
+          (mt/with-temp* [Dashboard [{dashboard-id :id}]
+                          DashboardCard [{dashcard-id :id} {:action_id action-id
+                                                            :dashboard_id dashboard-id}]]
+            (is (= 1 (t2/count DashboardCard :id dashcard-id)))
+            (action/update! {:id action-id, :archived true} {:id action-id})
+            (is (zero? (t2/count DashboardCard :id dashcard-id))))))
+      (testing "Dashcards are deleted after actions are deleted entirely"
+        (mt/with-actions [{:keys [action-id]} {}]
+          (mt/with-temp* [Dashboard [{dashboard-id :id}]
+                          DashboardCard [{dashcard-id :id} {:action_id action-id
+                                                            :dashboard_id dashboard-id}]]
+            (is (= 1 (t2/count DashboardCard :id dashcard-id)))
+            (t2/delete! Action :id action-id)
+            (is (zero? (t2/count DashboardCard :id dashcard-id)))))))))
-- 
GitLab