diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj index e7631e9def9eaf8db48f63a32d3fb806a84643a1..c9ae3a58120a33836429bc144d6c1e42c5c9eb6c 100644 --- a/src/metabase/api/database.clj +++ b/src/metabase/api/database.clj @@ -902,6 +902,11 @@ :caveats caveats :points_of_interest points_of_interest :auto_run_queries auto_run_queries} + ;; upsert settings with a PATCH-style update. `nil` key means unset the Setting. + (when (seq settings) + {:settings (into {} + (remove (fn [[_k v]] (nil? v))) + (merge (:settings existing-database) settings))}) (cond ;; transition back to metabase managed schedules. the schedule ;; details, even if provided, are ignored. database is the @@ -912,15 +917,7 @@ ;; if user is controlling schedules (:let-user-control-scheduling details) - (sync.schedules/schedule-map->cron-strings (sync.schedules/scheduling schedules)) - - ;; upsert settings with a PATCH-style update. `nil` key means unset - ;; the Setting. - (seq settings) - {:settings (into {} - (remove (fn [[_k v]] (nil? v))) - (merge (:settings existing-database) - settings))}))) + (sync.schedules/schedule-map->cron-strings (sync.schedules/scheduling schedules))))) ;; do nothing in the case that user is not in control of ;; scheduling. leave them as they are in the db diff --git a/test/metabase/api/database_test.clj b/test/metabase/api/database_test.clj index d9fb010b7e0f7a53a72cf383809c94fa0cc69753..e326316a4ef2837ff512040ce1403a3ced83b5f0 100644 --- a/test/metabase/api/database_test.clj +++ b/test/metabase/api/database_test.clj @@ -369,6 +369,21 @@ (let [curr-db (t2/select-one [Database :cache_ttl], :id db-id)] (is (= nil (:cache_ttl curr-db)))))))))) +(deftest enable-model-actions-with-user-controlled-scheduling-test + (testing "Should be able to enable/disable actions for a database with user-controlled scheduling (metabase#30699)" + (mt/with-temp Database [{db-id :id} {:details {:let-user-control-scheduling true} + :settings {:database-enable-actions true}}] + (is (false? (get-in (mt/user-http-request :crowberto + :put 200 + (format "database/%s" db-id) + {:settings {:database-enable-actions false}}) + [:settings :database-enable-actions]))) + (is (true? (get-in (mt/user-http-request :crowberto + :put 200 + (format "database/%s" db-id) + {:settings {:database-enable-actions true}}) + [:settings :database-enable-actions])))))) + (deftest fetch-database-metadata-test (testing "GET /api/database/:id/metadata" (is (= (merge (dissoc (mt/object-defaults Database) :details)