1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
require 'spec_helper'
# TODO: refactor to make it inline with the new style of integration specs
class Address
include Virtus
attribute :address, String
attribute :locality, String
attribute :region, String
attribute :postal_code, String
end
class PhoneNumber
include Virtus
attribute :number, String
end
class User
include Virtus
attribute :phone_numbers, Array[PhoneNumber]
attribute :addresses, Set[Address]
end
describe User do
it { is_expected.to respond_to(:phone_numbers) }
it { is_expected.to respond_to(:phone_numbers=) }
it { is_expected.to respond_to(:addresses) }
it { is_expected.to respond_to(:addresses=) }
let(:instance) do
described_class.new(:phone_numbers => phone_numbers_attributes,
:addresses => addresses_attributes)
end
let(:phone_numbers_attributes) { [
{ :number => '212-555-1212' },
{ :number => '919-444-3265' },
] }
let(:addresses_attributes) { [
{ :address => '1234 Any St.', :locality => 'Anytown', :region => "DC", :postal_code => "21234" },
] }
describe '#phone_numbers' do
describe 'first entry' do
subject { instance.phone_numbers.first }
it { is_expected.to be_instance_of(PhoneNumber) }
describe '#number' do
subject { super().number }
it { is_expected.to eql('212-555-1212') }
end
end
describe 'last entry' do
subject { instance.phone_numbers.last }
it { is_expected.to be_instance_of(PhoneNumber) }
describe '#number' do
subject { super().number }
it { is_expected.to eql('919-444-3265') }
end
end
end
describe '#addresses' do
subject { instance.addresses.first }
it { is_expected.to be_instance_of(Address) }
describe '#address' do
subject { super().address }
it { is_expected.to eql('1234 Any St.') }
end
describe '#locality' do
subject { super().locality }
it { is_expected.to eql('Anytown') }
end
describe '#region' do
subject { super().region }
it { is_expected.to eql('DC') }
end
describe '#postal_code' do
subject { super().postal_code }
it { is_expected.to eql('21234') }
end
end
end
|