fruit_to_lime 2.5.3 → 2.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/lib/fruit_to_lime.rb +17 -17
  2. data/lib/fruit_to_lime/csv_helper.rb +47 -47
  3. data/lib/fruit_to_lime/email_helper.rb +10 -10
  4. data/lib/fruit_to_lime/errors.rb +16 -16
  5. data/lib/fruit_to_lime/excel_helper.rb +10 -10
  6. data/lib/fruit_to_lime/global_phone.json +6571 -6571
  7. data/lib/fruit_to_lime/model/address.rb +60 -60
  8. data/lib/fruit_to_lime/model/class_settings.rb +50 -50
  9. data/lib/fruit_to_lime/model/coworker.rb +76 -76
  10. data/lib/fruit_to_lime/model/coworker_reference.rb +33 -33
  11. data/lib/fruit_to_lime/model/customfield.rb +87 -87
  12. data/lib/fruit_to_lime/model/deal.rb +141 -145
  13. data/lib/fruit_to_lime/model/deal_status.rb +12 -12
  14. data/lib/fruit_to_lime/model/note.rb +79 -79
  15. data/lib/fruit_to_lime/model/organization.rb +203 -197
  16. data/lib/fruit_to_lime/model/person.rb +151 -151
  17. data/lib/fruit_to_lime/model/referencetosource.rb +45 -45
  18. data/lib/fruit_to_lime/model/relation.rb +23 -23
  19. data/lib/fruit_to_lime/model/rootmodel.rb +338 -330
  20. data/lib/fruit_to_lime/model/settings.rb +60 -60
  21. data/lib/fruit_to_lime/model/tag.rb +35 -35
  22. data/lib/fruit_to_lime/model_helpers.rb +54 -54
  23. data/lib/fruit_to_lime/phone_helper.rb +74 -74
  24. data/lib/fruit_to_lime/roo_helper.rb +72 -72
  25. data/lib/fruit_to_lime/serialize_helper.rb +186 -186
  26. data/lib/fruit_to_lime/templating.rb +52 -52
  27. data/spec/address_spec.rb +48 -48
  28. data/spec/class_settings_spec.rb +37 -37
  29. data/spec/coworker_spec.rb +94 -94
  30. data/spec/custom_field_spec.rb +22 -22
  31. data/spec/deal_spec.rb +101 -102
  32. data/spec/helpers/csv_helper_spec.rb +29 -29
  33. data/spec/helpers/email_helper_spec.rb +32 -32
  34. data/spec/helpers/phone_helper_spec.rb +97 -97
  35. data/spec/helpers/serialize_helper_spec.rb +249 -249
  36. data/spec/helpers/xsd_validate_spec.rb +58 -58
  37. data/spec/note_spec.rb +98 -67
  38. data/spec/organization_spec.rb +103 -89
  39. data/spec/person_spec.rb +134 -134
  40. data/spec/rootmodel_spec.rb +277 -230
  41. data/spec/templating_spec.rb +11 -11
  42. data/templates/csv/lib/tomodel.rb +230 -230
  43. data/templates/csv/spec/exporter_spec.rb +17 -17
  44. data/templates/csv/spec/sample_data/coworkers.csv +2 -2
  45. data/templates/csv/spec/sample_data/deals.csv +2 -2
  46. data/templates/csv/spec/sample_data/organizations.csv +2 -2
  47. data/templates/csv/spec/sample_data/persons.csv +2 -2
  48. data/templates/easy/Gemfile +5 -0
  49. data/templates/easy/Rakefile.rb +7 -0
  50. data/templates/easy/convert.rb +3 -0
  51. data/templates/easy/lib/tomodel.rb +330 -0
  52. data/templates/easy/spec/exporter_spec.rb +10 -0
  53. data/templates/easy/spec/sample_data/Company.txt +649 -0
  54. data/templates/easy/spec/spec_helper.rb +24 -0
  55. data/templates/excel/lib/tomodel.rb +207 -207
  56. data/templates/sqlserver/lib/tomodel.rb +79 -79
  57. metadata +10 -3
data/spec/person_spec.rb CHANGED
@@ -1,134 +1,134 @@
1
- require "spec_helper"
2
- require 'fruit_to_lime'
3
-
4
- describe "Person" do
5
- let(:person) {
6
- FruitToLime::Person.new
7
- }
8
-
9
- it "can set a customfield" do
10
- person.set_custom_field({:integration_id=>'the key',
11
- :value=> 'the value'})
12
-
13
- value = person.custom_values[0]
14
- field = value.field
15
- field.integration_id.should eq 'the key'
16
- value.value.should eq 'the value'
17
- end
18
-
19
- it "will set custom field with same integration_id to the last value" do
20
- person.set_custom_field({:integration_id=>'the key',
21
- :value=> 'the value'})
22
-
23
- person.set_custom_field({:integration_id=>'the key',
24
- :value=> 'the value 2'})
25
- value = person.custom_values[0]
26
- field = value.field
27
-
28
- person.custom_values.length.should eq 1
29
- field.integration_id.should eq 'the key'
30
- value.value.should eq 'the value 2'
31
- end
32
-
33
- it "will set custom field with same id to the last value" do
34
- person.set_custom_field({:id=>'the id',
35
- :value=> 'the value'})
36
-
37
- person.set_custom_field({:id=>'the id',
38
- :value=> 'the value 2'})
39
- value = person.custom_values[0]
40
- field = value.field
41
-
42
- person.custom_values.length.should eq 1
43
- field.id.should eq 'the id'
44
- value.value.should eq 'the value 2'
45
- end
46
-
47
- it "will set custom field (using set_custom_value) with same integration_id to the last value" do
48
- person.set_custom_value('the id','the value')
49
-
50
- person.set_custom_value('the id','the value 2')
51
- value = person.custom_values[0]
52
- field = value.field
53
-
54
- person.custom_values.length.should eq 1
55
- field.integration_id.should eq 'the id'
56
- value.value.should eq 'the value 2'
57
- end
58
-
59
- it "will only set tag once" do
60
- person.set_tag('tag1')
61
- person.set_tag('tag1')
62
- person.tags.length.should eq 1
63
- tag = person.tags[0]
64
- tag.value.should eq 'tag1'
65
- end
66
-
67
- it "should have a firstname if no lastname" do
68
- person.first_name = "Vincent"
69
- person.last_name = nil
70
-
71
- error = person.validate
72
- error.should be_empty
73
- end
74
-
75
- it "should be currently employed if nothing specified" do
76
- expect(person.currently_employed).to eq(true)
77
- end
78
-
79
- it "should have a lastname if no firstname" do
80
- person.first_name = String.new
81
- person.last_name = "Vega"
82
-
83
- error = person.validate
84
- error.should be_empty
85
- end
86
-
87
- it "shouldnt pass validation with no firstname and lastname" do
88
- person.first_name = String.new
89
- person.last_name = nil
90
-
91
- error = person.validate
92
- error.should start_with("A firstname or lastname is required for person")
93
- end
94
-
95
- it "should auto convert org to org.ref during assignment" do
96
- # given
97
- org = FruitToLime::Organization.new({:integration_id => "123", :name => "Lundalogik"})
98
-
99
- # when
100
- person.organization = org
101
-
102
- # then
103
- person.organization.is_a?(FruitToLime::OrganizationReference).should eq true
104
- end
105
-
106
- describe "parse_name_to_firstname_lastname_se" do
107
- it "can parse 'Kalle Nilsson' into firstname 'Kalle' and lastname 'Nilsson'" do
108
- person.parse_name_to_firstname_lastname_se 'Kalle Nilsson'
109
-
110
- person.first_name.should eq 'Kalle'
111
- person.last_name.should eq 'Nilsson'
112
- end
113
-
114
- it "can parse 'Kalle Svensson Nilsson' into firstname 'Kalle' and lastname 'Svensson Nilsson'" do
115
- person.parse_name_to_firstname_lastname_se 'Kalle Svensson Nilsson'
116
-
117
- person.first_name.should eq 'Kalle'
118
- person.last_name.should eq 'Svensson Nilsson'
119
- end
120
-
121
- it "sets default name when name is empty" do
122
- person.parse_name_to_firstname_lastname_se '', 'a default'
123
-
124
- person.first_name.should eq 'a default'
125
- end
126
-
127
- it "sets default name when name is nil" do
128
- person.parse_name_to_firstname_lastname_se nil, 'a default'
129
-
130
- person.first_name.should eq 'a default'
131
- end
132
- end
133
- end
134
-
1
+ require "spec_helper"
2
+ require 'fruit_to_lime'
3
+
4
+ describe "Person" do
5
+ let(:person) {
6
+ FruitToLime::Person.new
7
+ }
8
+
9
+ it "can set a customfield" do
10
+ person.set_custom_field({:integration_id=>'the key',
11
+ :value=> 'the value'})
12
+
13
+ value = person.custom_values[0]
14
+ field = value.field
15
+ field.integration_id.should eq 'the key'
16
+ value.value.should eq 'the value'
17
+ end
18
+
19
+ it "will set custom field with same integration_id to the last value" do
20
+ person.set_custom_field({:integration_id=>'the key',
21
+ :value=> 'the value'})
22
+
23
+ person.set_custom_field({:integration_id=>'the key',
24
+ :value=> 'the value 2'})
25
+ value = person.custom_values[0]
26
+ field = value.field
27
+
28
+ person.custom_values.length.should eq 1
29
+ field.integration_id.should eq 'the key'
30
+ value.value.should eq 'the value 2'
31
+ end
32
+
33
+ it "will set custom field with same id to the last value" do
34
+ person.set_custom_field({:id=>'the id',
35
+ :value=> 'the value'})
36
+
37
+ person.set_custom_field({:id=>'the id',
38
+ :value=> 'the value 2'})
39
+ value = person.custom_values[0]
40
+ field = value.field
41
+
42
+ person.custom_values.length.should eq 1
43
+ field.id.should eq 'the id'
44
+ value.value.should eq 'the value 2'
45
+ end
46
+
47
+ it "will set custom field (using set_custom_value) with same integration_id to the last value" do
48
+ person.set_custom_value('the id','the value')
49
+
50
+ person.set_custom_value('the id','the value 2')
51
+ value = person.custom_values[0]
52
+ field = value.field
53
+
54
+ person.custom_values.length.should eq 1
55
+ field.integration_id.should eq 'the id'
56
+ value.value.should eq 'the value 2'
57
+ end
58
+
59
+ it "will only set tag once" do
60
+ person.set_tag('tag1')
61
+ person.set_tag('tag1')
62
+ person.tags.length.should eq 1
63
+ tag = person.tags[0]
64
+ tag.value.should eq 'tag1'
65
+ end
66
+
67
+ it "should have a firstname if no lastname" do
68
+ person.first_name = "Vincent"
69
+ person.last_name = nil
70
+
71
+ error = person.validate
72
+ error.should be_empty
73
+ end
74
+
75
+ it "should be currently employed if nothing specified" do
76
+ expect(person.currently_employed).to eq(true)
77
+ end
78
+
79
+ it "should have a lastname if no firstname" do
80
+ person.first_name = String.new
81
+ person.last_name = "Vega"
82
+
83
+ error = person.validate
84
+ error.should be_empty
85
+ end
86
+
87
+ it "shouldnt pass validation with no firstname and lastname" do
88
+ person.first_name = String.new
89
+ person.last_name = nil
90
+
91
+ error = person.validate
92
+ error.should start_with("A firstname or lastname is required for person")
93
+ end
94
+
95
+ it "should auto convert org to org.ref during assignment" do
96
+ # given
97
+ org = FruitToLime::Organization.new({:integration_id => "123", :name => "Lundalogik"})
98
+
99
+ # when
100
+ person.organization = org
101
+
102
+ # then
103
+ person.organization.is_a?(FruitToLime::OrganizationReference).should eq true
104
+ end
105
+
106
+ describe "parse_name_to_firstname_lastname_se" do
107
+ it "can parse 'Kalle Nilsson' into firstname 'Kalle' and lastname 'Nilsson'" do
108
+ person.parse_name_to_firstname_lastname_se 'Kalle Nilsson'
109
+
110
+ person.first_name.should eq 'Kalle'
111
+ person.last_name.should eq 'Nilsson'
112
+ end
113
+
114
+ it "can parse 'Kalle Svensson Nilsson' into firstname 'Kalle' and lastname 'Svensson Nilsson'" do
115
+ person.parse_name_to_firstname_lastname_se 'Kalle Svensson Nilsson'
116
+
117
+ person.first_name.should eq 'Kalle'
118
+ person.last_name.should eq 'Svensson Nilsson'
119
+ end
120
+
121
+ it "sets default name when name is empty" do
122
+ person.parse_name_to_firstname_lastname_se '', 'a default'
123
+
124
+ person.first_name.should eq 'a default'
125
+ end
126
+
127
+ it "sets default name when name is nil" do
128
+ person.parse_name_to_firstname_lastname_se nil, 'a default'
129
+
130
+ person.first_name.should eq 'a default'
131
+ end
132
+ end
133
+ end
134
+
@@ -1,230 +1,277 @@
1
- require "spec_helper"
2
- require 'fruit_to_lime'
3
-
4
- describe "RootModel" do
5
- let(:rootmodel) {
6
- FruitToLime::RootModel.new
7
- }
8
-
9
- it "will contain integration coworker by default" do
10
- rootmodel.find_coworker_by_integration_id("import").first_name.should eq "Import"
11
- rootmodel.coworkers.length.should eq 1
12
- end
13
-
14
- it "can add a coworker from a hash" do
15
- rootmodel.add_coworker({
16
- :integration_id => "123key",
17
- :first_name => "Kalle",
18
- :last_name => "Anka",
19
- :email => "kalle.anka@vonanka.com"
20
- })
21
- rootmodel.find_coworker_by_integration_id("123key").first_name.should eq "Kalle"
22
- rootmodel.coworkers.length.should eq 2
23
- end
24
-
25
- it "can add a coworker from a new coworker" do
26
- coworker = FruitToLime::Coworker.new
27
- coworker.integration_id = "123key"
28
- coworker.first_name="Kalle"
29
- coworker.last_name="Anka"
30
- coworker.email = "kalle.anka@vonanka.com"
31
- rootmodel.add_coworker(coworker)
32
- rootmodel.find_coworker_by_integration_id("123key").first_name.should eq "Kalle"
33
- rootmodel.coworkers.length.should eq 2
34
- end
35
-
36
- it "will not add a new coworker when the coworker is already added (same integration id)" do
37
- rootmodel.add_coworker({
38
- :integration_id=>"123key",
39
- :first_name=>"Kalle",
40
- :last_name=>"Anka",
41
- :email=>"kalle.anka@vonanka.com"
42
- })
43
- rootmodel.coworkers.length.should eq 2
44
- expect {
45
- rootmodel.add_coworker({
46
- :integration_id=>"123key",
47
- :first_name=>"Knatte",
48
- :last_name=>"Anka",
49
- :email=>"knatte.anka@vonanka.com"
50
- })
51
- }.to raise_error(FruitToLime::AlreadyAddedError)
52
- rootmodel.find_coworker_by_integration_id("123key").first_name.should eq "Kalle"
53
- rootmodel.coworkers.length.should eq 2
54
- end
55
-
56
- it "can add an organization from hash" do
57
- rootmodel.add_organization({
58
- :integration_id => "123key",
59
- :name => "Beagle Boys"
60
- })
61
- rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
62
- rootmodel.organizations.length.should eq 1
63
- end
64
-
65
- it "can add an organization from a new organization" do
66
- # given
67
- organization = FruitToLime::Organization.new
68
- organization.integration_id = "123key"
69
- organization.name = "Beagle Boys"
70
-
71
- # when
72
- rootmodel.add_organization(organization)
73
-
74
- # then
75
- rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
76
- rootmodel.organizations.length.should eq 1
77
- end
78
-
79
- it "will not add a new organizations when the organizations is already added (same integration id)" do
80
- # given
81
- rootmodel.add_organization({
82
- :integration_id => "123key",
83
- :name => "Beagle Boys"
84
- })
85
- rootmodel.organizations.length.should eq 1
86
- rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
87
-
88
- # when, then
89
- expect {
90
- rootmodel.add_organization({
91
- :integration_id => "123key",
92
- :name => "Beagle Boys 2"
93
- })
94
- }.to raise_error(FruitToLime::AlreadyAddedError)
95
- rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
96
- rootmodel.organizations.length.should eq 1
97
- end
98
-
99
- it "can add a deal from hash" do
100
- rootmodel.add_deal({
101
- :integration_id => "123key",
102
- :name => "Big deal"
103
- })
104
- rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
105
- rootmodel.deals.length.should eq 1
106
- end
107
-
108
- it "can add a deal from a new deal" do
109
- # given
110
- deal = FruitToLime::Deal.new
111
- deal.integration_id = "123key"
112
- deal.name = "Big deal"
113
-
114
- # when
115
- rootmodel.add_deal(deal)
116
-
117
- # then
118
- rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
119
- rootmodel.deals.length.should eq 1
120
- end
121
-
122
- it "will not add a new deal when the deal is already added (same integration id)" do
123
- # given
124
- rootmodel.add_deal({
125
- :integration_id => "123key",
126
- :name => "Big deal"
127
- })
128
- rootmodel.deals.length.should eq 1
129
- rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
130
-
131
- # when, then
132
- expect {
133
- rootmodel.add_deal({
134
- :integration_id => "123key",
135
- :name => "Bigger deal"
136
- })
137
- }.to raise_error(FruitToLime::AlreadyAddedError)
138
- rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
139
- rootmodel.deals.length.should eq 1
140
- end
141
-
142
- it "can add a note from hash" do
143
- rootmodel.add_note({
144
- :integration_id => "123key",
145
- :text => "This is a note"
146
- })
147
- rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
148
- rootmodel.notes.length.should eq 1
149
- end
150
-
151
- it "can add a note from a new note" do
152
- # given
153
- note = FruitToLime::Note.new
154
- note.integration_id = "123key"
155
- note.text = "This is a note"
156
-
157
- # when
158
- rootmodel.add_note(note)
159
-
160
- # then
161
- rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
162
- rootmodel.notes.length.should eq 1
163
- end
164
-
165
- it "will not add a new organizations when the organizations is already added (same integration id)" do
166
- # given
167
- rootmodel.add_note({
168
- :integration_id => "123key",
169
- :text => "This is a note"
170
- })
171
- rootmodel.notes.length.should eq 1
172
-
173
- # when, then
174
- expect {
175
- rootmodel.add_note({
176
- :integration_id => "123key",
177
- :text => "This is another note"
178
- })
179
- }.to raise_error(FruitToLime::AlreadyAddedError)
180
- rootmodel.notes.length.should eq 1
181
- rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
182
- end
183
-
184
- it "will ignore empty integration ids during sanity check" do
185
- org1 = FruitToLime::Organization.new
186
- org1.name = "company 1"
187
- rootmodel.organizations.push org1
188
-
189
- org2 = FruitToLime::Organization.new
190
- org2.name = "company 2"
191
- rootmodel.organizations.push org2
192
-
193
- rootmodel.sanity_check.should eq ""
194
- end
195
-
196
- it "will report when the same integration id is used during sanity check" do
197
- org1 = FruitToLime::Organization.new
198
- org1.integration_id = "1"
199
- org1.name = "company 1"
200
- rootmodel.organizations.push org1
201
-
202
- org2 = FruitToLime::Organization.new
203
- org2.integration_id = "1"
204
- org2.name = "company 2"
205
- rootmodel.organizations.push org2
206
-
207
- rootmodel.sanity_check.should eq "Duplicate organization integration_id: 1."
208
- end
209
-
210
- it "will report when the same integrationid on person is used during sanity check" do
211
- org1 = FruitToLime::Organization.new
212
- org1.integration_id = "1"
213
- org1.name = "company 1"
214
- person1 = FruitToLime::Person.new
215
- person1.integration_id = '1'
216
- org1.add_employee person1
217
-
218
- rootmodel.organizations.push org1
219
-
220
- org2 = FruitToLime::Organization.new
221
- org2.integration_id = "2"
222
- org2.name = "company 2"
223
- person2 = FruitToLime::Person.new
224
- person2.integration_id = '1'
225
- org2.add_employee person2
226
- rootmodel.organizations.push org2
227
-
228
- rootmodel.sanity_check.should eq "Duplicate person integration_id: 1."
229
- end
230
- end
1
+ require "spec_helper"
2
+ require 'fruit_to_lime'
3
+
4
+ describe "RootModel" do
5
+ let(:rootmodel) {
6
+ FruitToLime::RootModel.new
7
+ }
8
+
9
+ it "will contain integration coworker by default" do
10
+ rootmodel.find_coworker_by_integration_id("import").first_name.should eq "Import"
11
+ rootmodel.coworkers.length.should eq 1
12
+ end
13
+
14
+ it "can add a coworker from a hash" do
15
+ rootmodel.add_coworker({
16
+ :integration_id => "123key",
17
+ :first_name => "Kalle",
18
+ :last_name => "Anka",
19
+ :email => "kalle.anka@vonanka.com"
20
+ })
21
+ rootmodel.find_coworker_by_integration_id("123key").first_name.should eq "Kalle"
22
+ rootmodel.coworkers.length.should eq 2
23
+ end
24
+
25
+ it "can add a coworker from a new coworker" do
26
+ coworker = FruitToLime::Coworker.new
27
+ coworker.integration_id = "123key"
28
+ coworker.first_name="Kalle"
29
+ coworker.last_name="Anka"
30
+ coworker.email = "kalle.anka@vonanka.com"
31
+ rootmodel.add_coworker(coworker)
32
+ rootmodel.find_coworker_by_integration_id("123key").first_name.should eq "Kalle"
33
+ rootmodel.coworkers.length.should eq 2
34
+ end
35
+
36
+ it "will not add a new coworker when the coworker is already added (same integration id)" do
37
+ rootmodel.add_coworker({
38
+ :integration_id=>"123key",
39
+ :first_name=>"Kalle",
40
+ :last_name=>"Anka",
41
+ :email=>"kalle.anka@vonanka.com"
42
+ })
43
+ rootmodel.coworkers.length.should eq 2
44
+ expect {
45
+ rootmodel.add_coworker({
46
+ :integration_id=>"123key",
47
+ :first_name=>"Knatte",
48
+ :last_name=>"Anka",
49
+ :email=>"knatte.anka@vonanka.com"
50
+ })
51
+ }.to raise_error(FruitToLime::AlreadyAddedError)
52
+ rootmodel.find_coworker_by_integration_id("123key").first_name.should eq "Kalle"
53
+ rootmodel.coworkers.length.should eq 2
54
+ end
55
+
56
+ it "can add an organization from hash" do
57
+ rootmodel.add_organization({
58
+ :integration_id => "123key",
59
+ :name => "Beagle Boys"
60
+ })
61
+ rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
62
+ rootmodel.organizations.length.should eq 1
63
+ end
64
+
65
+ it "can add an organization from a new organization" do
66
+ # given
67
+ organization = FruitToLime::Organization.new
68
+ organization.integration_id = "123key"
69
+ organization.name = "Beagle Boys"
70
+
71
+ # when
72
+ rootmodel.add_organization(organization)
73
+
74
+ # then
75
+ rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
76
+ rootmodel.organizations.length.should eq 1
77
+ end
78
+
79
+ it "will not add a new organizations when the organizations is already added (same integration id)" do
80
+ # given
81
+ rootmodel.add_organization({
82
+ :integration_id => "123key",
83
+ :name => "Beagle Boys"
84
+ })
85
+ rootmodel.organizations.length.should eq 1
86
+ rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
87
+
88
+ # when, then
89
+ expect {
90
+ rootmodel.add_organization({
91
+ :integration_id => "123key",
92
+ :name => "Beagle Boys 2"
93
+ })
94
+ }.to raise_error(FruitToLime::AlreadyAddedError)
95
+ rootmodel.find_organization_by_integration_id("123key").name.should eq "Beagle Boys"
96
+ rootmodel.organizations.length.should eq 1
97
+ end
98
+
99
+ it "can add a deal from hash" do
100
+ rootmodel.add_deal({
101
+ :integration_id => "123key",
102
+ :name => "Big deal"
103
+ })
104
+ rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
105
+ rootmodel.deals.length.should eq 1
106
+ end
107
+
108
+ it "can add a deal from a new deal" do
109
+ # given
110
+ deal = FruitToLime::Deal.new
111
+ deal.integration_id = "123key"
112
+ deal.name = "Big deal"
113
+
114
+ # when
115
+ rootmodel.add_deal(deal)
116
+
117
+ # then
118
+ rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
119
+ rootmodel.deals.length.should eq 1
120
+ end
121
+
122
+ it "will not add a new deal when the deal is already added (same integration id)" do
123
+ # given
124
+ rootmodel.add_deal({
125
+ :integration_id => "123key",
126
+ :name => "Big deal"
127
+ })
128
+ rootmodel.deals.length.should eq 1
129
+ rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
130
+
131
+ # when, then
132
+ expect {
133
+ rootmodel.add_deal({
134
+ :integration_id => "123key",
135
+ :name => "Bigger deal"
136
+ })
137
+ }.to raise_error(FruitToLime::AlreadyAddedError)
138
+ rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
139
+ rootmodel.deals.length.should eq 1
140
+ end
141
+
142
+ it "can add a note from hash" do
143
+ rootmodel.add_note({
144
+ :integration_id => "123key",
145
+ :text => "This is a note"
146
+ })
147
+ rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
148
+ rootmodel.notes.length.should eq 1
149
+ end
150
+
151
+ it "can add a note from a new note" do
152
+ # given
153
+ note = FruitToLime::Note.new
154
+ note.integration_id = "123key"
155
+ note.text = "This is a note"
156
+
157
+ # when
158
+ rootmodel.add_note(note)
159
+
160
+ # then
161
+ rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
162
+ rootmodel.notes.length.should eq 1
163
+ end
164
+
165
+ it "will not add a new organizations when the organizations is already added (same integration id)" do
166
+ # given
167
+ rootmodel.add_note({
168
+ :integration_id => "123key",
169
+ :text => "This is a note"
170
+ })
171
+ rootmodel.notes.length.should eq 1
172
+
173
+ # when, then
174
+ expect {
175
+ rootmodel.add_note({
176
+ :integration_id => "123key",
177
+ :text => "This is another note"
178
+ })
179
+ }.to raise_error(FruitToLime::AlreadyAddedError)
180
+ rootmodel.notes.length.should eq 1
181
+ rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
182
+ end
183
+
184
+ it "Will find a person by integration id" do
185
+ # given
186
+ organization = FruitToLime::Organization.new
187
+ organization.name = "Hubba Bubba"
188
+ organization.add_employee({
189
+ :integration_id => "123",
190
+ :first_name => "Billy",
191
+ :last_name => "Bob"
192
+ })
193
+
194
+ rootmodel.add_organization(organization)
195
+
196
+ # when
197
+ found_person = rootmodel.find_person_by_integration_id("123")
198
+
199
+ # then
200
+ found_person.integration_id.should eq "123"
201
+ found_person.first_name.should eq "Billy"
202
+ found_person.last_name.should eq "Bob"
203
+ end
204
+
205
+ it "Will find a person by integration id from an organization with many employees" do
206
+ # given
207
+ organization = FruitToLime::Organization.new
208
+ organization.name = "Hubba Bubba"
209
+ organization.add_employee({
210
+ :integration_id => "123",
211
+ :first_name => "Billy",
212
+ :last_name => "Bob"
213
+ })
214
+ organization.add_employee({
215
+ :integration_id => "456",
216
+ :first_name => "Vincent",
217
+ :last_name => "Vega"
218
+ })
219
+
220
+ rootmodel.add_organization(organization)
221
+
222
+ # when
223
+ found_person = rootmodel.find_person_by_integration_id("123")
224
+
225
+ # then
226
+ found_person.integration_id.should eq "123"
227
+ found_person.first_name.should eq "Billy"
228
+ found_person.last_name.should eq "Bob"
229
+ end
230
+
231
+ it "will ignore empty integration ids during sanity check" do
232
+ org1 = FruitToLime::Organization.new
233
+ org1.name = "company 1"
234
+ rootmodel.organizations.push org1
235
+
236
+ org2 = FruitToLime::Organization.new
237
+ org2.name = "company 2"
238
+ rootmodel.organizations.push org2
239
+
240
+ rootmodel.sanity_check.should eq ""
241
+ end
242
+
243
+ it "will report when the same integration id is used during sanity check" do
244
+ org1 = FruitToLime::Organization.new
245
+ org1.integration_id = "1"
246
+ org1.name = "company 1"
247
+ rootmodel.organizations.push org1
248
+
249
+ org2 = FruitToLime::Organization.new
250
+ org2.integration_id = "1"
251
+ org2.name = "company 2"
252
+ rootmodel.organizations.push org2
253
+
254
+ rootmodel.sanity_check.should eq "Duplicate organization integration_id: 1."
255
+ end
256
+
257
+ it "will report when the same integrationid on person is used during sanity check" do
258
+ org1 = FruitToLime::Organization.new
259
+ org1.integration_id = "1"
260
+ org1.name = "company 1"
261
+ person1 = FruitToLime::Person.new
262
+ person1.integration_id = '1'
263
+ org1.add_employee person1
264
+
265
+ rootmodel.organizations.push org1
266
+
267
+ org2 = FruitToLime::Organization.new
268
+ org2.integration_id = "2"
269
+ org2.name = "company 2"
270
+ person2 = FruitToLime::Person.new
271
+ person2.integration_id = '1'
272
+ org2.add_employee person2
273
+ rootmodel.organizations.push org2
274
+
275
+ rootmodel.sanity_check.should eq "Duplicate person integration_id: 1."
276
+ end
277
+ end