require 'unit_test_helper' class ContactTest < Test::Unit::TestCase include TestHelper def setup @client = Xeroizer::PublicApplication.new(CONSUMER_KEY, CONSUMER_SECRET) end context "contact validators" do should "have a name" do contact = @client.Contact.build assert_equal(false, contact.valid?) blank_error = contact.errors_for(:name).first assert_not_nil(blank_error) assert_equal("can't be blank", blank_error) contact.name = "SOMETHING" assert_equal(true, contact.valid?) assert_equal(0, contact.errors.size) end should "be able to have no name if it has a contact_id" do contact = @client.Contact.build assert_equal(false, contact.valid?) contact.contact_id = "1-2-3" assert_equal(true, contact.valid?) assert_equal(0, contact.errors.size) end should "be able to have no name if it has a contact_number" do contact = @client.Contact.build assert_equal(false, contact.valid?) contact.contact_number = "abc123" assert_equal(true, contact.valid?) assert_equal(0, contact.errors.size) end should "not allow invalid addresses" do contact = @client.Contact.build(name: "SOMETHING") address = contact.add_address(:type => "INVALID_TYPE") assert_equal(false, contact.valid?) invalid_error = contact.errors_for(:addresses).first assert_not_nil(invalid_error) assert_equal("must all be valid", invalid_error) address.type = "DEFAULT" assert_equal(true, contact.valid?) assert_equal(0, contact.errors.size) end end context "response parsing" do it "parses default attributes" do @instance = Xeroizer::Record::ContactModel.new(nil, "Contact") some_xml = get_record_xml("contact") result = @instance.parse_response(some_xml) contact = result.response_items.first keys = [:contact_id, :contact_status, :name, :first_name, :last_name, :email_address, :skype_user_name, :bank_account_details, :tax_number, :accounts_receivable_tax_type, :accounts_payable_tax_type, :addresses, :phones, :updated_date_utc, :is_supplier, :is_customer, :default_currency] assert_equal(contact.attributes.keys, keys) end it "parses extra attributes when present" do @instance = Xeroizer::Record::ContactModel.new(nil, "Contact") some_xml = get_record_xml("contact_with_details") result = @instance.parse_response(some_xml) contact = result.response_items.first keys = [:contact_id, :contact_status, :name, :first_name, :last_name, :email_address, :skype_user_name, :bank_account_details, :tax_number, :accounts_receivable_tax_type, :accounts_payable_tax_type, :addresses, :phones, :updated_date_utc, :is_supplier, :is_customer, :default_currency, :balances, :batch_payments, :payment_terms] assert_equal(contact.attributes.keys, keys) assert_equal(contact.balances.accounts_receivable.outstanding, 849.50) assert_equal(contact.balances.accounts_receivable.overdue, 910.00) assert_equal(contact.balances.accounts_payable.outstanding, 0.00) assert_equal(contact.balances.accounts_payable.overdue, 0.00) assert_equal(contact.batch_payments.bank_account_number, "123456") assert_equal(contact.batch_payments.bank_account_name, "bank account") assert_equal(contact.batch_payments.details, "details") assert_equal(contact.payment_terms.bills.day, "4") assert_equal(contact.payment_terms.bills.type, "OFFOLLOWINGMONTH") assert_equal(contact.payment_terms.sales.day, "2") assert_equal(contact.payment_terms.sales.type, "OFFOLLOWINGMONTH") end end end