openc_bot 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.travis.yml +8 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +253 -0
- data/Rakefile +14 -0
- data/bin/openc_bot +13 -0
- data/create_bot.sh +30 -0
- data/create_company_bot.sh +16 -0
- data/create_simple_licence_bot.sh +31 -0
- data/db/.gitkeep +0 -0
- data/examples/basic/.gitignore +3 -0
- data/examples/basic/Gemfile +7 -0
- data/examples/basic/config.yml +21 -0
- data/examples/basic/lib/basic.rb +88 -0
- data/examples/basic_with_proxy/Gemfile +7 -0
- data/examples/basic_with_proxy/config.yml +21 -0
- data/examples/basic_with_proxy/lib/basic_with_proxy.rb +103 -0
- data/examples/bot_with_simple_iterator/Gemfile +6 -0
- data/examples/bot_with_simple_iterator/config.yml +21 -0
- data/examples/bot_with_simple_iterator/lib/bot_with_simple_iterator.rb +112 -0
- data/examples/company_fetchers/basic.rb +49 -0
- data/lib/monkey_patches/mechanize.rb +53 -0
- data/lib/openc_bot.rb +89 -0
- data/lib/openc_bot/bot_data_validator.rb +18 -0
- data/lib/openc_bot/company_fetcher_bot.rb +40 -0
- data/lib/openc_bot/exceptions.rb +17 -0
- data/lib/openc_bot/helpers/_csv.rb +10 -0
- data/lib/openc_bot/helpers/alpha_search.rb +73 -0
- data/lib/openc_bot/helpers/dates.rb +33 -0
- data/lib/openc_bot/helpers/html.rb +8 -0
- data/lib/openc_bot/helpers/incremental_search.rb +106 -0
- data/lib/openc_bot/helpers/register_methods.rb +205 -0
- data/lib/openc_bot/helpers/text.rb +18 -0
- data/lib/openc_bot/incrementers.rb +2 -0
- data/lib/openc_bot/incrementers/base.rb +214 -0
- data/lib/openc_bot/incrementers/common.rb +47 -0
- data/lib/openc_bot/tasks.rb +385 -0
- data/lib/openc_bot/templates/README.md +35 -0
- data/lib/openc_bot/templates/bin/export_data +28 -0
- data/lib/openc_bot/templates/bin/fetch_data +23 -0
- data/lib/openc_bot/templates/bin/verify_data +1 -0
- data/lib/openc_bot/templates/config.yml +21 -0
- data/lib/openc_bot/templates/lib/bot.rb +43 -0
- data/lib/openc_bot/templates/lib/company_fetcher_bot.rb +95 -0
- data/lib/openc_bot/templates/lib/simple_bot.rb +67 -0
- data/lib/openc_bot/templates/spec/bot_spec.rb +11 -0
- data/lib/openc_bot/templates/spec/simple_bot_spec.rb +11 -0
- data/lib/openc_bot/templates/spec/spec_helper.rb +13 -0
- data/lib/openc_bot/version.rb +3 -0
- data/lib/simple_openc_bot.rb +289 -0
- data/openc_bot.gemspec +35 -0
- data/schemas/company-schema.json +112 -0
- data/schemas/includes/address.json +23 -0
- data/schemas/includes/base-statement.json +27 -0
- data/schemas/includes/company.json +14 -0
- data/schemas/includes/filing.json +20 -0
- data/schemas/includes/license-data.json +27 -0
- data/schemas/includes/officer.json +14 -0
- data/schemas/includes/previous_name.json +11 -0
- data/schemas/includes/share-parcel-data.json +67 -0
- data/schemas/includes/share-parcel.json +60 -0
- data/schemas/includes/subsidiary-relationship-data.json +52 -0
- data/schemas/includes/total-shares.json +10 -0
- data/schemas/licence-schema.json +21 -0
- data/schemas/share-parcel-schema.json +21 -0
- data/schemas/subsidiary-relationship-schema.json +19 -0
- data/spec/dummy_classes/foo_bot.rb +4 -0
- data/spec/lib/bot_data_validator_spec.rb +69 -0
- data/spec/lib/company_fetcher_bot_spec.rb +93 -0
- data/spec/lib/exceptions_spec.rb +25 -0
- data/spec/lib/helpers/alpha_search_spec.rb +173 -0
- data/spec/lib/helpers/dates_spec.rb +65 -0
- data/spec/lib/helpers/incremental_search_spec.rb +471 -0
- data/spec/lib/helpers/register_methods_spec.rb +558 -0
- data/spec/lib/helpers/text_spec.rb +50 -0
- data/spec/lib/openc_bot/db/.gitkeep +0 -0
- data/spec/lib/openc_bot/incrementers/common_spec.rb +83 -0
- data/spec/lib/openc_bot_spec.rb +116 -0
- data/spec/schemas/company-schema_spec.rb +676 -0
- data/spec/simple_openc_bot_spec.rb +302 -0
- data/spec/spec_helper.rb +19 -0
- metadata +300 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative '../../spec_helper'
|
3
|
+
require 'openc_bot/helpers/text'
|
4
|
+
|
5
|
+
describe OpencBot::Helpers::Text do
|
6
|
+
describe "#normalise_utf8_spaces" do
|
7
|
+
it "should convert UTF-8 spaces to normal spaces" do
|
8
|
+
raw_and_normalised_text = {
|
9
|
+
"Hello World" => "Hello World",
|
10
|
+
'' => '',
|
11
|
+
nil => nil,
|
12
|
+
" \xC2\xA0\xC2\xA0 Mr Fred Flintstone \xC2\xA0" => ' Mr Fred Flintstone ',
|
13
|
+
"AVTOPREVOZNIŠTVO - PREVOZ BLAGA ROBERT FLORJANČIČ S.P." => "AVTOPREVOZNIŠTVO - PREVOZ BLAGA ROBERT FLORJANČIČ S.P."
|
14
|
+
}
|
15
|
+
raw_and_normalised_text.each do |raw_text, normalised_text|
|
16
|
+
OpencBot::Helpers::Text.normalise_utf8_spaces(raw_text).should == normalised_text
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#strip_all_spaces" do
|
22
|
+
it "should strip all spaces from text" do
|
23
|
+
OpencBot::Helpers::Text.strip_all_spaces(" \n \xC2\xA0\xC2\xA0 Mr Fred Flintstone\n ").should == 'Mr Fred Flintstone'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not strip UTF8 chars that aren't spaces" do
|
27
|
+
OpencBot::Helpers::Text.strip_all_spaces(" \xC3\x8Dan Flintstone\n ").should == 'Ían Flintstone'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should replace UTF8 space with normal space" do
|
31
|
+
OpencBot::Helpers::Text.strip_all_spaces(" Mr\xC2\xA0Fred Flintstone\n ").should == 'Mr Fred Flintstone'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not mess with other UTF8 characters" do
|
35
|
+
utf8_name = "AVTOPREVOZNIŠTVO - PREVOZ BLAGA ROBERT FLORJANČIČ S.P."
|
36
|
+
OpencBot::Helpers::Text.strip_all_spaces(utf8_name).should == utf8_name
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return nil when nil given" do
|
40
|
+
OpencBot::Helpers::Text.strip_all_spaces(nil).should be_nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should replace multiple spaces with single space" do
|
44
|
+
OpencBot::Helpers::Text.strip_all_spaces(" Mr\xC2\xA0Fred Percy Flintstone\n ").should == 'Mr Fred Percy Flintstone'
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
File without changes
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative '../../../spec_helper'
|
3
|
+
require 'openc_bot'
|
4
|
+
require 'openc_bot/incrementers'
|
5
|
+
|
6
|
+
describe OpencBot::ManualIncrementer do
|
7
|
+
before do
|
8
|
+
@app_path = File.expand_path(File.join(File.dirname(__FILE__), "../../.."))
|
9
|
+
@incrementer = OpencBot::ManualIncrementer.new(:manual_incrementer, :fields => [:url], :app_path => @app_path, :show_progress => false)
|
10
|
+
@incrementer.sqlite_magic_connection.execute("DELETE FROM items")
|
11
|
+
@incrementer.reset_current
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
@incrementer.sqlite_magic_connection.execute("DROP TABLE items")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return same stuff as saved, plus an id" do
|
19
|
+
hashes = [
|
20
|
+
{"name" => "tony", "address" => "number 0", "url" => "http://example.com/tony"},
|
21
|
+
{"name" => "jude", "address" => "number 1", "url" => "http://example.com/jude"},
|
22
|
+
{"name" => "brig", "address" => "number 2", "url" => "http://example.com/brig"}
|
23
|
+
]
|
24
|
+
hashes.each do |h|
|
25
|
+
@incrementer.add_row(h)
|
26
|
+
end
|
27
|
+
@incrementer.enum.each.with_index(1) do |row, i|
|
28
|
+
# id assignment in sqlite is 1 indexed, not 0
|
29
|
+
row.should == hashes[i - 1].merge("_id" => i)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should resume from where left off" do
|
34
|
+
hashes = [
|
35
|
+
{"name" => "tony", "address" => "number 1", "url" => "http://example.com/tony"},
|
36
|
+
{"name" => "jude", "address" => "number 2", "url" => "http://example.com/jude"},
|
37
|
+
{"name" => "brig", "address" => "number 3", "url" => "http://example.com/brig"}
|
38
|
+
]
|
39
|
+
hashes.each do |h|
|
40
|
+
@incrementer.add_row(h)
|
41
|
+
end
|
42
|
+
counter = @incrementer.enum
|
43
|
+
counter.next.should == hashes[0].merge("_id" => 1)
|
44
|
+
counter.next.should == hashes[1].merge("_id" => 2)
|
45
|
+
|
46
|
+
@new_incrementer = OpencBot::ManualIncrementer.new(:manual_incrementer, :app_path => @app_path, :fields => [:url])
|
47
|
+
# TODO: effectively performs id >= current_row['_id'] which results
|
48
|
+
# in the same row being run twice across the two separate runs.
|
49
|
+
# Is this desired behaviour?
|
50
|
+
@new_incrementer.resumable.next.should == hashes[1].merge("_id" => 2)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should be relatively fast to save" do
|
54
|
+
hashes = []
|
55
|
+
(0...2000).each do |n|
|
56
|
+
hashes << {'number' => n}
|
57
|
+
end
|
58
|
+
hashes.each do |h|
|
59
|
+
@incrementer.add_row(h)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should be relatively fast to skip" do
|
64
|
+
hashes = []
|
65
|
+
(0...2000).each do |n|
|
66
|
+
hashes << {'number' => n}
|
67
|
+
end
|
68
|
+
hashes.each do |h|
|
69
|
+
@incrementer.add_row(h)
|
70
|
+
end
|
71
|
+
counter = @incrementer.enum
|
72
|
+
start_time = Time.now
|
73
|
+
1000.times do
|
74
|
+
counter.next
|
75
|
+
end
|
76
|
+
end_time = Time.now
|
77
|
+
@new_incrementer = OpencBot::ManualIncrementer.new(:manual_incrementer, :app_path => @app_path, :fields => [:url])
|
78
|
+
# TODO: effectively performs id >= current_row['_id'] which results
|
79
|
+
# in the same row being run twice across the two separate runs.
|
80
|
+
# Is this desired behaviour?
|
81
|
+
@new_incrementer.resumable.next["number"].should == 999
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative '../spec_helper'
|
3
|
+
require 'openc_bot'
|
4
|
+
require_relative '../dummy_classes/foo_bot'
|
5
|
+
|
6
|
+
describe "A module that extends OpencBot" do
|
7
|
+
|
8
|
+
before do
|
9
|
+
@dummy_connection = double('database_connection')
|
10
|
+
FooBot.stub(:sqlite_magic_connection).and_return(@dummy_connection)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should include ScraperWiki methods" do
|
14
|
+
FooBot.should respond_to(:save_sqlite)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should define OpencBotError exception as subclass of StandardError" do
|
18
|
+
OpencBot::OpencBotError.superclass.should be StandardError
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should define DatabaseError exception as subclass of OpencBotError" do
|
22
|
+
OpencBot::DatabaseError.superclass.should be OpencBot::OpencBotError
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should define InvalidDataError exception as subclass of OpencBotError" do
|
26
|
+
OpencBot::InvalidDataError.superclass.should be OpencBot::OpencBotError
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#insert_or_update' do
|
30
|
+
before do
|
31
|
+
@datum = {:foo => 'bar', :foo2 => 'bar2', :foo3 => 'bar3', :foo4 => 'bar4'}
|
32
|
+
@unique_keys = [:foo2,:foo3]
|
33
|
+
@expected_query = "INSERT INTO foo_table (foo,foo2,foo3,foo4) VALUES (:foo,:foo2,:foo3,:foo4)"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should delegate to connection" do
|
37
|
+
@dummy_connection.should_receive(:insert_or_update).with(@unique_keys, @datum, 'foo_table')
|
38
|
+
FooBot.insert_or_update(@unique_keys, @datum, 'foo_table')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should use ocdata table by default" do
|
42
|
+
@dummy_connection.should_receive(:insert_or_update).with(@unique_keys, @datum, 'ocdata')
|
43
|
+
FooBot.insert_or_update(@unique_keys, @datum)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#unlock_database' do
|
48
|
+
it "should start and end transaction on database" do
|
49
|
+
@dummy_connection.should_receive(:execute).with('BEGIN TRANSACTION; END;')
|
50
|
+
FooBot.unlock_database
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#verbose?' do
|
55
|
+
it 'should return false if ENV["VERBOSE"] not set' do
|
56
|
+
FooBot.verbose?.should be_false
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should return false if ENV["VERBOSE"] set' do
|
60
|
+
ENV["VERBOSE"] = 'true'
|
61
|
+
FooBot.verbose?.should be_true
|
62
|
+
ENV["VERBOSE"] = nil # reset
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#save_run_report' do
|
67
|
+
|
68
|
+
it 'should save_data in ocrunreports table' do
|
69
|
+
FooBot.should_receive(:save_data).with(anything, anything, :ocrunreports)
|
70
|
+
FooBot.save_run_report(:foo => 'bar')
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should convert run data into JSON' do
|
74
|
+
dummy_time = Time.now
|
75
|
+
Time.stub(:now).and_return(dummy_time)
|
76
|
+
expected_run_report = ({ :foo => 'bar' }).to_json
|
77
|
+
FooBot.should_receive(:save_data).with(anything, { :report => expected_run_report, :run_at => dummy_time.to_s }, anything)
|
78
|
+
FooBot.save_run_report(:foo => 'bar')
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should use timestamp as unique key' do
|
82
|
+
FooBot.should_receive(:save_data).with([:run_at], anything, anything)
|
83
|
+
FooBot.save_run_report(:foo => 'bar')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "normalise_utf8_spaces private method" do
|
88
|
+
it "should convert UTF-8 spaces to normal spaces" do
|
89
|
+
raw_and_normalised_text = {
|
90
|
+
"Hello World" => "Hello World",
|
91
|
+
'' => '',
|
92
|
+
nil => nil,
|
93
|
+
" \xC2\xA0\xC2\xA0 Mr Fred Flintstone \xC2\xA0" => ' Mr Fred Flintstone ',
|
94
|
+
}
|
95
|
+
raw_and_normalised_text.each do |raw_text, normalised_text|
|
96
|
+
FooBot.send(:normalise_utf8_spaces, raw_text).should == normalised_text
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#sqlite_magic_connection" do
|
102
|
+
it "should override default ScraperWiki#sqlite_magic_connection to use module name and adjacent db directory" do
|
103
|
+
FooBot.unstub(:sqlite_magic_connection)
|
104
|
+
expected_db_loc = File.expand_path(File.join(File.dirname(__FILE__),'..','db','foobot.db'))
|
105
|
+
SqliteMagic::Connection.should_receive(:new).with(expected_db_loc).and_return(@dummy_sqlite_magic_connection)
|
106
|
+
FooBot.sqlite_magic_connection
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#root_directory" do
|
111
|
+
it "should return directory one up from that containing module" do
|
112
|
+
FooBot.root_directory.should == File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
@@ -0,0 +1,676 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'json-schema'
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
require 'debugger'
|
5
|
+
|
6
|
+
describe 'company-schema' do
|
7
|
+
before do
|
8
|
+
@schema = File.join(File.dirname(__FILE__),'..','..','schemas','company-schema.json')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should validate simple company" do
|
12
|
+
valid_company_params =
|
13
|
+
[
|
14
|
+
{ :name => 'Foo Inc',
|
15
|
+
:company_number => '12345',
|
16
|
+
:jurisdiction_code => 'ie'
|
17
|
+
},
|
18
|
+
{ :name => 'Foo Inc',
|
19
|
+
:company_number => '12345',
|
20
|
+
:jurisdiction_code => 'us_de',
|
21
|
+
:registered_address => '32 Foo St, Footown,'
|
22
|
+
}
|
23
|
+
]
|
24
|
+
valid_company_params.each do |valid_params|
|
25
|
+
errors = validate_datum_and_return_errors(valid_params)
|
26
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should validate complex company" do
|
31
|
+
valid_company_params =
|
32
|
+
{ :name => 'Foo Inc',
|
33
|
+
:company_number => '12345',
|
34
|
+
:jurisdiction_code => 'us_de',
|
35
|
+
:incorporation_date => '2010-10-20',
|
36
|
+
:dissolution_date => '2012-01-12'
|
37
|
+
}
|
38
|
+
errors = validate_datum_and_return_errors(valid_company_params)
|
39
|
+
errors.should be_empty
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not validate invalid company" do
|
43
|
+
invalid_company_params =
|
44
|
+
[
|
45
|
+
{ :name => 'Foo Inc',
|
46
|
+
:jurisdiction_code => 'ie'
|
47
|
+
},
|
48
|
+
{ :name => 'Foo Inc',
|
49
|
+
:jurisdiction_code => 'usa_de',
|
50
|
+
:company_number => '12345'
|
51
|
+
},
|
52
|
+
{ :name => 'Bar',
|
53
|
+
:jurisdiction_code => 'us_de',
|
54
|
+
:company_number => ''
|
55
|
+
},
|
56
|
+
{ :name => 'Foo Inc',
|
57
|
+
:jurisdiction_code => 'a',
|
58
|
+
:company_number => '12345'
|
59
|
+
},
|
60
|
+
{ :name => '',
|
61
|
+
:jurisdiction_code => 'us_de',
|
62
|
+
:company_number => '12345'
|
63
|
+
},
|
64
|
+
{ :name => 'Foo Inc',
|
65
|
+
:jurisdiction_code => 'us_de',
|
66
|
+
:company_number => '12345',
|
67
|
+
:foo => 'bar'
|
68
|
+
}
|
69
|
+
]
|
70
|
+
invalid_company_params.each do |invalid_params|
|
71
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
72
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "and company has registered_address" do
|
77
|
+
it "should be valid if it is a string" do
|
78
|
+
valid_company_params =
|
79
|
+
{ :name => 'Foo Inc',
|
80
|
+
:company_number => '12345',
|
81
|
+
:jurisdiction_code => 'us_de',
|
82
|
+
:registered_address => '32 Foo St, Footown,'
|
83
|
+
}
|
84
|
+
errors = validate_datum_and_return_errors(valid_company_params)
|
85
|
+
errors.should be_empty
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should be valid if it is nil" do
|
89
|
+
valid_company_params =
|
90
|
+
{ :name => 'Foo Inc',
|
91
|
+
:company_number => '12345',
|
92
|
+
:jurisdiction_code => 'us_de',
|
93
|
+
:registered_address => nil
|
94
|
+
}
|
95
|
+
errors = validate_datum_and_return_errors(valid_company_params)
|
96
|
+
errors.should be_empty
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should be valid if it is a valid address object" do
|
100
|
+
valid_company_params =
|
101
|
+
[
|
102
|
+
{ :name => 'Foo Inc',
|
103
|
+
:company_number => '12345',
|
104
|
+
:jurisdiction_code => 'us_de',
|
105
|
+
:registered_address => { :street_address => '32 Foo St', :locality => 'Footown', :region => 'Fooshire', :postal_code => 'FO1 2BA' }
|
106
|
+
},
|
107
|
+
{ :name => 'Foo Inc',
|
108
|
+
:company_number => '12345',
|
109
|
+
:jurisdiction_code => 'us_de',
|
110
|
+
:registered_address => { :street_address => '32 Foo St' }
|
111
|
+
},
|
112
|
+
{ :name => 'Foo Inc',
|
113
|
+
:company_number => '12345',
|
114
|
+
:jurisdiction_code => 'us_de',
|
115
|
+
:registered_address => { :postal_code => 'FO1 2BA' }
|
116
|
+
}
|
117
|
+
]
|
118
|
+
valid_company_params.each do |valid_params|
|
119
|
+
errors = validate_datum_and_return_errors(valid_params)
|
120
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should not be valid if it is not a valid address object" do
|
125
|
+
invalid_company_params =
|
126
|
+
[
|
127
|
+
{ :name => 'Foo Inc',
|
128
|
+
:company_number => '12345',
|
129
|
+
:jurisdiction_code => 'ie',
|
130
|
+
:registered_address => []
|
131
|
+
},
|
132
|
+
{ :name => 'Foo Inc',
|
133
|
+
:company_number => '12345',
|
134
|
+
:jurisdiction_code => 'ie',
|
135
|
+
:registered_address => ''
|
136
|
+
},
|
137
|
+
{ :name => 'Foo Inc',
|
138
|
+
:company_number => '12345',
|
139
|
+
:jurisdiction_code => 'ie',
|
140
|
+
:registered_address => {:country => 'Germany'}
|
141
|
+
},
|
142
|
+
# { :name => 'Foo Inc',
|
143
|
+
# :company_number => '12345',
|
144
|
+
# :jurisdiction_code => 'us_de',
|
145
|
+
# :registered_address => {:country => 'Germany'}
|
146
|
+
# }
|
147
|
+
]
|
148
|
+
invalid_company_params.each do |invalid_params|
|
149
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
150
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
context "and company has previous names" do
|
156
|
+
it "should validate valid previous names data" do
|
157
|
+
valid_company_params =
|
158
|
+
[
|
159
|
+
{ :name => 'Foo Inc',
|
160
|
+
:company_number => '12345',
|
161
|
+
:jurisdiction_code => 'ie',
|
162
|
+
:previous_names => [{:company_name => 'FooBar Inc'},
|
163
|
+
{:company_name => 'FooBaz', :con_date => '2012-07-22'},
|
164
|
+
{:company_name => 'FooBaz', :con_date => '2012-07-22', :start_date => '2008-01-08'}]
|
165
|
+
},
|
166
|
+
{ :name => 'Foo Inc',
|
167
|
+
:company_number => '12345',
|
168
|
+
:jurisdiction_code => 'ie',
|
169
|
+
# allow empty arrays
|
170
|
+
:previous_names => []
|
171
|
+
}
|
172
|
+
]
|
173
|
+
valid_company_params.each do |valid_params|
|
174
|
+
errors = validate_datum_and_return_errors(valid_params)
|
175
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should not validated invalid previous names data" do
|
180
|
+
invalid_company_params =
|
181
|
+
[
|
182
|
+
{ :name => 'Foo Inc',
|
183
|
+
:company_number => '12345',
|
184
|
+
:jurisdiction_code => 'ie',
|
185
|
+
:previous_names => 'some name'
|
186
|
+
},
|
187
|
+
{ :name => 'Foo Inc',
|
188
|
+
:company_number => '12345',
|
189
|
+
:jurisdiction_code => 'ie',
|
190
|
+
:previous_names => ['some name']
|
191
|
+
},
|
192
|
+
{ :name => 'Foo Inc',
|
193
|
+
:company_number => '12345',
|
194
|
+
:jurisdiction_code => 'ie',
|
195
|
+
:previous_names => [{:name => 'Baz Inc'}]
|
196
|
+
},
|
197
|
+
{ :name => 'Foo Inc',
|
198
|
+
:company_number => '12345',
|
199
|
+
:jurisdiction_code => 'ie',
|
200
|
+
:previous_names => [{:company_name => ''}]
|
201
|
+
}
|
202
|
+
]
|
203
|
+
|
204
|
+
invalid_company_params.each do |invalid_params|
|
205
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
206
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context "and company has branch flag" do
|
213
|
+
it "should be valid if it is F or L or nil" do
|
214
|
+
valid_company_params =
|
215
|
+
[
|
216
|
+
{ :name => 'Foo Inc',
|
217
|
+
:company_number => '12345',
|
218
|
+
:jurisdiction_code => 'ie',
|
219
|
+
:branch => 'F'
|
220
|
+
},
|
221
|
+
{ :name => 'Foo Inc',
|
222
|
+
:company_number => '12345',
|
223
|
+
:jurisdiction_code => 'us_de',
|
224
|
+
:branch => 'L'
|
225
|
+
},
|
226
|
+
{ :name => 'Foo Inc',
|
227
|
+
:company_number => '12345',
|
228
|
+
:jurisdiction_code => 'us_de',
|
229
|
+
:branch => nil
|
230
|
+
}
|
231
|
+
]
|
232
|
+
valid_company_params.each do |valid_params|
|
233
|
+
errors = validate_datum_and_return_errors(valid_params)
|
234
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
|
239
|
+
it "should not be valid if it is not F or L" do
|
240
|
+
invalid_company_params =
|
241
|
+
[
|
242
|
+
{ :name => 'Foo Inc',
|
243
|
+
:company_number => '12345',
|
244
|
+
:jurisdiction_code => 'ie',
|
245
|
+
:branch => 'X'
|
246
|
+
},
|
247
|
+
{ :name => 'Foo Inc',
|
248
|
+
:company_number => '12345',
|
249
|
+
:jurisdiction_code => 'ie',
|
250
|
+
:branch => 'FOO'
|
251
|
+
},
|
252
|
+
{ :name => 'Foo Inc',
|
253
|
+
:company_number => '12345',
|
254
|
+
:jurisdiction_code => 'us_de',
|
255
|
+
:branch => ''
|
256
|
+
}
|
257
|
+
]
|
258
|
+
invalid_company_params.each do |invalid_params|
|
259
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
260
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
261
|
+
end
|
262
|
+
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
context "and company has all_attributes" do
|
267
|
+
it "should allow arbitrary elements to all_attributes hash" do
|
268
|
+
valid_company_params =
|
269
|
+
[
|
270
|
+
{ :name => 'Foo Inc',
|
271
|
+
:company_number => '12345',
|
272
|
+
:jurisdiction_code => 'ie',
|
273
|
+
:all_attributes => {:foo => 'bar', :some_number => 42, :an_array => [1,2,3]}
|
274
|
+
},
|
275
|
+
{ :name => 'Foo Inc',
|
276
|
+
:company_number => '12345',
|
277
|
+
:jurisdiction_code => 'us_de',
|
278
|
+
:all_attributes => {}
|
279
|
+
}
|
280
|
+
]
|
281
|
+
valid_company_params.each do |valid_params|
|
282
|
+
errors = validate_datum_and_return_errors(valid_params)
|
283
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should require jurisdiction_of_origin to be a non-empty string or null" do
|
288
|
+
valid_params_1 =
|
289
|
+
{ :name => 'Foo Inc',
|
290
|
+
:company_number => '12345',
|
291
|
+
:jurisdiction_code => 'ie',
|
292
|
+
:all_attributes => {:jurisdiction_of_origin => 'Some Country'}
|
293
|
+
}
|
294
|
+
valid_params_2 =
|
295
|
+
{ :name => 'Foo Inc',
|
296
|
+
:company_number => '12345',
|
297
|
+
:jurisdiction_code => 'ie',
|
298
|
+
:all_attributes => {:jurisdiction_of_origin => nil}
|
299
|
+
}
|
300
|
+
invalid_params_1 =
|
301
|
+
{ :name => 'Foo Inc',
|
302
|
+
:company_number => '12345',
|
303
|
+
:jurisdiction_code => 'ie',
|
304
|
+
:all_attributes => {:jurisdiction_of_origin => ''}
|
305
|
+
}
|
306
|
+
invalid_params_2 =
|
307
|
+
{ :name => 'Foo Inc',
|
308
|
+
:company_number => '12345',
|
309
|
+
:jurisdiction_code => 'ie',
|
310
|
+
:all_attributes => {:jurisdiction_of_origin => 43}
|
311
|
+
}
|
312
|
+
validate_datum_and_return_errors(valid_params_1).should be_empty
|
313
|
+
validate_datum_and_return_errors(valid_params_2).should be_empty
|
314
|
+
validate_datum_and_return_errors(invalid_params_1).should_not be_empty
|
315
|
+
validate_datum_and_return_errors(invalid_params_2).should_not be_empty
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should require home_company_number to be a non-empty string or null" do
|
319
|
+
require_all_attributes_attribute_to_be_string_or_nil(:home_company_number)
|
320
|
+
end
|
321
|
+
|
322
|
+
it "should require home_legal_name to be a non-empty string or null" do
|
323
|
+
require_all_attributes_attribute_to_be_string_or_nil(:home_legal_name)
|
324
|
+
end
|
325
|
+
|
326
|
+
it "should require registered_agent_name to be a string or nil" do
|
327
|
+
require_all_attributes_attribute_to_be_string_or_nil(:registered_agent_name)
|
328
|
+
end
|
329
|
+
|
330
|
+
it "should require registered_agent_address to be a string or nil" do
|
331
|
+
require_all_attributes_attribute_to_be_string_or_nil(:registered_agent_address)
|
332
|
+
end
|
333
|
+
|
334
|
+
it "should require number_of_employees to be an positive" do
|
335
|
+
valid_params =
|
336
|
+
{ :name => 'Foo Inc',
|
337
|
+
:company_number => '12345',
|
338
|
+
:jurisdiction_code => 'ie',
|
339
|
+
:all_attributes => {:number_of_employees => 42}
|
340
|
+
}
|
341
|
+
invalid_params_1 =
|
342
|
+
{ :name => 'Foo Inc',
|
343
|
+
:company_number => '12345',
|
344
|
+
:jurisdiction_code => 'ie',
|
345
|
+
:all_attributes => {:number_of_employees => ''}
|
346
|
+
}
|
347
|
+
invalid_params_2 =
|
348
|
+
{ :name => 'Foo Inc',
|
349
|
+
:company_number => '12345',
|
350
|
+
:jurisdiction_code => 'ie',
|
351
|
+
:all_attributes => {:number_of_employees => 'foo'}
|
352
|
+
}
|
353
|
+
invalid_params_3 =
|
354
|
+
{ :name => 'Foo Inc',
|
355
|
+
:company_number => '12345',
|
356
|
+
:jurisdiction_code => 'ie',
|
357
|
+
:all_attributes => {:number_of_employees => -1}
|
358
|
+
}
|
359
|
+
validate_datum_and_return_errors(valid_params).should be_empty
|
360
|
+
validate_datum_and_return_errors(invalid_params_1).should_not be_empty
|
361
|
+
validate_datum_and_return_errors(invalid_params_2).should_not be_empty
|
362
|
+
validate_datum_and_return_errors(invalid_params_3).should_not be_empty
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
context "and company has officers" do
|
367
|
+
it "should validate if officers are valid" do
|
368
|
+
valid_company_params =
|
369
|
+
[
|
370
|
+
{ :name => 'Foo Inc',
|
371
|
+
:company_number => '12345',
|
372
|
+
:jurisdiction_code => 'ie',
|
373
|
+
:officers => [{:name => 'Fred Flintstone'},
|
374
|
+
{:name => 'Barney Rubble', :position => 'Director'},
|
375
|
+
{:name => 'Barney Rubble', :other_attributes => {:foo => 'bar'}},
|
376
|
+
{:name => 'Pebbles', :start_date => '2010-12-22', :end_date => '2011-01-03'}]
|
377
|
+
},
|
378
|
+
{ :name => 'Foo Inc',
|
379
|
+
:company_number => '12345',
|
380
|
+
:jurisdiction_code => 'ie',
|
381
|
+
# allow empty arrays
|
382
|
+
:officers => []
|
383
|
+
}
|
384
|
+
]
|
385
|
+
valid_company_params.each do |valid_params|
|
386
|
+
errors = validate_datum_and_return_errors(valid_params)
|
387
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}"
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
it "should not validate if officers are not valid" do
|
392
|
+
invalid_company_params =
|
393
|
+
[
|
394
|
+
{ :name => 'Foo Inc',
|
395
|
+
:company_number => '12345',
|
396
|
+
:jurisdiction_code => 'ie',
|
397
|
+
:officers => [{:name => ''}]
|
398
|
+
},
|
399
|
+
{ :name => 'Foo Inc',
|
400
|
+
:company_number => '12345',
|
401
|
+
:jurisdiction_code => 'ie',
|
402
|
+
:officers => [{:position => 'Director'}]
|
403
|
+
},
|
404
|
+
{ :name => 'Foo Inc',
|
405
|
+
:company_number => '12345',
|
406
|
+
:jurisdiction_code => 'ie',
|
407
|
+
:officers => 'some body'
|
408
|
+
},
|
409
|
+
{ :name => 'Foo Inc',
|
410
|
+
:company_number => '12345',
|
411
|
+
:jurisdiction_code => 'ie',
|
412
|
+
:officers => [{:name => 'Fred', :other_attributes => 'non object'}]
|
413
|
+
},
|
414
|
+
{ :name => 'Foo Inc',
|
415
|
+
:company_number => '12345',
|
416
|
+
:jurisdiction_code => 'ie',
|
417
|
+
:officers => ['some body']
|
418
|
+
}
|
419
|
+
]
|
420
|
+
invalid_company_params.each do |invalid_params|
|
421
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
422
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
context "and company has filings" do
|
428
|
+
it "should validate if filings are valid" do
|
429
|
+
valid_company_params =
|
430
|
+
[
|
431
|
+
{ :name => 'Foo Inc',
|
432
|
+
:company_number => '12345',
|
433
|
+
:jurisdiction_code => 'ie',
|
434
|
+
:filings => [ {:title => 'Annual Report', :date => '2010-11-22'},
|
435
|
+
{:description => 'Another type of filing', :date => '2010-11-22'},
|
436
|
+
{:title => 'Annual Report', :description => 'Another type of filing', :uid => '12345A321', :date => '2010-11-22'},
|
437
|
+
{:filing_type_name => 'Some type', :date => '2010-11-22'}]
|
438
|
+
},
|
439
|
+
{ :name => 'Foo Inc',
|
440
|
+
:company_number => '12345',
|
441
|
+
:jurisdiction_code => 'ie',
|
442
|
+
:filings => [ {:title => 'Annual Report', :date => '2010-11-22', :other_attributes => {:foo => 'bar'}},
|
443
|
+
{:filing_type_name => 'Some type', :filing_type_code => '10-K', :date => '2010-11-22'}]
|
444
|
+
},
|
445
|
+
{ :name => 'Foo Inc',
|
446
|
+
:company_number => '12345',
|
447
|
+
:jurisdiction_code => 'ie',
|
448
|
+
# allow empty arrays
|
449
|
+
:filings => []
|
450
|
+
}
|
451
|
+
]
|
452
|
+
valid_company_params.each do |valid_params|
|
453
|
+
errors = validate_datum_and_return_errors(valid_params)
|
454
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
it "should not validate if filings are not valid" do
|
459
|
+
invalid_company_params =
|
460
|
+
[
|
461
|
+
{ :name => 'Foo Inc',
|
462
|
+
:company_number => '12345',
|
463
|
+
:jurisdiction_code => 'ie',
|
464
|
+
:filings => [ {:filing_type_name => 'Some type'}]
|
465
|
+
},
|
466
|
+
{ :name => 'Foo Inc',
|
467
|
+
:company_number => '12345',
|
468
|
+
:jurisdiction_code => 'ie',
|
469
|
+
:filings => 'foo filing'
|
470
|
+
},
|
471
|
+
{ :name => 'Foo Inc',
|
472
|
+
:company_number => '12345',
|
473
|
+
:jurisdiction_code => 'ie',
|
474
|
+
:filings => ['foo filing']
|
475
|
+
}
|
476
|
+
]
|
477
|
+
invalid_company_params.each do |invalid_params|
|
478
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
479
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
it "should require either title or description or filing_type_name to be present" do
|
484
|
+
valid_company_params =
|
485
|
+
[
|
486
|
+
{ :name => 'Foo Inc',
|
487
|
+
:company_number => '12345',
|
488
|
+
:jurisdiction_code => 'ie',
|
489
|
+
:filings => [ {:filing_type_name => 'Some type', :date => '2010-11-22'}]
|
490
|
+
},
|
491
|
+
{ :name => 'Foo Inc',
|
492
|
+
:company_number => '12345',
|
493
|
+
:jurisdiction_code => 'ie',
|
494
|
+
:filings => [ {:description => 'Some type', :date => '2010-11-22'}]
|
495
|
+
},
|
496
|
+
{ :name => 'Foo Inc',
|
497
|
+
:company_number => '12345',
|
498
|
+
:jurisdiction_code => 'ie',
|
499
|
+
:filings => [ {:title => 'Some type', :date => '2010-11-22'}]
|
500
|
+
}
|
501
|
+
]
|
502
|
+
invalid_params =
|
503
|
+
{ :name => 'Foo Inc',
|
504
|
+
:company_number => '12345',
|
505
|
+
:jurisdiction_code => 'ie',
|
506
|
+
:filings => [ {:uid => '12345', :date => '2010-11-22'}]
|
507
|
+
}
|
508
|
+
valid_company_params.each do |valid_params|
|
509
|
+
errors = validate_datum_and_return_errors(valid_params)
|
510
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
511
|
+
end
|
512
|
+
|
513
|
+
validate_datum_and_return_errors(invalid_params).should_not be_empty
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
context "and company has share_parcels" do
|
518
|
+
it "should validate if share_parcels are valid" do
|
519
|
+
valid_company_params =
|
520
|
+
[
|
521
|
+
{ :name => 'Foo Inc',
|
522
|
+
:company_number => '12345',
|
523
|
+
:jurisdiction_code => 'ie',
|
524
|
+
:share_parcels =>
|
525
|
+
[ { :number_of_shares => 1234,
|
526
|
+
:shareholders => [ {:name => 'Fred Flintstone'} ],
|
527
|
+
:confidence => 42
|
528
|
+
},
|
529
|
+
{ :percentage_of_shares => 23.5,
|
530
|
+
:shareholders => [ {:name => 'Barney Rubble'},
|
531
|
+
{:name => 'Wilma Flintstone'} ]
|
532
|
+
},
|
533
|
+
]
|
534
|
+
},
|
535
|
+
{ :name => 'Foo Inc',
|
536
|
+
:company_number => '12345',
|
537
|
+
:jurisdiction_code => 'ie',
|
538
|
+
# allow empty arrays
|
539
|
+
:share_parcels => []
|
540
|
+
}
|
541
|
+
]
|
542
|
+
valid_company_params.each do |valid_params|
|
543
|
+
errors = validate_datum_and_return_errors(valid_params)
|
544
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
545
|
+
end
|
546
|
+
end
|
547
|
+
|
548
|
+
it "should not validate if share_parcels are not valid" do
|
549
|
+
invalid_company_params =
|
550
|
+
[
|
551
|
+
{ :name => 'Foo Inc',
|
552
|
+
:company_number => '12345',
|
553
|
+
:jurisdiction_code => 'ie',
|
554
|
+
:share_parcels =>
|
555
|
+
[{ :percentage_of_shares => '23.5',
|
556
|
+
:shareholders => [ {:name => ''} ]}]
|
557
|
+
},
|
558
|
+
{ :name => 'Foo Inc',
|
559
|
+
:company_number => '12345',
|
560
|
+
:jurisdiction_code => 'ie',
|
561
|
+
:share_parcels =>
|
562
|
+
[{ :percentage_of_shares => '23.5',
|
563
|
+
:shareholders => []}]
|
564
|
+
},
|
565
|
+
{ :name => 'Foo Inc',
|
566
|
+
:company_number => '12345',
|
567
|
+
:jurisdiction_code => 'ie',
|
568
|
+
:share_parcels =>
|
569
|
+
[{ :percentage_of_shares => '23.5'}]
|
570
|
+
},
|
571
|
+
{ :name => 'Foo Inc',
|
572
|
+
:company_number => '12345',
|
573
|
+
:jurisdiction_code => 'ie',
|
574
|
+
:share_parcels => 'foo filing'
|
575
|
+
},
|
576
|
+
{ :name => 'Foo Inc',
|
577
|
+
:company_number => '12345',
|
578
|
+
:jurisdiction_code => 'ie',
|
579
|
+
:share_parcels => ['foo filing']
|
580
|
+
}
|
581
|
+
]
|
582
|
+
invalid_company_params.each do |invalid_params|
|
583
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
584
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
585
|
+
end
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
context "and company has total_shares" do
|
590
|
+
it "should validate if total_shares are valid" do
|
591
|
+
valid_company_params =
|
592
|
+
[
|
593
|
+
{ :name => 'Foo Inc',
|
594
|
+
:company_number => '12345',
|
595
|
+
:jurisdiction_code => 'ie',
|
596
|
+
:total_shares =>
|
597
|
+
{ :number => 123,
|
598
|
+
:share_class => 'Ordinary' }
|
599
|
+
},
|
600
|
+
{ :name => 'Foo Inc',
|
601
|
+
:company_number => '12345',
|
602
|
+
:jurisdiction_code => 'ie',
|
603
|
+
:total_shares =>
|
604
|
+
{ :number => 123 }
|
605
|
+
}
|
606
|
+
]
|
607
|
+
valid_company_params.each do |valid_params|
|
608
|
+
errors = validate_datum_and_return_errors(valid_params)
|
609
|
+
errors.should be_empty, "Valid params were not valid: #{valid_params}.Errors = #{errors}"
|
610
|
+
end
|
611
|
+
end
|
612
|
+
|
613
|
+
it "should not validate if share_parcels are not valid" do
|
614
|
+
invalid_company_params =
|
615
|
+
[
|
616
|
+
{ :name => 'Foo Inc',
|
617
|
+
:company_number => '12345',
|
618
|
+
:jurisdiction_code => 'ie',
|
619
|
+
:total_shares =>
|
620
|
+
{ :share_class => 'Ordinary' }
|
621
|
+
},
|
622
|
+
{ :name => 'Foo Inc',
|
623
|
+
:company_number => '12345',
|
624
|
+
:jurisdiction_code => 'ie',
|
625
|
+
:total_shares =>
|
626
|
+
{ :number => 123,
|
627
|
+
:share_class => '' }
|
628
|
+
},
|
629
|
+
{ :name => 'Foo Inc',
|
630
|
+
:company_number => '12345',
|
631
|
+
:jurisdiction_code => 'ie',
|
632
|
+
:total_shares => 'foo filing'
|
633
|
+
},
|
634
|
+
{ :name => 'Foo Inc',
|
635
|
+
:company_number => '12345',
|
636
|
+
:jurisdiction_code => 'ie',
|
637
|
+
:total_shares => ['foo filing']
|
638
|
+
}
|
639
|
+
]
|
640
|
+
invalid_company_params.each do |invalid_params|
|
641
|
+
errors = validate_datum_and_return_errors(invalid_params)
|
642
|
+
errors.should_not be_empty, "Invalid params were not invalid: #{invalid_params}"
|
643
|
+
end
|
644
|
+
end
|
645
|
+
end
|
646
|
+
|
647
|
+
def validate_datum_and_return_errors(record)
|
648
|
+
errors = JSON::Validator.fully_validate(
|
649
|
+
@schema,
|
650
|
+
record.to_json,
|
651
|
+
{:errors_as_objects => true})
|
652
|
+
end
|
653
|
+
|
654
|
+
def require_all_attributes_attribute_to_be_string_or_nil(attribute_name)
|
655
|
+
['Some String', nil].each do |val|
|
656
|
+
valid_params =
|
657
|
+
{ :name => 'Foo Inc',
|
658
|
+
:company_number => '12345',
|
659
|
+
:jurisdiction_code => 'ie',
|
660
|
+
:all_attributes => {attribute_name => val}
|
661
|
+
}
|
662
|
+
validate_datum_and_return_errors(valid_params).should be_empty, "Valid params were not validated: #{valid_params}"
|
663
|
+
end
|
664
|
+
|
665
|
+
['', 43].each do |val|
|
666
|
+
invalid_params =
|
667
|
+
{ :name => 'Foo Inc',
|
668
|
+
:company_number => '12345',
|
669
|
+
:jurisdiction_code => 'ie',
|
670
|
+
:all_attributes => {attribute_name => val}
|
671
|
+
}
|
672
|
+
validate_datum_and_return_errors(invalid_params).should_not be_empty, "Invalid params were validated: #{invalid_params}"
|
673
|
+
end
|
674
|
+
end
|
675
|
+
|
676
|
+
end
|