diff --git a/.dir-locals.el b/.dir-locals.el
index 353d0fc76aa018e6db8d9a0c0280d03c83af3a6a..4ddf9d420b72f471ba143122ebc94c5b205c741e 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -39,7 +39,7 @@
                               (project 1)
                               (qp-expect-with-engines 1)
                               (render-file 1)
-                              (resolve-private-fns 1)
+                              (resolve-private-vars 1)
                               (select 1)
                               (sync-in-context 2)
                               (when-testing-engine 1)
diff --git a/frontend/src/metabase/admin/settings/components/SettingsCustomMaps.jsx b/frontend/src/metabase/admin/settings/components/SettingsCustomMaps.jsx
index 93451291a9aae2c845d7fba9ed2bce5f3785ef1b..45de6149c257281eceab08a407f4e735c349c89a 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsCustomMaps.jsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsCustomMaps.jsx
@@ -247,7 +247,7 @@ const EditMap = ({ map, onMapChange, originalMap, geoJson, geoJsonLoading, geoJs
         </SettingContainer>
         { (geoJson || geoJsonLoading || geoJsonError) &&
             <LoadingAndErrorWrapper loading={geoJsonLoading} error={geoJsonError}>
-            { () =>
+            { () =>  // eslint-disable-line react/display-name
                 <div>
                     <SettingContainer description="Which property specifies the region’s identifier?">
                         <GeoJsonPropertySelect
diff --git a/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx b/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx
index ded6a75f7eb01edcf7fd9966c3ce4d66974563f0..89bfee6dc9695e010cb052856203c867037e4454 100644
--- a/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx
+++ b/frontend/src/metabase/visualizations/components/LegacyChoropleth.jsx
@@ -14,7 +14,7 @@ const LegacyChoropleth = ({ series, geoJson, projection, getColor, onHoverFeatur
     return (
         <div className="absolute top bottom left right flex layout-centered">
             <ShouldUpdate series={series} shouldUpdate={(props, nextProps) => !isSameSeries(props.series, nextProps.series)}>
-                { () =>
+                { () =>  // eslint-disable-line react/display-name
                     <svg className="flex-full m1" viewBox={`0 0 ${width} ${height}`}>
                     {geoJson.features.map((feature, index) =>
                         <path
diff --git a/src/metabase/api/geojson.clj b/src/metabase/api/geojson.clj
index af15f8e22f7570fa889846f21b30f78eba66c4e1..d71c752c913d68bff034526bcba61b3018dc3069 100644
--- a/src/metabase/api/geojson.clj
+++ b/src/metabase/api/geojson.clj
@@ -1,42 +1,70 @@
 (ns metabase.api.geojson
-  (:require [cheshire.core :as json]
+  (:require [clojure.java.io :as io]
+            [cheshire.core :as json]
             [compojure.core :refer [defroutes GET]]
             [schema.core :as s]
             [metabase.api.common :refer :all]
             [metabase.models.setting :refer [defsetting], :as setting]
             [metabase.util :as u]))
 
+(defn- valid-json?
+  "Does this URL-OR-RESOURCE point to valid JSON?
+   URL-OR-RESOURCE should be something that can be passed to `slurp`, like an HTTP URL or a `java.net.URL` (which is what `io/resource` returns below)."
+  [url-or-resource]
+  (u/with-timeout 5000
+    (json/parse-string (slurp url-or-resource)))
+  true)
 
-(def ^:private valid-json-url?
+(defn- valid-json-resource?
+  "Does this RELATIVE-PATH point to a valid local JSON resource? (RELATIVE-PATH is something like \"app/charts/us-states.json\".)"
+  [relative-path]
+  (when-let [^java.net.URI uri (u/ignore-exceptions (java.net.URI. relative-path))]
+    (when-not (.isAbsolute uri)
+      (valid-json? (io/resource (str "frontend_client" uri))))))
+
+(defn- valid-json-url?
+  "Is URL a valid HTTP URL and does it point to valid JSON?"
+  [url]
+  (when (u/is-url? url)
+    (valid-json? url)))
+
+(def ^:private valid-json-url-or-resource?
   "Check that remote URL points to a valid JSON file, or throw an exception.
    Since the remote file isn't likely to change, this check isn't repeated for URLs that have already succeded;
    if the check fails, an exception is thrown (thereby preventing memoization)."
-  (memoize (fn [url]
-             (assert (u/is-url? url)
-               (str "Invalid URL: " url))
-             (u/with-timeout 5000
-               (json/parse-string (slurp url)))
-             true)))
+  (memoize (fn [url-or-resource-path]
+             (or (valid-json-url? url-or-resource-path)
+                 (valid-json-resource? url-or-resource-path)
+                 (throw (Exception. (str "Invalid JSON URL or resource: " url-or-resource-path)))))))
 
 (def ^:private CustomGeoJSON
-  {s/Keyword {:name        s/Str
-              :url         (s/constrained s/Str valid-json-url? "URL must point to a valid JSON file.")
-              :region_key  (s/maybe s/Str)
-              :region_name (s/maybe s/Str)}})
+  {s/Keyword {:name                     s/Str
+              :url                      (s/constrained s/Str valid-json-url-or-resource? "URL must point to a valid JSON file.")
+              :region_key               (s/maybe s/Str)
+              :region_name              (s/maybe s/Str)
+              (s/optional-key :builtin) s/Bool}})
 
-(def ^:private builtin-geojson
-  {:us_states {:name "United States" :url "/app/charts/us-states.json" :region_key "name" :region_name "name" :builtin true}
-   :world_countries {:name "World" :url "/app/charts/world.json" :region_key "ISO_A2" :region_name "NAME" :builtin true}})
+(def ^:private ^:const builtin-geojson
+  {:us_states       {:name        "United States"
+                     :url         "/app/charts/us-states.json"
+                     :region_key  "name"
+                     :region_name "name"
+                     :builtin     true}
+   :world_countries {:name        "World"
+                     :url         "/app/charts/world.json"
+                     :region_key  "ISO_A2"
+                     :region_name "NAME"
+                     :builtin     true}})
 
 (defsetting custom-geojson
   "JSON containing information about custom GeoJSON files for use in map visualizations instead of the default US State or World GeoJSON."
-  :type   :json
+  :type    :json
   :default {}
-  :getter (fn [] (merge (setting/get-json :custom-geojson) builtin-geojson))
-  :setter (fn [new-value]
-            (when new-value
-              (s/validate CustomGeoJSON new-value))
-            (setting/set-json! :custom-geojson new-value)))
+  :getter  (fn [] (merge (setting/get-json :custom-geojson) builtin-geojson))
+  :setter  (fn [new-value]
+             (when new-value
+               (s/validate CustomGeoJSON new-value))
+             (setting/set-json! :custom-geojson new-value)))
 
 
 (defendpoint GET "/:key"
diff --git a/test/metabase/api/activity_test.clj b/test/metabase/api/activity_test.clj
index 067db2ee74e85b20b4709babf3330d509f8146f3..1b5a49123162eefb4c1411f3cbba9adf74ec4c97 100644
--- a/test/metabase/api/activity_test.clj
+++ b/test/metabase/api/activity_test.clj
@@ -8,7 +8,7 @@
                              [view-log :refer [ViewLog]])
             [metabase.test.data :refer :all]
             [metabase.test.data.users :refer :all]
-            [metabase.test.util :refer [match-$ expect-with-temp resolve-private-fns], :as tu]
+            [metabase.test.util :refer [match-$ expect-with-temp resolve-private-vars], :as tu]
             [metabase.util :as u]))
 
 ;; GET /
@@ -172,7 +172,7 @@
 
 ;;; activities->referenced-objects, referenced-objects->existing-objects, add-model-exists-info
 
-(resolve-private-fns metabase.api.activity activities->referenced-objects referenced-objects->existing-objects add-model-exists-info)
+(resolve-private-vars metabase.api.activity activities->referenced-objects referenced-objects->existing-objects add-model-exists-info)
 
 (def ^:private ^:const fake-activities
   [{:model "dashboard", :model_id  43, :topic :dashboard-create,    :details {}}
diff --git a/test/metabase/api/geojson_test.clj b/test/metabase/api/geojson_test.clj
index b2e0a3f4bf69310c42ff3022701bd1d2062c5db6..f71cbdc215f1f5290ddcc8b7d06627cc07fd61f3 100644
--- a/test/metabase/api/geojson_test.clj
+++ b/test/metabase/api/geojson_test.clj
@@ -5,8 +5,10 @@
             [metabase.test.data.users :refer [user->client]]
             [metabase.test.util :as tu]))
 
-(tu/resolve-private-fns metabase.api.geojson
+(tu/resolve-private-vars metabase.api.geojson
   valid-json-url?
+  valid-json-resource?
+  builtin-geojson
   CustomGeoJSON)
 
 (def ^:private ^:const ^String test-geojson-url
@@ -16,6 +18,7 @@
 (def ^:private ^:const test-custom-geojson
   {:middle-earth {:name        "Middle Earth"
                   :url         test-geojson-url
+                  :builtin     true
                   :region_key  nil
                   :region_name nil}})
 
@@ -25,6 +28,11 @@
   (valid-json-url? test-geojson-url))
 
 
+;;; test valid-json-resource?
+(expect
+  (valid-json-resource? "/app/charts/us-states.json"))
+
+
 ;;; test the CustomGeoJSON schema
 (expect
   (boolean (s/validate @CustomGeoJSON test-custom-geojson)))
@@ -47,7 +55,7 @@
 
 ;;; test that we can set the value of custom-geojson via the normal routes
 (expect
-  test-custom-geojson
+  (merge @builtin-geojson test-custom-geojson)
   ;; bind a temporary value so it will get set back to its old value here after the API calls are done stomping all over it
   (tu/with-temporary-setting-values [custom-geojson nil]
     ((user->client :crowberto) :put 200 "setting/custom-geojson" {:value test-custom-geojson})
diff --git a/test/metabase/api/session_test.clj b/test/metabase/api/session_test.clj
index a7d35cd28857b91ffbc9e9e7217c291716de576f..e11768637e607e3bb293f0edbaa7e3e9beb0d2dd 100644
--- a/test/metabase/api/session_test.clj
+++ b/test/metabase/api/session_test.clj
@@ -11,7 +11,7 @@
             [metabase.test.data :refer :all]
             [metabase.test.data.users :refer :all]
             [metabase.util :as u]
-            [metabase.test.util :refer [random-name resolve-private-fns with-temporary-setting-values with-temp], :as tu]))
+            [metabase.test.util :refer [random-name resolve-private-vars with-temporary-setting-values with-temp], :as tu]))
 
 ;; ## POST /api/session
 ;; Test that we can login
@@ -182,7 +182,7 @@
 
 ;;; ------------------------------------------------------------ TESTS FOR GOOGLE AUTH STUFF ------------------------------------------------------------
 
-(resolve-private-fns metabase.api.session email->domain email-in-domain? autocreate-user-allowed-for-email? google-auth-create-new-user! google-auth-fetch-or-create-user!)
+(resolve-private-vars metabase.api.session email->domain email-in-domain? autocreate-user-allowed-for-email? google-auth-create-new-user! google-auth-fetch-or-create-user!)
 
 ;;; tests for email->domain
 (expect "metabase.com"   (email->domain "cam@metabase.com"))
diff --git a/test/metabase/api/table_test.clj b/test/metabase/api/table_test.clj
index a59b0567d6856822328932e007942ee27c4a081d..b48846b8fcc9fa7388a276075dfe4d7e179343d4 100644
--- a/test/metabase/api/table_test.clj
+++ b/test/metabase/api/table_test.clj
@@ -11,10 +11,10 @@
             (metabase.test.data [dataset-definitions :as defs]
                                 [datasets :as datasets]
                                 [users :refer :all])
-            [metabase.test.util :refer [match-$ resolve-private-fns], :as tu]
+            [metabase.test.util :refer [match-$ resolve-private-vars], :as tu]
             [metabase.util :as u]))
 
-(resolve-private-fns metabase.models.table pk-field-id)
+(resolve-private-vars metabase.models.table pk-field-id)
 
 
 ;; ## /api/org/* AUTHENTICATION Tests
diff --git a/test/metabase/db_test.clj b/test/metabase/db_test.clj
index 55875b73813f5528d6c2fd5cc51ecfb1d66de390..b48ca75809c053a33b6efebb901b0d60cb2c431c 100644
--- a/test/metabase/db_test.clj
+++ b/test/metabase/db_test.clj
@@ -3,7 +3,7 @@
             [metabase.db :as db]
             [metabase.test.util :as tu]))
 
-(tu/resolve-private-fns metabase.db parse-connection-string)
+(tu/resolve-private-vars metabase.db parse-connection-string)
 
 ;; parse minimal connection string
 (expect {:type :postgres :user nil :password nil :host "localhost" :port nil :dbname "toms_cool_db" }
diff --git a/test/metabase/driver/generic_sql_test.clj b/test/metabase/driver/generic_sql_test.clj
index 5254f3d5142826e0fb36d661e922cdd847a841c6..49c66ee3457c1f95ccab7e31d20f23959413e58d 100644
--- a/test/metabase/driver/generic_sql_test.clj
+++ b/test/metabase/driver/generic_sql_test.clj
@@ -9,7 +9,7 @@
             [metabase.test.data :refer :all]
             (metabase.test.data [dataset-definitions :as defs]
                                 [datasets :as datasets])
-            [metabase.test.util :refer [resolve-private-fns]])
+            [metabase.test.util :refer [resolve-private-vars]])
   (:import metabase.driver.h2.H2Driver))
 
 (def ^:private users-table      (delay (Table :name "USERS")))
@@ -79,7 +79,7 @@
                {:id (id :venues :price), :values [1 2 3 4]}]}
   (driver/analyze-table (H2Driver.) @venues-table (set (mapv :id (table/fields @venues-table)))))
 
-(resolve-private-fns metabase.driver.generic-sql field-avg-length field-values-lazy-seq table-rows-seq)
+(resolve-private-vars metabase.driver.generic-sql field-avg-length field-values-lazy-seq table-rows-seq)
 
 ;;; FIELD-AVG-LENGTH
 (datasets/expect-with-engines @generic-sql-engines
diff --git a/test/metabase/driver/h2_test.clj b/test/metabase/driver/h2_test.clj
index 42d15870aa7eec87e79486088ec1a98a0410bec8..c32fe5f6136f725887cc6883b01df8411f6a126d 100644
--- a/test/metabase/driver/h2_test.clj
+++ b/test/metabase/driver/h2_test.clj
@@ -3,10 +3,10 @@
             [metabase.db :as db]
             [metabase.driver :as driver]
             [metabase.driver.h2 :refer :all]
-            [metabase.test.util :refer [resolve-private-fns]])
+            [metabase.test.util :refer [resolve-private-vars]])
   (:import metabase.driver.h2.H2Driver))
 
-(resolve-private-fns metabase.driver.h2 connection-string->file+options file+options->connection-string connection-string-set-safe-options)
+(resolve-private-vars metabase.driver.h2 connection-string->file+options file+options->connection-string connection-string-set-safe-options)
 
 ;; Check that the functions for exploding a connection string's options work as expected
 (expect
diff --git a/test/metabase/driver/postgres_test.clj b/test/metabase/driver/postgres_test.clj
index 5312ab42c325a2543929a3cb20e2633cb30f9dc8..644ee25626d7259d85db0a9f6d23441fb3356ebf 100644
--- a/test/metabase/driver/postgres_test.clj
+++ b/test/metabase/driver/postgres_test.clj
@@ -172,7 +172,7 @@
 
 ;; timezone tests
 
-(tu/resolve-private-fns metabase.driver.generic-sql.query-processor
+(tu/resolve-private-vars metabase.driver.generic-sql.query-processor
   run-query-with-timezone)
 
 (defn- get-timezone-with-report-timezone [report-timezone]
diff --git a/test/metabase/middleware_test.clj b/test/metabase/middleware_test.clj
index ec0e6923650053155930d2e67b7b1aca3bdaa2e1..cd963ce8cf7d353a512d5863f5248a314b9f03df 100644
--- a/test/metabase/middleware_test.clj
+++ b/test/metabase/middleware_test.clj
@@ -64,7 +64,7 @@
   (str (java.util.UUID/randomUUID)))
 
 
-(tu/resolve-private-fns metabase.db simple-insert!)
+(tu/resolve-private-vars metabase.db simple-insert!)
 
 ;; valid session ID
 (expect
diff --git a/test/metabase/models/dashboard_test.clj b/test/metabase/models/dashboard_test.clj
index 83b98c0ae7d63a1840192fe6858eff3440ed8742..abb612ed744b5f7cbc36d29a1dd42f2ce2f1cd63 100644
--- a/test/metabase/models/dashboard_test.clj
+++ b/test/metabase/models/dashboard_test.clj
@@ -110,7 +110,7 @@
 
 ;;; revert-dashboard!
 
-(tu/resolve-private-fns metabase.models.dashboard revert-dashboard!)
+(tu/resolve-private-vars metabase.models.dashboard revert-dashboard!)
 
 (expect
   [{:name         "Test Dashboard"
diff --git a/test/metabase/models/field_test.clj b/test/metabase/models/field_test.clj
index 4eb01a4087584cd6819773bbd94e14f15b989dae..e9977ee5756d0ce9f2600af534f97063bb5d2a7c 100644
--- a/test/metabase/models/field_test.clj
+++ b/test/metabase/models/field_test.clj
@@ -73,7 +73,7 @@
 
 ;;; infer-field-special-type
 
-(tu/resolve-private-fns metabase.models.field infer-field-special-type)
+(tu/resolve-private-vars metabase.models.field infer-field-special-type)
 
 (expect nil            (infer-field-special-type nil       nil))
 (expect nil            (infer-field-special-type "id"      nil))
diff --git a/test/metabase/models/humanization_test.clj b/test/metabase/models/humanization_test.clj
index 1eef36ecc97ef2f09ffbf568bed0f147b75ee4ac..9309462ed9d086feec39ac26bf47aae3e44faf3f 100644
--- a/test/metabase/models/humanization_test.clj
+++ b/test/metabase/models/humanization_test.clj
@@ -6,7 +6,7 @@
             [metabase.test.util :as tu]
             [metabase.db :as db]))
 
-(tu/resolve-private-fns metabase.models.humanization
+(tu/resolve-private-vars metabase.models.humanization
   name->human-readable-name:simple name->human-readable-name:advanced)
 
 ;;; name->human-readable-name:advanced
diff --git a/test/metabase/models/metric_test.clj b/test/metabase/models/metric_test.clj
index 23e993958d4cd1632fd8a0d41b1c04202a98da0b..e040ae06ec444b0a1bdae31cd060196833be7204 100644
--- a/test/metabase/models/metric_test.clj
+++ b/test/metabase/models/metric_test.clj
@@ -160,7 +160,7 @@
 
 ;; ## Metric Revisions
 
-(tu/resolve-private-fns metabase.models.metric serialize-metric diff-metrics)
+(tu/resolve-private-vars metabase.models.metric serialize-metric diff-metrics)
 
 ;; serialize-metric
 (expect
diff --git a/test/metabase/models/segment_test.clj b/test/metabase/models/segment_test.clj
index 737383ca25930e33945dcf7550ee1cb1374f646a..a2e86d95a6df0ae1f310f7f4fe7dfd9746ae1297 100644
--- a/test/metabase/models/segment_test.clj
+++ b/test/metabase/models/segment_test.clj
@@ -154,7 +154,7 @@
 
 ;; ## Segment Revisions
 
-(tu/resolve-private-fns metabase.models.segment serialize-segment diff-segments)
+(tu/resolve-private-vars metabase.models.segment serialize-segment diff-segments)
 
 ;; serialize-segment
 (expect
diff --git a/test/metabase/models/session_test.clj b/test/metabase/models/session_test.clj
index dff89ad8077dcc3b9ba14156f073949fa468b612..b231184c70705cd32d57edb162853ef3d55e3f15 100644
--- a/test/metabase/models/session_test.clj
+++ b/test/metabase/models/session_test.clj
@@ -7,7 +7,7 @@
             [metabase.test.data.users :refer :all]
             [metabase.util :as u]))
 
-(resolve-private-fns metabase.db simple-insert-many!)
+(resolve-private-vars metabase.db simple-insert-many!)
 ;; first-session-for-user
 (expect
   "the-greatest-day-ever"
diff --git a/test/metabase/models/setting_test.clj b/test/metabase/models/setting_test.clj
index bce6e6f58be2cb9751998990caa5cd0b9379405b..0420108943b9a3b872f725a7bb2ee4b7109f0521 100644
--- a/test/metabase/models/setting_test.clj
+++ b/test/metabase/models/setting_test.clj
@@ -114,7 +114,7 @@
 
 ;;; ------------------------------------------------------------ all & user-facing-info ------------------------------------------------------------
 
-(resolve-private-fns metabase.models.setting resolve-setting user-facing-info)
+(resolve-private-vars metabase.models.setting resolve-setting user-facing-info)
 
 ;; these tests are to check that settings get returned with the correct information; these functions are what feed into the API
 
diff --git a/test/metabase/query_processor/parameters_test.clj b/test/metabase/query_processor/parameters_test.clj
index e177420d747f68416d0ca61eae1dfba3b9f444e9..bc22aaa50c0c76918539273e944267d1b1b1273d 100644
--- a/test/metabase/query_processor/parameters_test.clj
+++ b/test/metabase/query_processor/parameters_test.clj
@@ -18,7 +18,7 @@
                                 [users :refer :all])
             [metabase.test.util :as tu]))
 
-(tu/resolve-private-fns metabase.query-processor.parameters
+(tu/resolve-private-vars metabase.query-processor.parameters
   absolute-date->range relative-date->range)
 
 (expect {:end "2016-03-31", :start "2016-01-01"} (absolute-date->range "Q1-2016"))
diff --git a/test/metabase/query_processor/qp_middleware_test.clj b/test/metabase/query_processor/qp_middleware_test.clj
index c05dda37de484e8e74fc08ce883deac4b962ec31..8fadc9751e8170f3ce61d4df97a15c21ac3129c5 100644
--- a/test/metabase/query_processor/qp_middleware_test.clj
+++ b/test/metabase/query_processor/qp_middleware_test.clj
@@ -4,9 +4,9 @@
             [metabase.driver :as driver]
             [metabase.query-processor :refer :all]
             [metabase.models.setting :as setting]
-            [metabase.test.util :refer [resolve-private-fns]]))
+            [metabase.test.util :refer [resolve-private-vars]]))
 
-(resolve-private-fns metabase.query-processor
+(resolve-private-vars metabase.query-processor
   wrap-catch-exceptions post-add-row-count-and-status post-format-rows pre-add-settings)
 
 
diff --git a/test/metabase/query_processor/sql_parameters_test.clj b/test/metabase/query_processor/sql_parameters_test.clj
index 1ec0712cef0b93822f0e6c13dd1df7cf85c131f3..6c3ebf2e33932ebce6621d528b5cf537bab5feac 100644
--- a/test/metabase/query_processor/sql_parameters_test.clj
+++ b/test/metabase/query_processor/sql_parameters_test.clj
@@ -17,7 +17,7 @@
 
 ;;; ------------------------------------------------------------ simple substitution -- {{x}} ------------------------------------------------------------
 
-(tu/resolve-private-fns metabase.query-processor.sql-parameters substitute)
+(tu/resolve-private-vars metabase.query-processor.sql-parameters substitute)
 
 (expect "SELECT * FROM bird_facts WHERE toucans_are_cool = TRUE"
   (substitute "SELECT * FROM bird_facts WHERE toucans_are_cool = {{toucans_are_cool}}"
@@ -145,7 +145,7 @@
 
 ;;; ------------------------------------------------------------ tests for value-for-tag ------------------------------------------------------------
 
-(tu/resolve-private-fns metabase.query-processor.sql-parameters value-for-tag)
+(tu/resolve-private-vars metabase.query-processor.sql-parameters value-for-tag)
 
 ;; variable -- specified
 (expect
diff --git a/test/metabase/query_processor_test.clj b/test/metabase/query_processor_test.clj
index 0bd1f4b7df74cc7e2ad15d04c198e148572dc5f7..cc5fdee37c40137d8d21c75ba80e8c9871a1e35a 100644
--- a/test/metabase/query_processor_test.clj
+++ b/test/metabase/query_processor_test.clj
@@ -312,7 +312,7 @@
 (expect false (mbql-query? {:type "native"}))
 (expect true  (mbql-query? {:type "query"}))
 
-(tu/resolve-private-fns metabase.query-processor query-without-aggregations-or-limits?)
+(tu/resolve-private-vars metabase.query-processor query-without-aggregations-or-limits?)
 
 ;; query-without-aggregations-or-limits?
 (expect false (query-without-aggregations-or-limits? {:query {:aggregation {:aggregation-type :count}}}))
diff --git a/test/metabase/sync_database/analyze_test.clj b/test/metabase/sync_database/analyze_test.clj
index 0ba6ea66eafb738d9186f4fec317267494fb3a7d..a37f234c0c76bce042a7c64fee4ae10c332e8afb 100644
--- a/test/metabase/sync_database/analyze_test.clj
+++ b/test/metabase/sync_database/analyze_test.clj
@@ -22,7 +22,7 @@
 
 ;;; ## mark-json-field!
 
-(tu/resolve-private-fns metabase.sync-database.analyze values-are-valid-json?)
+(tu/resolve-private-vars metabase.sync-database.analyze values-are-valid-json?)
 
 (def ^:const ^:private fake-values-seq-json
   "A sequence of values that should be marked is valid JSON.")
diff --git a/test/metabase/sync_database/introspect_test.clj b/test/metabase/sync_database/introspect_test.clj
index 3294051e3fe9cf90babb92fdc530bc276a39a0a1..9df778138463037bc6b77d8456d13dd5d08f0dfb 100644
--- a/test/metabase/sync_database/introspect_test.clj
+++ b/test/metabase/sync_database/introspect_test.clj
@@ -10,7 +10,7 @@
             [metabase.test.util :as tu]
             [metabase.util :as u]))
 
-(tu/resolve-private-fns metabase.sync-database.introspect
+(tu/resolve-private-vars metabase.sync-database.introspect
   save-all-table-columns! save-all-table-fks! create-raw-table! update-raw-table! disable-raw-tables!)
 
 (defn get-tables [database-id]
diff --git a/test/metabase/sync_database/sync_dynamic_test.clj b/test/metabase/sync_database/sync_dynamic_test.clj
index 309ed10a3477fbc5336ec4921f12e08a38d66d1b..53a5a038580a1d7f986aff28cd4ef36c663d6e0d 100644
--- a/test/metabase/sync_database/sync_dynamic_test.clj
+++ b/test/metabase/sync_database/sync_dynamic_test.clj
@@ -11,7 +11,7 @@
             [metabase.test.mock.toucanery :as toucanery]
             [metabase.test.util :as tu]))
 
-(tu/resolve-private-fns metabase.sync-database.sync-dynamic
+(tu/resolve-private-vars metabase.sync-database.sync-dynamic
   save-table-fields!)
 
 (defn- get-tables [database-id]
diff --git a/test/metabase/sync_database/sync_test.clj b/test/metabase/sync_database/sync_test.clj
index 0e0102a07325535202be7500fb1fbc1f65977a30..db0d9494f3fc84d51543781e2696f143134452ca 100644
--- a/test/metabase/sync_database/sync_test.clj
+++ b/test/metabase/sync_database/sync_test.clj
@@ -15,7 +15,7 @@
                                 [schema-per-customer :as schema-per-customer])
             [metabase.test.util :as tu]))
 
-(tu/resolve-private-fns metabase.sync-database.sync
+(tu/resolve-private-vars metabase.sync-database.sync
   save-fks! save-table-fields!)
 
 (defn- get-tables [database-id]
diff --git a/test/metabase/sync_database_test.clj b/test/metabase/sync_database_test.clj
index 39f38f39beec4f42b96fa65e13e25fceb92275d0..41e5163d7c759c24b9598b654144a1081e818ab5 100644
--- a/test/metabase/sync_database_test.clj
+++ b/test/metabase/sync_database_test.clj
@@ -10,7 +10,7 @@
                              [table :refer [Table]])
             [metabase.sync-database :refer :all]
             (metabase.test [data :refer :all]
-                           [util :refer [resolve-private-fns] :as tu])))
+                           [util :refer [resolve-private-vars] :as tu])))
 
 (def ^:private ^:const sync-test-tables
   {"movie"  {:name "movie"
diff --git a/test/metabase/test/data/bigquery.clj b/test/metabase/test/data/bigquery.clj
index 970b8ac61315f7852c1689631b0c1e893866d722..f58dbd425fc536d828ed7790919bb91c90ec9977 100644
--- a/test/metabase/test/data/bigquery.clj
+++ b/test/metabase/test/data/bigquery.clj
@@ -6,7 +6,7 @@
             (metabase.test.data [dataset-definitions :as defs]
                                 [datasets :as datasets]
                                 [interface :as i])
-            [metabase.test.util :refer [resolve-private-fns]]
+            [metabase.test.util :refer [resolve-private-vars]]
             [metabase.util :as u])
   (:import java.util.Arrays
            com.google.api.client.util.DateTime
@@ -14,7 +14,7 @@
            (com.google.api.services.bigquery.model Dataset DatasetReference QueryRequest Table TableDataInsertAllRequest TableDataInsertAllRequest$Rows TableFieldSchema TableReference TableRow TableSchema)
            metabase.driver.bigquery.BigQueryDriver))
 
-(resolve-private-fns metabase.driver.bigquery execute execute-no-auto-retry post-process-native)
+(resolve-private-vars metabase.driver.bigquery execute execute-no-auto-retry post-process-native)
 
 ;;; # ------------------------------------------------------------ CONNECTION DETAILS ------------------------------------------------------------
 
diff --git a/test/metabase/test/data/druid.clj b/test/metabase/test/data/druid.clj
index 6478c547e294cf29c69f9d7b78a67866c2776ff4..118a52b3c1841e96fb0160bdce050a40c96cf408 100644
--- a/test/metabase/test/data/druid.clj
+++ b/test/metabase/test/data/druid.clj
@@ -6,7 +6,7 @@
             (metabase.test.data [dataset-definitions :as defs]
                                 [datasets :as datasets]
                                 [interface :as i])
-            [metabase.test.util :refer [resolve-private-fns]]
+            [metabase.test.util :refer [resolve-private-vars]]
             [metabase.util :as u])
   (:import metabase.driver.druid.DruidDriver))
 
@@ -129,7 +129,7 @@
   "Maximum number of seconds we should wait for the indexing task to finish before deciding it's failed."
   180)
 
-(resolve-private-fns metabase.driver.druid GET POST)
+(resolve-private-vars metabase.driver.druid GET POST)
 
 (defn- run-indexing-task
   "Run a batched ingestion task on HOST."
diff --git a/test/metabase/test/util.clj b/test/metabase/test/util.clj
index 4b426c2441c6489f332bd0f8f24f298a776db5b0..1ea0dd0d028f81846ac3cd0fa3e08782ff6d46a8 100644
--- a/test/metabase/test/util.clj
+++ b/test/metabase/test/util.clj
@@ -259,7 +259,7 @@
   (or (symbol? x)
       (instance? clojure.lang.Namespace x)))
 
-(defn resolve-private-fns* [source-namespace target-namespace symbols]
+(defn resolve-private-vars* [source-namespace target-namespace symbols]
   {:pre [(namespace-or-symbol? source-namespace)
          (namespace-or-symbol? target-namespace)
          (every? symbol? symbols)]}
@@ -269,13 +269,13 @@
                          (throw (Exception. (str source-namespace "/" symb " doesn't exist!"))))]]
     (intern target-namespace symb varr)))
 
-(defmacro resolve-private-fns
+(defmacro resolve-private-vars
   "Have your cake and eat it too. This Macro adds private functions from another namespace to the current namespace so we can test them.
 
-    (resolve-private-fns metabase.driver.generic-sql.sync
+    (resolve-private-vars metabase.driver.generic-sql.sync
       field-avg-length field-percent-urls)"
   [namespc & symbols]
-  `(resolve-private-fns* (quote ~namespc) *ns* (quote ~symbols)))
+  `(resolve-private-vars* (quote ~namespc) *ns* (quote ~symbols)))
 
 
 (defn obj->json->obj
diff --git a/test/metabase/util/password_test.clj b/test/metabase/util/password_test.clj
index 6a3177e8838339437ac2d7e418394d6e439f743d..9d9e5a1ab4d2d9efe5445b79a9ef0f75e0886342 100644
--- a/test/metabase/util/password_test.clj
+++ b/test/metabase/util/password_test.clj
@@ -1,12 +1,12 @@
 (ns metabase.util.password-test
   (:require [expectations :refer :all]
-            [metabase.test.util :refer [resolve-private-fns]]
+            [metabase.test.util :refer [resolve-private-vars]]
             [metabase.util.password :refer :all]))
 
 
 ;; Password Complexity testing
 
-(resolve-private-fns metabase.util.password count-occurrences password-has-char-counts?)
+(resolve-private-vars metabase.util.password count-occurrences password-has-char-counts?)
 
 ;; Check that password occurance counting works
 (expect {:total  3, :lower 3, :upper 0, :letter 3, :digit 0, :special 0} (count-occurrences "abc"))