go_import 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/bin/go-import +96 -0
  2. data/lib/go_import/csv_helper.rb +47 -0
  3. data/lib/go_import/email_helper.rb +10 -0
  4. data/lib/go_import/errors.rb +22 -0
  5. data/lib/go_import/excel_helper.rb +10 -0
  6. data/lib/go_import/global_phone.json +6571 -0
  7. data/lib/go_import/model/address.rb +61 -0
  8. data/lib/go_import/model/class_settings.rb +50 -0
  9. data/lib/go_import/model/coworker.rb +76 -0
  10. data/lib/go_import/model/coworker_reference.rb +33 -0
  11. data/lib/go_import/model/customfield.rb +87 -0
  12. data/lib/go_import/model/deal.rb +172 -0
  13. data/lib/go_import/model/deal_class_settings.rb +73 -0
  14. data/lib/go_import/model/deal_state.rb +15 -0
  15. data/lib/go_import/model/deal_status.rb +23 -0
  16. data/lib/go_import/model/deal_status_reference.rb +47 -0
  17. data/lib/go_import/model/deal_status_setting.rb +49 -0
  18. data/lib/go_import/model/documents.rb +51 -0
  19. data/lib/go_import/model/link.rb +70 -0
  20. data/lib/go_import/model/note.rb +97 -0
  21. data/lib/go_import/model/note_classification.rb +25 -0
  22. data/lib/go_import/model/organization.rb +219 -0
  23. data/lib/go_import/model/person.rb +151 -0
  24. data/lib/go_import/model/referencetosource.rb +46 -0
  25. data/lib/go_import/model/relation.rb +23 -0
  26. data/lib/go_import/model/rootmodel.rb +359 -0
  27. data/lib/go_import/model/settings.rb +61 -0
  28. data/lib/go_import/model/tag.rb +35 -0
  29. data/lib/go_import/model_helpers.rb +54 -0
  30. data/lib/go_import/phone_helper.rb +74 -0
  31. data/lib/go_import/roo_helper.rb +80 -0
  32. data/lib/go_import/serialize_helper.rb +186 -0
  33. data/lib/go_import/source.rb +87 -0
  34. data/lib/go_import/templating.rb +52 -0
  35. data/lib/go_import.rb +19 -0
  36. data/sources/csv/.gitignore +14 -0
  37. data/sources/csv/.go_import/runner.rb +62 -0
  38. data/sources/csv/Gemfile +5 -0
  39. data/sources/csv/Rakefile.rb +7 -0
  40. data/sources/csv/converter.rb +179 -0
  41. data/sources/csv/data/coworkers.csv +2 -0
  42. data/sources/csv/data/deals.csv +2 -0
  43. data/sources/csv/data/organizations.csv +2 -0
  44. data/sources/csv/data/persons.csv +2 -0
  45. data/sources/csv/spec/exporter_spec.rb +17 -0
  46. data/sources/csv/spec/sample_data/coworkers.csv +2 -0
  47. data/sources/csv/spec/sample_data/deals.csv +2 -0
  48. data/sources/csv/spec/sample_data/organizations.csv +2 -0
  49. data/sources/csv/spec/sample_data/persons.csv +2 -0
  50. data/sources/csv/spec/spec_helper.rb +30 -0
  51. data/sources/easy/.gitignore +14 -0
  52. data/sources/easy/.go_import/runner.rb +115 -0
  53. data/sources/easy/Export/readme.txt +6 -0
  54. data/sources/easy/Gemfile +5 -0
  55. data/sources/easy/Rakefile.rb +7 -0
  56. data/sources/easy/converter.rb +435 -0
  57. data/sources/easy/spec/exporter_spec.rb +10 -0
  58. data/sources/easy/spec/sample_data/Company.txt +649 -0
  59. data/sources/easy/spec/spec_helper.rb +30 -0
  60. data/sources/excel/.gitignore +14 -0
  61. data/sources/excel/.go_import/runner.rb +116 -0
  62. data/sources/excel/Gemfile +6 -0
  63. data/sources/excel/Rakefile.rb +7 -0
  64. data/sources/excel/converter.rb +130 -0
  65. data/sources/excel/spec/sample_data/sample.xlsx +0 -0
  66. data/sources/excel/spec/spec_helper.rb +26 -0
  67. data/sources/excel/spec/tomodel_spec.rb +18 -0
  68. data/sources/excel/template.xlsx +0 -0
  69. data/spec/address_spec.rb +49 -0
  70. data/spec/class_settings_spec.rb +37 -0
  71. data/spec/coworker_spec.rb +94 -0
  72. data/spec/custom_field_spec.rb +22 -0
  73. data/spec/deal_class_settings_spec.rb +104 -0
  74. data/spec/deal_spec.rb +182 -0
  75. data/spec/deal_status_reference_spec.rb +17 -0
  76. data/spec/documents_spec.rb +37 -0
  77. data/spec/helpers/csv_helper_spec.rb +29 -0
  78. data/spec/helpers/email_helper_spec.rb +32 -0
  79. data/spec/helpers/phone_helper_spec.rb +97 -0
  80. data/spec/helpers/roo_helper_spec.rb +10 -0
  81. data/spec/helpers/serialize_helper_spec.rb +249 -0
  82. data/spec/helpers/xsd_validate_spec.rb +55 -0
  83. data/spec/link_spec.rb +106 -0
  84. data/spec/note_spec.rb +110 -0
  85. data/spec/organization_spec.rb +151 -0
  86. data/spec/person_spec.rb +132 -0
  87. data/spec/rootmodel_spec.rb +371 -0
  88. data/spec/spec_helper.rb +30 -0
  89. data/spec/templating_spec.rb +12 -0
  90. metadata +306 -0
@@ -0,0 +1,371 @@
1
+ require "spec_helper"
2
+ require 'go_import'
3
+
4
+ describe "RootModel" do
5
+ let(:rootmodel) {
6
+ GoImport::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 = GoImport::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(GoImport::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 = GoImport::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(GoImport::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 = GoImport::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 set reponsible coworker to import_coworker if none specifed" do
123
+ # given
124
+ deal = GoImport::Deal.new
125
+ deal.integration_id = "123key"
126
+ deal.name = "Big deal"
127
+
128
+ # when
129
+ rootmodel.add_deal(deal)
130
+
131
+ # then
132
+ deal.responsible_coworker.integration_id.should eq rootmodel.import_coworker.integration_id
133
+ end
134
+
135
+ it "will not set reponsible coworker to import_coworker if specifed" do
136
+ # given
137
+ deal = GoImport::Deal.new
138
+ deal.integration_id = "123key"
139
+ deal.name = "Big deal"
140
+ coworker = GoImport::Coworker.new
141
+ coworker.integration_id = "123"
142
+ deal.responsible_coworker = coworker
143
+
144
+ # when
145
+ rootmodel.add_deal(deal)
146
+
147
+ # then
148
+ deal.responsible_coworker.integration_id.should eq coworker.integration_id
149
+ end
150
+
151
+ it "will not add a new deal when the deal is already added (same integration id)" do
152
+ # given
153
+ rootmodel.add_deal({
154
+ :integration_id => "123key",
155
+ :name => "Big deal"
156
+ })
157
+ rootmodel.deals.length.should eq 1
158
+ rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
159
+
160
+ # when, then
161
+ expect {
162
+ rootmodel.add_deal({
163
+ :integration_id => "123key",
164
+ :name => "Bigger deal"
165
+ })
166
+ }.to raise_error(GoImport::AlreadyAddedError)
167
+ rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
168
+ rootmodel.deals.length.should eq 1
169
+ end
170
+
171
+ it "can add a note from hash" do
172
+ rootmodel.add_note({
173
+ :integration_id => "123key",
174
+ :text => "This is a note"
175
+ })
176
+ rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
177
+ rootmodel.notes.length.should eq 1
178
+ end
179
+
180
+ it "can add a note from a new note" do
181
+ # given
182
+ note = GoImport::Note.new
183
+ note.integration_id = "123key"
184
+ note.text = "This is a note"
185
+
186
+ # when
187
+ rootmodel.add_note(note)
188
+
189
+ # then
190
+ rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
191
+ rootmodel.notes.length.should eq 1
192
+ end
193
+
194
+ it "will not add a nil note" do
195
+ # given, when
196
+ rootmodel.add_note(nil)
197
+
198
+ # then
199
+ rootmodel.notes.length.should eq 0
200
+ end
201
+
202
+ it "will not add a nil organization" do
203
+ # given, when
204
+ rootmodel.add_organization(nil)
205
+
206
+ # then
207
+ rootmodel.organizations.length.should eq 0
208
+ end
209
+
210
+ it "will not add a nil deal" do
211
+ # given, when
212
+ rootmodel.add_deal(nil)
213
+
214
+ # then
215
+ rootmodel.deals.length.should eq 0
216
+ end
217
+
218
+ it "will not add a nil coworker" do
219
+ # given, when
220
+ rootmodel.add_coworker(nil)
221
+
222
+ # then
223
+ # 1 since we always have the import coworker
224
+ rootmodel.coworkers.length.should eq 1
225
+ end
226
+
227
+ it "will add a new link" do
228
+ # given
229
+ link = GoImport::Link.new
230
+ link.integration_id = "123key"
231
+ link.url = "http://dropbox.com/files/readme.txt"
232
+
233
+ # when
234
+ rootmodel.add_link link
235
+
236
+ # then
237
+ rootmodel.documents.find_link_by_integration_id("123key").url.should eq "http://dropbox.com/files/readme.txt"
238
+ rootmodel.documents.links.length.should eq 1
239
+ end
240
+
241
+ it "will not add a new organizations when the organizations is already added (same integration id)" do
242
+ # given
243
+ rootmodel.add_note({
244
+ :integration_id => "123key",
245
+ :text => "This is a note"
246
+ })
247
+ rootmodel.notes.length.should eq 1
248
+
249
+ # when, then
250
+ expect {
251
+ rootmodel.add_note({
252
+ :integration_id => "123key",
253
+ :text => "This is another note"
254
+ })
255
+ }.to raise_error(GoImport::AlreadyAddedError)
256
+ rootmodel.notes.length.should eq 1
257
+ rootmodel.find_note_by_integration_id("123key").text.should eq "This is a note"
258
+ end
259
+
260
+ it "Will find a person by integration id" do
261
+ # given
262
+ organization = GoImport::Organization.new
263
+ organization.name = "Hubba Bubba"
264
+ organization.add_employee({
265
+ :integration_id => "123",
266
+ :first_name => "Billy",
267
+ :last_name => "Bob"
268
+ })
269
+
270
+ rootmodel.add_organization(organization)
271
+
272
+ # when
273
+ found_person = rootmodel.find_person_by_integration_id("123")
274
+
275
+ # then
276
+ found_person.integration_id.should eq "123"
277
+ found_person.first_name.should eq "Billy"
278
+ found_person.last_name.should eq "Bob"
279
+ end
280
+
281
+ it "Will find a person by integration id from an organization with many employees" do
282
+ # given
283
+ organization = GoImport::Organization.new
284
+ organization.name = "Hubba Bubba"
285
+ organization.add_employee({
286
+ :integration_id => "123",
287
+ :first_name => "Billy",
288
+ :last_name => "Bob"
289
+ })
290
+ organization.add_employee({
291
+ :integration_id => "456",
292
+ :first_name => "Vincent",
293
+ :last_name => "Vega"
294
+ })
295
+
296
+ rootmodel.add_organization(organization)
297
+
298
+ # when
299
+ found_person = rootmodel.find_person_by_integration_id("123")
300
+
301
+ # then
302
+ found_person.integration_id.should eq "123"
303
+ found_person.first_name.should eq "Billy"
304
+ found_person.last_name.should eq "Bob"
305
+ end
306
+
307
+ it "will ignore empty integration ids during sanity check" do
308
+ org1 = GoImport::Organization.new
309
+ org1.name = "company 1"
310
+ rootmodel.organizations.push org1
311
+
312
+ org2 = GoImport::Organization.new
313
+ org2.name = "company 2"
314
+ rootmodel.organizations.push org2
315
+
316
+ rootmodel.sanity_check.should eq ""
317
+ end
318
+
319
+ it "will report when the same integration id is used during sanity check" do
320
+ org1 = GoImport::Organization.new
321
+ org1.integration_id = "1"
322
+ org1.name = "company 1"
323
+ rootmodel.organizations.push org1
324
+
325
+ org2 = GoImport::Organization.new
326
+ org2.integration_id = "1"
327
+ org2.name = "company 2"
328
+ rootmodel.organizations.push org2
329
+
330
+ rootmodel.sanity_check.should eq "Duplicate organization integration_id: 1."
331
+ end
332
+
333
+ it "will report when the same integrationid on person is used during sanity check" do
334
+ org1 = GoImport::Organization.new
335
+ org1.integration_id = "1"
336
+ org1.name = "company 1"
337
+ person1 = GoImport::Person.new
338
+ person1.integration_id = '1'
339
+ org1.add_employee person1
340
+
341
+ rootmodel.organizations.push org1
342
+
343
+ org2 = GoImport::Organization.new
344
+ org2.integration_id = "2"
345
+ org2.name = "company 2"
346
+ person2 = GoImport::Person.new
347
+ person2.integration_id = '1'
348
+ org2.add_employee person2
349
+ rootmodel.organizations.push org2
350
+
351
+ rootmodel.sanity_check.should eq "Duplicate person integration_id: 1."
352
+ end
353
+
354
+ it "will report when two links has the same integration id during sanity check" do
355
+ # given
356
+ link1 = GoImport::Link.new
357
+ link1.integration_id = "1"
358
+
359
+ link2 = GoImport::Link.new
360
+ link2.integration_id = "2"
361
+
362
+ rootmodel.add_link link1
363
+ rootmodel.add_link link2
364
+
365
+ # when
366
+ link2.integration_id = "1"
367
+
368
+ # then
369
+ rootmodel.sanity_check.should eq "Duplicate link integration_id: 1."
370
+ end
371
+ end
@@ -0,0 +1,30 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ #require File.expand_path("../../config/environment", __FILE__)
3
+ #require 'rspec/autorun'
4
+
5
+ # Requires supporting ruby files with custom matchers and macros, etc,
6
+ # in spec/support/ and its subdirectories.
7
+ Dir[File.join(File.dirname(File.absolute_path(__FILE__)),"support/**/*.rb")].each { |f| require f }
8
+
9
+ RSpec.configure do |config|
10
+ # ## Mock Framework
11
+ #
12
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
13
+ #
14
+ # config.mock_with :mocha
15
+ # config.mock_with :flexmock
16
+ # config.mock_with :rr
17
+
18
+ # Run specs in random order to surface order dependencies. If you find an
19
+ # order dependency and want to debug it, you can fix the order by providing
20
+ # the seed, which is printed after each run.
21
+ # --seed 1234
22
+ config.order = "random"
23
+
24
+ # Allow both should and expect syntax
25
+ # http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
26
+ config.expect_with :rspec do |c|
27
+ c.syntax = [:should, :expect]
28
+ end
29
+ end
30
+
@@ -0,0 +1,12 @@
1
+ require 'fileutils'
2
+ require 'tmpdir'
3
+
4
+ describe 'Templating' do
5
+ let(:templating) { GoImport::Templating.new(File.expand_path("../templates", File.dirname(__FILE__))) }
6
+
7
+ describe 'list' do
8
+ it 'can find some templates' do
9
+ templating.list().length.should > 0
10
+ end
11
+ end
12
+ end