diff --git a/src/metabase/api/dashboard.clj b/src/metabase/api/dashboard.clj index d557b3c93af6da8386492f05d1cc16075e5664a0..db7b3074c850d6e4abcbef249bdf7326891540c9 100644 --- a/src/metabase/api/dashboard.clj +++ b/src/metabase/api/dashboard.clj @@ -590,12 +590,14 @@ (let [dashboard (hydrate dashboard :resolved-params)] (when-not (get (:resolved-params dashboard) param-key) (throw (ex-info (tru "Dashboard does not have a parameter with the ID {0}" (pr-str param-key)) - {:resolved-params (keys (:resolved-params dashboard))}))) + {:resolved-params (keys (:resolved-params dashboard)) + :status-code 400}))) (let [constraints (chain-filter-constraints dashboard constraint-param-key->value) field-ids (param-key->field-ids dashboard param-key)] (when (empty? field-ids) (throw (ex-info (tru "Parameter {0} does not have any Fields associated with it" (pr-str param-key)) - {:param (get (:resolved-params dashboard) param-key)}))) + {:param (get (:resolved-params dashboard) param-key) + :status-code 400}))) ;; TODO - we should combine these all into a single UNION ALL query against the data warehouse instead of doing a ;; separate query for each Field (for parameters that are mapped to more than one Field) (try diff --git a/test/metabase/api/dashboard_test.clj b/test/metabase/api/dashboard_test.clj index b3f1e362d6ad8ce3bd2acfa69a0628d7e8d95671..c3d24acc593d16edfb94540bc599afab229a4d3a 100644 --- a/test/metabase/api/dashboard_test.clj +++ b/test/metabase/api/dashboard_test.clj @@ -1457,6 +1457,14 @@ (is (= "You don't have permissions to do that." (mt/user-http-request :rasta :get 403 url))))))))))) +(deftest chain-filter-not-found-test + (mt/with-temp Dashboard [{dashboard-id :id}] + (testing "GET /api/dashboard/:id/params/:param-key/values returns 400 if param not found" + (mt/user-http-request :rasta :get 400 (format "dashboard/%d/params/non-existing-param/values" dashboard-id))) + + (testing "GET /api/dashboard/:id/params/:param-key/search/:query returns 400 if param not found" + (mt/user-http-request :rasta :get 400 (format "dashboard/%d/params/non-existing-param/search/bar" dashboard-id))))) + (deftest chain-filter-invalid-parameters-test (testing "GET /api/dashboard/:id/params/:param-key/values" (testing "If some Dashboard parameters do not have valid Field IDs, we should ignore them"