Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions lib/xeroizer/record/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -105,24 +105,36 @@ def download_complete_record!
end

def save
save!
true
saves_successfully
rescue XeroizerError => e
log "[ERROR SAVING] (#{__FILE__}:#{__LINE__}) - #{e.message}"
false
end

def save!
raise RecordInvalid unless valid?
raise RecordInvalid unless saves_successfully
end

private

def saves_successfully
return false unless valid?
if new_record?
create
else
update
end

saved!
rescue ApiException => e
e.validation_errors.each do |error|
errors << [:base, error]
end
false
end

public

def saved!
@complete_record_downloaded = true
parent.mark_clean(self)
Expand Down
1 change: 0 additions & 1 deletion test/unit/models/tax_rate_test.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
require 'unit_test_helper'
require 'mocha/test_unit'

class TaxRateTest < Test::Unit::TestCase
include TestHelper
Expand Down
24 changes: 21 additions & 3 deletions test/unit/record/base_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -132,17 +132,21 @@ class Xeroizer::Record::ExampleRecordClassModel < Xeroizer::Record::BaseModel; e
end
end

context 'api error received' do
context 'ApiException received' do
setup do
response = get_file_as_string('api_exception.xml')

# XeroGenericApplication API Exceptions *claim* to be UTF-16 encoded, but are not
# @see http_response.rb Xeroizer::XmlErrorResponse#raise_bad_request!
response.gsub! '<?xml version="1.0" encoding="utf-16"?>', ''

doc = Nokogiri::XML(response)
exception = Xeroizer::ApiException.new(doc.root.xpath("Type").text,
doc.root.xpath("Message").text,
response,
doc,
'<FakeRequest />')

@contact.stubs(:valid?).returns(true)
@contact.stubs(:create).raises(exception)
@contact.stubs(:update).raises(exception)
end
Expand All @@ -156,7 +160,7 @@ class Xeroizer::Record::ExampleRecordClassModel < Xeroizer::Record::BaseModel; e

must 'raise an exception updating records with #save!' do
@contact.stubs(:new_record?).returns(false)
assert_raise(Xeroizer::ApiException) do
assert_raise(Xeroizer::XeroizerError) do
@contact.save!
end
end
Expand All @@ -170,6 +174,20 @@ class Xeroizer::Record::ExampleRecordClassModel < Xeroizer::Record::BaseModel; e
@contact.stubs(:new_record?).returns(false)
assert_equal(false, @contact.save)
end

must 'set errors creating records with #save' do
@contact.stubs(:new_record?).returns(true)
@contact.save
assert_equal([[:base, "Users Organisation is not subscribed to currency NZD"]], @contact.errors)
end

must 'set errors updating records with #save!' do
@contact.stubs(:new_record?).returns(false)
assert_raise(Xeroizer::XeroizerError) do
@contact.save!
end
assert_equal([[:base, "Users Organisation is not subscribed to currency NZD"]], @contact.errors)
end
end
end
end
1 change: 1 addition & 0 deletions test/unit_test_helper.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'test_helper'
require 'webmock'
require 'mocha/test_unit'

include WebMock::API
WebMock.disable_net_connect!(allow_localhost: true)
Expand Down