Skip to content
Snippets Groups Projects
Unverified Commit 2603f240 authored by Ngoc Khuat's avatar Ngoc Khuat Committed by GitHub
Browse files

Do not clear http channels when sending pulse (#48330)

parent 3c16a1bd
No related branches found
No related tags found
No related merge requests found
...@@ -100,14 +100,19 @@ ...@@ -100,14 +100,19 @@
"Delete PulseChannels that have no recipients and no channel set for a pulse, returns the channel ids that were deleted." "Delete PulseChannels that have no recipients and no channel set for a pulse, returns the channel ids that were deleted."
[pulse-id] [pulse-id]
(when-let [ids-to-delete (seq (when-let [ids-to-delete (seq
(for [channel (t2/select [:model/PulseChannel :id :details] (for [channel (t2/select [:model/PulseChannel :id :details :channel_id :channel_type]
:pulse_id pulse-id :pulse_id pulse-id
:id [:not-in {:select [[:pulse_channel_id :id]] :id [:not-in {:select [[:pulse_channel_id :id]]
:from :pulse_channel_recipient :from :pulse_channel_recipient
:group-by [:pulse_channel_id] :group-by [:pulse_channel_id]
:having [:>= :%count.* [:raw 1]]}]) :having [:>= :%count.* [:raw 1]]}])
:when (and (empty? (get-in channel [:details :emails])) :when (case (:channel_type channel)
(not (get-in channel [:details :channel])))] :email
(empty? (get-in channel [:details :emails]))
:slack
(empty? (get-in channel [:details :channel]))
:http
(nil? (:channel_id channel)))]
(:id channel)))] (:id channel)))]
(log/infof "Deleting %d PulseChannels with id: %s due to having no recipients" (count ids-to-delete) (str/join ", " ids-to-delete)) (log/infof "Deleting %d PulseChannels with id: %s due to having no recipients" (count ids-to-delete) (str/join ", " ids-to-delete))
(t2/delete! :model/PulseChannel :id [:in ids-to-delete]) (t2/delete! :model/PulseChannel :id [:in ids-to-delete])
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
[compojure.core :as compojure] [compojure.core :as compojure]
[medley.core :as m] [medley.core :as m]
[metabase.channel.core :as channel] [metabase.channel.core :as channel]
[metabase.pulse :as pulse] [metabase.task.send-pulses :as task.send-pulses]
[metabase.test :as mt] [metabase.test :as mt]
[metabase.util.i18n :refer [deferred-tru]] [metabase.util.i18n :refer [deferred-tru]]
[ring.adapter.jetty :as jetty] [ring.adapter.jetty :as jetty]
...@@ -328,10 +328,10 @@ ...@@ -328,10 +328,10 @@
:model/Channel {chn-id :id} {:type :channel/http :model/Channel {chn-id :id} {:type :channel/http
:details {:url (str url (:path receive-route)) :details {:url (str url (:path receive-route))
:auth-method "none"}} :auth-method "none"}}
:model/PulseChannel _ {:pulse_id pulse-id :model/PulseChannel {pc-id :id} {:pulse_id pulse-id
:channel_type "http" :channel_type "http"
:channel_id chn-id}] :channel_id chn-id}]
(pulse/send-pulse! pulse) (#'task.send-pulses/send-pulse!* pulse-id [pc-id])
(is (=? {:body {:type "alert" (is (=? {:body {:type "alert"
:alert_id pulse-id :alert_id pulse-id
:alert_creator_id (mt/malli=? int?) :alert_creator_id (mt/malli=? int?)
......
...@@ -30,33 +30,72 @@ ...@@ -30,33 +30,72 @@
(t2/count PulseChannel))) (t2/count PulseChannel)))
(is (:archived (t2/select-one Pulse :id pulse-id))))) (is (:archived (t2/select-one Pulse :id pulse-id)))))
(testing "Has PulseChannelRecipient" (testing "emails"
(mt/with-temp [Pulse {pulse-id :id} {} (testing "keep if has PulseChannelRecipient"
PulseChannel {pc-id :id} {:pulse_id pulse-id (mt/with-temp [Pulse {pulse-id :id} {}
:channel_type :email} PulseChannel {pc-id :id} {:pulse_id pulse-id
PulseChannelRecipient _ {:user_id (mt/user->id :rasta) :channel_type :email}
:pulse_channel_id pc-id}] PulseChannelRecipient _ {:user_id (mt/user->id :rasta)
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id) :pulse_channel_id pc-id}]
(is (= 1 (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(t2/count PulseChannel))))) (is (= 1
(t2/count PulseChannel)))))
(testing "Has email" (testing "keep if has external email"
(mt/with-temp [Pulse {pulse-id :id} {} (mt/with-temp [Pulse {pulse-id :id} {}
PulseChannel _ {:pulse_id pulse-id PulseChannel _ {:pulse_id pulse-id
:channel_type :email :channel_type :email
:details {:emails ["test@metabase.com"]}}] :details {:emails ["test@metabase.com"]}}]
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id) (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(is (= 1 (is (= 1
(t2/count PulseChannel))))) (t2/count PulseChannel)))))
(testing "Has channel" (testing "clear if no recipients"
(mt/with-temp [Pulse {pulse-id :id} {} (mt/with-temp [Pulse {pulse-id :id} {}
PulseChannel _ {:pulse_id pulse-id PulseChannel _ {:pulse_id pulse-id
:channel_type :slack :channel_type :email}]
:details {:channel ["#test"]}}] (#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id) (is (= 0
(is (= 1 (t2/count PulseChannel))))))
(t2/count PulseChannel)))))))
(testing "slack"
(testing "Has channel"
(mt/with-temp [Pulse {pulse-id :id} {}
PulseChannel _ {:pulse_id pulse-id
:channel_type :slack
:details {:channel "#test"}}]
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(is (= 1
(t2/count PulseChannel)))))
(testing "No channel"
(mt/with-temp [Pulse {pulse-id :id} {}
PulseChannel _ {:pulse_id pulse-id
:channel_type :slack
:details {:channel nil}}]
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(is (= 0
(t2/count PulseChannel))))))
(testing "http"
(testing "do not clear if has a channel_id"
(mt/with-temp [:model/Channel {channel-id :id} {:type :channel/metabase-test
:details {}}
:model/Pulse {pulse-id :id} {}
:model/PulseChannel _ {:pulse_id pulse-id
:channel_id channel-id
:channel_type "http"}]
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(is (= 1
(t2/count :model/PulseChannel)))))
(testing "clear if there is no channel_id"
(mt/with-temp [:model/Pulse {pulse-id :id} {}
:model/PulseChannel _ {:pulse_id pulse-id
:channel_type :http}]
(#'task.send-pulses/clear-pulse-channels-no-recipients! pulse-id)
(is (= 0
(t2/count :model/PulseChannel))))))))
(def ^:private daily-at-1am (def ^:private daily-at-1am
{:schedule_type "daily" {:schedule_type "daily"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment