diff --git a/Gemfile.lock b/Gemfile.lock index b71d2f0..d0ba2c7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - xpm_ruby (0.4.1) + xpm_ruby (0.5.0) activesupport builder dry-types diff --git a/lib/xpm_ruby/job.rb b/lib/xpm_ruby/job.rb index 0406274..cb69dd9 100644 --- a/lib/xpm_ruby/job.rb +++ b/lib/xpm_ruby/job.rb @@ -63,13 +63,16 @@ def delete(access_token:, xero_tenant_id:, job:) end # The XML structure for job.assign does not fit in a Hash - # so we need to pass in the XML directly + # so we need to pass in the XML directly. + # + # Returns the whole response — both "Status" and the "Job" describing the + # assignment XPM confirmed — rather than digging out one of them, because a + # caller checking the outcome and a caller reading the assignment both need + # it and neither can recover the other half. def assign(access_token:, xero_tenant_id:, job_xml:) - response = Connection + Connection .new(access_token: access_token, xero_tenant_id: xero_tenant_id) .put(endpoint: "job.api/assign", data: job_xml) - - response["Status"] end def applytemplate(access_token:, xero_tenant_id:, job:) diff --git a/lib/xpm_ruby/version.rb b/lib/xpm_ruby/version.rb index a116001..e0f8998 100644 --- a/lib/xpm_ruby/version.rb +++ b/lib/xpm_ruby/version.rb @@ -1,3 +1,3 @@ module XpmRuby - VERSION = "0.4.1".freeze + VERSION = "0.5.0".freeze end diff --git a/spec/xpm_ruby/job_spec.rb b/spec/xpm_ruby/job_spec.rb index 4e19ea8..2cea3b8 100644 --- a/spec/xpm_ruby/job_spec.rb +++ b/spec/xpm_ruby/job_spec.rb @@ -161,7 +161,9 @@ module XpmRuby VCR.use_cassette("xpm_ruby/job/assign") do response = Job.assign(access_token: access_token, xero_tenant_id: xero_tenant_id, job_xml: job_xml) - expect(response).to eq("OK") + expect(response["Status"]).to eq("OK") + expect(response.dig("Job", "ID")).to eq("J000032") + expect(response.dig("Job", "Assigned", "Staff", "ID")).to eq("859230") end end end @@ -173,7 +175,9 @@ module XpmRuby VCR.use_cassette("xpm_ruby/job/assign/remove") do response = Job.assign(access_token: access_token, xero_tenant_id: xero_tenant_id, job_xml: job_xml) - expect(response).to eq("OK") + expect(response["Status"]).to eq("OK") + expect(response.dig("Job", "ID")).to eq("J000032") + expect(response.dig("Job", "Assigned")).to be_nil end end end @@ -187,7 +191,9 @@ module XpmRuby VCR.use_cassette("xpm_ruby/job/assign/manager") do response = Job.assign(access_token: access_token, xero_tenant_id: xero_tenant_id, job_xml: job_xml) - expect(response).to eq("OK") + expect(response["Status"]).to eq("OK") + expect(response.dig("Job", "ID")).to eq("J000032") + expect(response.dig("Job", "Manager", "ID")).to eq("859230") end end end @@ -199,7 +205,9 @@ module XpmRuby VCR.use_cassette("xpm_ruby/job/assign/removemanager") do response = Job.assign(access_token: access_token, xero_tenant_id: xero_tenant_id, job_xml: job_xml) - expect(response).to eq("OK") + expect(response["Status"]).to eq("OK") + expect(response.dig("Job", "ID")).to eq("J000032") + expect(response.dig("Job", "Manager")).to be_nil end end end @@ -213,7 +221,9 @@ module XpmRuby VCR.use_cassette("xpm_ruby/job/assign/partner") do response = Job.assign(access_token: access_token, xero_tenant_id: xero_tenant_id, job_xml: job_xml) - expect(response).to eq("OK") + expect(response["Status"]).to eq("OK") + expect(response.dig("Job", "ID")).to eq("J000032") + expect(response.dig("Job", "Partner", "ID")).to eq("859230") end end end @@ -225,7 +235,9 @@ module XpmRuby VCR.use_cassette("xpm_ruby/job/assign/removepartner") do response = Job.assign(access_token: access_token, xero_tenant_id: xero_tenant_id, job_xml: job_xml) - expect(response).to eq("OK") + expect(response["Status"]).to eq("OK") + expect(response.dig("Job", "ID")).to eq("J000032") + expect(response.dig("Job", "Partner")).to be_nil end end end