diff --git a/src/metabase/models/setting.clj b/src/metabase/models/setting.clj index 43942d9461e4519d93062dbc9d4661459efa4b15..e636424c84cb3bb1bf5e4addac9e85482d17f8e8 100644 --- a/src/metabase/models/setting.clj +++ b/src/metabase/models/setting.clj @@ -649,10 +649,12 @@ (defn metadata-for-setting-fn "Create metadata for the function automatically generated by [[defsetting]]." [{:keys [default description tag deprecated], setting-type :type, :as setting}] - {:arglists '([] [new-value]) + {:arglists (list + (with-meta [] {:tag tag}) + (with-meta '[new-value] {:tag tag})) + ;; indentation below is intentional to make it clearer what shape the generated documentation is going to take. ;; Turn on auto-complete-mode in Emacs and see for yourself! - :tag tag :deprecated deprecated :doc (str/join "\n" diff --git a/test/metabase/models/setting_test.clj b/test/metabase/models/setting_test.clj index 380b7357c21a240fff03be1bd40007a371bfd93b..d32b00c2f78a021acac3e949259d901c22f760b0 100644 --- a/test/metabase/models/setting_test.clj +++ b/test/metabase/models/setting_test.clj @@ -75,10 +75,19 @@ [setting-name] (boolean (Setting :key (name setting-name)))) +(defn- test-assert-setting-has-tag [setting-var expected-tag] + (let [{:keys [tag arglists]} (meta setting-var)] + (testing "There should not be a tag on the var itself" + (is (nil? tag))) + (testing "Arglists should be tagged\n" + (doseq [arglist arglists] + (testing (binding [*print-meta* true] (pr-str arglist)) + (is (= expected-tag + (:tag (meta arglist))))))))) + (deftest string-tag-test - (testing "String vars defined by `defsetting` should have correct `:tag` metadata" - (is (= 'java.lang.String - (:tag (meta #'test-setting-1)))))) + (testing "String vars defined by `defsetting` should have correct `:tag` metadata\n" + (test-assert-setting-has-tag #'test-setting-1 'java.lang.String))) (deftest defsetting-getter-fn-test (testing "Test defsetting getter fn. Should return the value from env var MB_TEST_ENV_SETTING" @@ -297,8 +306,7 @@ (deftest boolean-settings-tag-test (testing "Boolean settings should have correct `:tag` metadata" - (is (= 'java.lang.Boolean - (:tag (meta #'test-boolean-setting)))))) + (test-assert-setting-has-tag #'test-boolean-setting 'java.lang.Boolean))) (deftest boolean-setting-user-facing-info-test (is (= {:value nil, :is_env_setting false, :env_name "MB_TEST_BOOLEAN_SETTING", :default nil} @@ -459,8 +467,7 @@ :type :timestamp) (deftest timestamp-settings-test - (is (= 'java.time.temporal.Temporal - (:tag (meta #'test-timestamp-setting)))) + (test-assert-setting-has-tag #'test-timestamp-setting 'java.time.temporal.Temporal) (testing "make sure we can set & fetch the value and that it gets serialized/deserialized correctly" (test-timestamp-setting #t "2018-07-11T09:32:00.000Z")