diff --git a/src/metabase/models/params/chain_filter.clj b/src/metabase/models/params/chain_filter.clj index 13c09d0c3efa3b4eabdf7784766a27f973fa3231..fba6da5659016a5c8717e42fb236f48ccfefc200 100644 --- a/src/metabase/models/params/chain_filter.clj +++ b/src/metabase/models/params/chain_filter.clj @@ -679,20 +679,22 @@ v->human-readable (delay (human-readable-remapping-map field-id)) the-remapped-field-id (delay (remapped-field-id field-id))] (cond - (str/blank? query) - (apply chain-filter field-id constraints options) + (str/blank? query) + (apply chain-filter field-id constraints options) - (some? @v->human-readable) - (human-readable-values-remapped-chain-filter-search field-id @v->human-readable constraints query options) + (some? @v->human-readable) + (human-readable-values-remapped-chain-filter-search field-id @v->human-readable constraints query options) - (and (search-cached-field-values? field-id constraints) (nil? @the-remapped-field-id)) - (cached-field-values-search field-id query constraints options) + (and (search-cached-field-values? field-id constraints) (nil? @the-remapped-field-id)) + (do + (check-field-value-query-permissions field-id constraints options) + (cached-field-values-search field-id query constraints options)) - (some? @the-remapped-field-id) - (unremapped-chain-filter-search @the-remapped-field-id constraints query (assoc options :original-field-id field-id)) + (some? @the-remapped-field-id) + (unremapped-chain-filter-search @the-remapped-field-id constraints query (assoc options :original-field-id field-id)) - :else - (unremapped-chain-filter-search field-id constraints query options)))) + :else + (unremapped-chain-filter-search field-id constraints query options)))) ;;; ------------------ Filterable Field IDs (powers GET /api/dashboard/params/valid-filter-fields) ------------------- diff --git a/test/metabase/api/dashboard_test.clj b/test/metabase/api/dashboard_test.clj index 61eef165e3819fba3f28208bdec93b5f8dafb455..46d55040b5dd45db17c1ad6ee538975422373fbd 100644 --- a/test/metabase/api/dashboard_test.clj +++ b/test/metabase/api/dashboard_test.clj @@ -2842,7 +2842,11 @@ {:schemas :block}) (is (= "You don't have permissions to do that." (->> (chain-filter-values-url (:id dashboard) (:category-name param-keys)) - (mt/user-http-request :rasta :get 403)))))))))) + (mt/user-http-request :rasta :get 403)))) + (testing "search" + (is (= "You don't have permissions to do that." + (->> (chain-filter-search-url (:id dashboard) (:category-name param-keys) "BBQ") + (mt/user-http-request :rasta :get 403))))))))))) (deftest dashboard-with-static-list-parameters-test (testing "A dashboard that has parameters that has static values" diff --git a/test/metabase/test/data/impl.clj b/test/metabase/test/data/impl.clj index 8e81962684592b4df07210eac5e67f27a50a2e85..ba02e926d7ebf82e8c383038dd472f68d1aaa4e3 100644 --- a/test/metabase/test/data/impl.clj +++ b/test/metabase/test/data/impl.clj @@ -255,7 +255,11 @@ :let [field-name (get old-field-id->name old-field-id)]] (-> field-values (dissoc :id) - (assoc :field_id (get new-field-name->id field-name))))))) + (assoc :field_id (get new-field-name->id field-name)) + ;; Toucan after-select for FieldValues returns NULL human_readable_values as [] for FE-friendliness.. + ;; preserve NULL in the app DB copy so we don't end up changing things that rely on checking whether its + ;; NULL like [[metabase.models.params.chain-filter/search-cached-field-values?]] + (update :human_readable_values not-empty)))))) (defn- copy-db-tables! [old-db-id new-db-id] (let [old-tables (t2/select Table :db_id old-db-id {:order-by [[:id :asc]]})