From fb3a77eda083f711eb402119701612b43b7844cd Mon Sep 17 00:00:00 2001 From: Cam Saul <cam@geotip.com> Date: Mon, 9 Mar 2015 14:00:41 -0700 Subject: [PATCH] test for PUT /api/meta/field/:id --- .dir-locals.el | 1 + src/metabase/api/meta/field.clj | 10 ++++++--- test/metabase/api/meta/field_test.clj | 29 +++++++++++++++++++++++++-- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/.dir-locals.el b/.dir-locals.el index 1e8f15c48de..fec58bfee51 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -13,6 +13,7 @@ (let-400 1) (let-404 1) (match 1) + (match-$ 1) (macrolet 1) (org-perms-case 1) (upd 2) diff --git a/src/metabase/api/meta/field.clj b/src/metabase/api/meta/field.clj index 70b59ffac03..65c76e0f36b 100644 --- a/src/metabase/api/meta/field.clj +++ b/src/metabase/api/meta/field.clj @@ -1,18 +1,22 @@ (ns metabase.api.meta.field (:require [compojure.core :refer [GET PUT]] + [medley.core :as medley] [metabase.api.common :refer :all] [metabase.db :refer :all] (metabase.models [hydrate :refer [hydrate]] - [field :refer [Field]]))) + [field :refer [Field]]) + [metabase.util :as u])) (defendpoint GET "/:id" [id] (->404 (sel :one Field :id id) read-check (hydrate [:table :db]))) -(defendpoint PUT "/:id" [id :as {{:keys [special_type preview_display description]} :body}] +(defendpoint PUT "/:id" [id :as {body :body}] (write-check Field id) - (upd Field id :special_type special_type :preview_display preview_display :description description)) + (check-500 (->> (u/select-non-nil-keys body :special_type :preview_display :description) + (medley/mapply upd Field id))) + (sel :one Field :id id)) (defendpoint GET "/:id/summary" [id] (let-404 [{:keys [count distinct-count] :as field} (sel :one Field :id id)] diff --git a/test/metabase/api/meta/field_test.clj b/test/metabase/api/meta/field_test.clj index 6c9b4d7947e..dbce6b58334 100644 --- a/test/metabase/api/meta/field_test.clj +++ b/test/metabase/api/meta/field_test.clj @@ -4,7 +4,9 @@ (metabase.models [field :refer [Field]] [table :refer [Table]]) [metabase.test-data :refer :all] - [metabase.test.util :refer [match-$]])) + [metabase.test.util :refer [match-$ expect-eval-actual-first]])) + + ;; ## GET /api/meta/field/:id (expect @@ -43,8 +45,31 @@ :base_type "TextField"}) ((user->client :rasta) :get 200 (format "meta/field/%d" (field->id :users :name)))) -;; GET /api/meta/field/:id/summary +;; ## GET /api/meta/field/:id/summary (expect [["count" 75] ; why doesn't this come back as a dictionary ? ["distincts" 75]] ((user->client :rasta) :get 200 (format "meta/field/%d/summary" (field->id :categories :name)))) + + +;; ## PUT /api/meta/field/:id +;; Check that we can update a Field +(expect-eval-actual-first + (match-$ (sel :one Field :id (field->id :venues :latitude)) + {:description nil + :table_id (table->id :venues) + :special_type "latitude" + :name "LONGITUDE" + :updated_at $ + :active true + :id $ + :field_type "dimension" + :position 0 + :preview_display true + :created_at $ + :base_type "FloatField"}) + (let [result ((user->client :rasta) :put 200 (format "meta/field/:id" (field->id :venues :latitude)) {:special_type :latitude})] + ;; this is sketchy. But return the Field back to its unmodified state so it won't affect other unit tests + (upd Field (field->id :venues :latitude) :special_type nil) + ;; return the modified Field + result)) -- GitLab