diff --git a/test/metabase/api/dashboard_test.clj b/test/metabase/api/dashboard_test.clj
index 94545ce65ffd0608fa4b64c89277c3983f636cd4..e96d763da97a2af047169178cde9d28a5c453360 100644
--- a/test/metabase/api/dashboard_test.clj
+++ b/test/metabase/api/dashboard_test.clj
@@ -2047,36 +2047,82 @@
                     :has_more_values false}
                    (mt/user-http-request :rasta :get 200 url)))))))))
 
+(defn- card-fields-from-table-metadata
+  [card-id]
+  (:fields (mt/user-http-request :rasta :get 200 (format "/table/card__%d/query_metadata" card-id))))
+
 (deftest parameter-values-from-card-test
   ;; TODO add permissions tests
-  (mt/with-temp*
-    [Card      [{card-id         :id}
-                (merge (mt/card-with-source-metadata-for-query (mt/mbql-query venues {:limit 5}))
-                       {:database_id     (mt/id)
-                        :table_id        (mt/id :venues)})]
-     Dashboard [{dashboard-id :id}
-                {:parameters [{:id                   "abc"
-                               :type                 "category"
-                               :name                 "CATEGORY"
-                               :values_source_type   "card"
-                               :values_source_config {:card_id     card-id
-                                                      :value_field (mt/$ids $venues.name)}}]}]]
-
-    (testing "It uses the results of the card's query execution"
-      (let-url [url (chain-filter-values-url dashboard-id "abc")]
-        (is (= {:values          ["Red Medicine"
-                                  "Stout Burgers & Beers"
-                                  "The Apple Pan"
-                                  "Wurstküche"
-                                  "Brite Spot Family Restaurant"]
-                :has_more_values false}
-               (mt/user-http-request :rasta :get 200 url)))))
+  (testing "getting values"
+    (mt/with-temp*
+      [Card      [{card-id         :id}
+                  (merge (mt/card-with-source-metadata-for-query (mt/mbql-query venues {:limit 5}))
+                         {:database_id     (mt/id)
+                          :table_id        (mt/id :venues)})]
+       Dashboard [{dashboard-id :id}
+                  {:parameters [{:id                   "abc"
+                                 :type                 "category"
+                                 :name                 "CATEGORY"
+                                 :values_source_type   "card"
+                                 :values_source_config {:card_id     card-id
+                                                        :value_field (mt/$ids $venues.name)}}]}]]
+
+      (testing "It uses the results of the card's query execution"
+        (let-url [url (chain-filter-values-url dashboard-id "abc")]
+          (is (= {:values          ["Red Medicine"
+                                    "Stout Burgers & Beers"
+                                    "The Apple Pan"
+                                    "Wurstküche"
+                                    "Brite Spot Family Restaurant"]
+                  :has_more_values false}
+                 (mt/user-http-request :rasta :get 200 url)))))
 
-    (testing "it only returns search matches"
-      (let-url [url (chain-filter-search-url dashboard-id "abc" "red")]
-        (is (= {:values          ["Red Medicine"]
-                :has_more_values false}
-               (mt/user-http-request :rasta :get 200 url)))))))
+      (testing "it only returns search matches"
+        (let-url [url (chain-filter-search-url dashboard-id "abc" "red")]
+          (is (= {:values          ["Red Medicine"]
+                  :has_more_values false}
+                 (mt/user-http-request :rasta :get 200 url))))))
+
+    (testing "field selection should compatible with field-id from /api/table/:card__id/query_metadata"
+      ;; FE use the id returned by /api/table/:card__id/query_metadata
+      ;; for the `values_source_config.value_field`, so we need to test to make sure
+      ;; the id is a valid field that we could use to retrieve values.
+      (mt/with-temp*
+        ;; card with agggregation and binning columns
+        [Card [{mbql-card-id :id}
+               (merge (mt/card-with-source-metadata-for-query
+                        (mt/mbql-query venues {:limit 5
+                                               :aggregation [:count]
+                                               :breakout [[:field %latitude {:binning {:strategy :num-bins :num-bins 10}}]]}))
+                      {:name        "MBQL question"
+                       :database_id (mt/id)
+                       :table_id    (mt/id :venues)})]
+         Card [{native-card-id :id}
+               (merge (mt/card-with-source-metadata-for-query
+                        (mt/native-query {:query "select name from venues;"}))
+                      {:name        "Native question"
+                       :database_id (mt/id)
+                       :table_id    (mt/id :venues)})]]
+
+        (let [mbql-card-fields   (card-fields-from-table-metadata mbql-card-id)
+              native-card-fields (card-fields-from-table-metadata native-card-id)
+              fields->parameter  (fn [fields card-id]
+                                   (for [{:keys [id field_ref name]} fields]
+                                     {:id                   (format "id_%s" name)
+                                      :type                 "category"
+                                      :name                 name
+                                      :values_source_type   "card"
+                                      :values_source_config {:card_id     card-id
+                                                             :value_field (if (number? id)
+                                                                            field_ref
+                                                                            id)}}))
+              parameters         (concat
+                                   (fields->parameter mbql-card-fields mbql-card-id)
+                                   (fields->parameter native-card-fields native-card-id))]
+          (mt/with-temp Dashboard [{dash-id :id} {:parameters parameters}]
+            (doseq [param parameters]
+              (let-url [url (chain-filter-values-url dash-id (:id param))]
+                (is (some? (mt/user-http-request :rasta :get 200 url)))))))))))
 
 (deftest valid-filter-fields-test
   (testing "GET /api/dashboard/params/valid-filter-fields"