From bfc90897a6039cf2db59ecc27568ab60a43b4275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Kopy=C5=9B?= Date: Thu, 11 Feb 2021 22:06:33 +0100 Subject: [PATCH] feat: Updating tasks --- lib/click_up/tasks/service.rb | 12 ++++++++++++ spec/click_up/tasks/service_spec.rb | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/click_up/tasks/service.rb b/lib/click_up/tasks/service.rb index 05fb07d..1ce4b88 100644 --- a/lib/click_up/tasks/service.rb +++ b/lib/click_up/tasks/service.rb @@ -49,6 +49,18 @@ def create(attributes) Oj.load(resp.body).then { |task| Task.new(task) } end + + # @param task_id [String] + # @param attributes [Hash] + # @return [ClickUp::Tasks::Task] + def update(task_id:, attributes:) + url = "task/#{task_id}" + + payload = Oj.dump(attributes, mode: :compat) + resp = @http_client.put(url, payload, { "Content-Type" => "application/json" }) + + Oj.load(resp.body).then { |task| Task.new(task) } + end end end end diff --git a/spec/click_up/tasks/service_spec.rb b/spec/click_up/tasks/service_spec.rb index 7bbc69d..63e2b52 100644 --- a/spec/click_up/tasks/service_spec.rb +++ b/spec/click_up/tasks/service_spec.rb @@ -117,4 +117,21 @@ expect(result.name).to eq("created_task") end end + + describe "#update" do + it "sends a request to update a task" do + task_params = build_task(name: "updated_task", id: "abc").to_h + response = instance_double(Faraday::Response, body: Oj.generate(task_params)) + http_client = instance_double(ClickUp::Client::HttpClient, put: response) + + tasks_service = described_class.new(http_client: http_client, list_id: list_id) + result = tasks_service.update(attributes: { name: "updated_task" }, task_id: "abc") + + expected_body = Oj.generate({ name: "updated_task" }) + expect(http_client).to have_received(:put) + .with("task/abc", expected_body, { "Content-Type" => "application/json" }) + expect(result).to be_an_instance_of(ClickUp::Tasks::Task) + expect(result.name).to eq("updated_task") + end + end end