File: collection_member_coercion_spec.rb

package info (click to toggle)
ruby-virtus 2.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 660 kB
  • sloc: ruby: 4,378; makefile: 2
file content (96 lines) | stat: -rw-r--r-- 2,270 bytes parent folder | download | duplicates (3)
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