nne_client 0.0.1
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.
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +92 -0
- data/Rakefile +2 -0
- data/lib/nne_client/fetch.rb +22 -0
- data/lib/nne_client/query.rb +35 -0
- data/lib/nne_client/question.rb +36 -0
- data/lib/nne_client/record_types/finance.rb +43 -0
- data/lib/nne_client/record_types/ownership.rb +25 -0
- data/lib/nne_client/record_types/subsidiary.rb +25 -0
- data/lib/nne_client/record_types/trade.rb +21 -0
- data/lib/nne_client/request.rb +56 -0
- data/lib/nne_client/result.rb +171 -0
- data/lib/nne_client/result_attributes.rb +37 -0
- data/lib/nne_client/result_set.rb +43 -0
- data/lib/nne_client/search.rb +15 -0
- data/lib/nne_client/version.rb +3 -0
- data/lib/nne_client.rb +43 -0
- data/nne_client.gemspec +24 -0
- data/spec/finance_spec.rb +79 -0
- data/spec/ownership_spec.rb +34 -0
- data/spec/result_spec.rb +284 -0
- data/spec/search_spec.rb +78 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/subsidiary_spec.rb +36 -0
- data/spec/trade_spec.rb +21 -0
- data/spec/vcr_cassettes/result_additional_names_single.yml +706 -0
- data/spec/vcr_cassettes/result_extended_info.yml +705 -0
- data/spec/vcr_cassettes/result_extended_info_with_access_key.yml +705 -0
- data/spec/vcr_cassettes/result_fetching_basic_attributes.yml +705 -0
- data/spec/vcr_cassettes/result_fetching_ext_attributes_email_hash.yml +1407 -0
- data/spec/vcr_cassettes/result_fetching_missing_company.yml +706 -0
- data/spec/vcr_cassettes/result_multiple_finances.yml +1408 -0
- data/spec/vcr_cassettes/result_multiple_ownerships.yml +1409 -0
- data/spec/vcr_cassettes/result_multiple_trades.yml +1407 -0
- data/spec/vcr_cassettes/result_names.yml +705 -0
- data/spec/vcr_cassettes/result_names_empty.yml +706 -0
- data/spec/vcr_cassettes/result_no_finance.yml +1408 -0
- data/spec/vcr_cassettes/result_no_ownerships.yml +706 -0
- data/spec/vcr_cassettes/result_no_subsidiaries.yml +1409 -0
- data/spec/vcr_cassettes/result_single_finance.yml +1409 -0
- data/spec/vcr_cassettes/result_single_ownership.yml +1408 -0
- data/spec/vcr_cassettes/result_single_subsidiary.yml +1408 -0
- data/spec/vcr_cassettes/result_trades.yml +705 -0
- data/spec/vcr_cassettes/search_for_noise.yml +706 -0
- data/spec/vcr_cassettes/search_lokale.yml +705 -0
- data/spec/vcr_cassettes/search_lokale_100.yml +705 -0
- data/spec/vcr_cassettes/search_lokalebasen.yml +706 -0
- data/spec/vcr_cassettes/search_lokalebasen_with_access_key.yml +706 -0
- metadata +234 -0
data/lib/nne_client.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'config_newton'
|
2
|
+
require 'savon'
|
3
|
+
require "nne_client/version"
|
4
|
+
require "nne_client/result_attributes"
|
5
|
+
require "nne_client/fetch"
|
6
|
+
require "nne_client/request"
|
7
|
+
require "nne_client/search"
|
8
|
+
require "nne_client/query"
|
9
|
+
require "nne_client/question"
|
10
|
+
require "nne_client/result"
|
11
|
+
require "nne_client/result_set"
|
12
|
+
require "nne_client/record_types/finance"
|
13
|
+
require "nne_client/record_types/ownership"
|
14
|
+
require "nne_client/record_types/subsidiary"
|
15
|
+
require "nne_client/record_types/trade"
|
16
|
+
|
17
|
+
HTTPI.adapter = :net_http
|
18
|
+
|
19
|
+
# Namespace for the library
|
20
|
+
module NNEClient
|
21
|
+
extend self
|
22
|
+
include ConfigNewton
|
23
|
+
|
24
|
+
class CompanyMissing < RuntimeError; end
|
25
|
+
|
26
|
+
config :access_key
|
27
|
+
|
28
|
+
# Where users start the interaction with the library.
|
29
|
+
#
|
30
|
+
# The query is hash with one or more of these keys:
|
31
|
+
#
|
32
|
+
# * :houseNo (string)
|
33
|
+
# * :name (string)
|
34
|
+
# * :nameStartsWith (boolean)
|
35
|
+
# * :street (string)
|
36
|
+
# * :zipCode (number)
|
37
|
+
# * :tdcId (number)
|
38
|
+
#
|
39
|
+
# @return [ResultSet] containing the results from the SOAP API
|
40
|
+
def search(query)
|
41
|
+
NNEClient::Search.new(query).result_set
|
42
|
+
end
|
43
|
+
end
|
data/nne_client.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
3
|
+
require 'nne_client/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.authors = ["Jacob Atzen"]
|
7
|
+
gem.email = ["jacob@incremental.dk"]
|
8
|
+
gem.description = %q{Client library for the Navne & Numre Erhverv SOAP service}
|
9
|
+
gem.summary = %q{A small library easing integration with NNE}
|
10
|
+
gem.homepage = ""
|
11
|
+
|
12
|
+
gem.files = `git ls-files`.split($\)
|
13
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
14
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
+
gem.name = "nne_client"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = NNEClient::VERSION
|
18
|
+
gem.add_dependency('savon', '~> 0.9.5')
|
19
|
+
gem.add_dependency('config_newton', '~> 0.1.1')
|
20
|
+
gem.add_development_dependency('vcr')
|
21
|
+
gem.add_development_dependency('fakeweb')
|
22
|
+
gem.add_development_dependency('rspec')
|
23
|
+
gem.add_development_dependency("equivalent-xml", "~> 0.2.9")
|
24
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NNEClient::Finance do
|
4
|
+
let(:hash) do
|
5
|
+
{
|
6
|
+
:contribution_ratio => "26.02",
|
7
|
+
:net_outcome => "132718.0",
|
8
|
+
:stock => "136101.0",
|
9
|
+
:assets => "1729700.0",
|
10
|
+
:gross_profit => "789841.0",
|
11
|
+
:return_on_assets => "13.13",
|
12
|
+
:"@xsi:type" => "ns0:Finance",
|
13
|
+
:credit_rating => {:"@xsi:type" => "xsd:string"},
|
14
|
+
:placings => "38837.0",
|
15
|
+
:trade_debitors => "23232.0",
|
16
|
+
:available_funds => "183991.0",
|
17
|
+
:income_before_income_tax => "188944.0",
|
18
|
+
:share_holders_funds_of_interest => "78.96",
|
19
|
+
:current_assets => "770605.0",
|
20
|
+
:profit => "130000.0",
|
21
|
+
:turnover => "3034952.0",
|
22
|
+
:available_funds_ratio => "74.48",
|
23
|
+
:link_pdf => Date.parse('2012-03-30'),
|
24
|
+
:shareholders_funds => "168073.0",
|
25
|
+
:depreciations => "-37525.0",
|
26
|
+
:profit_for_the_year => "132718.0",
|
27
|
+
:@id => "ID2",
|
28
|
+
:balance => "1729700.0",
|
29
|
+
:long_termed_liability => "488133.0",
|
30
|
+
:short_termed_liability => "1034657.0",
|
31
|
+
:fixed_assets => "959095.0",
|
32
|
+
:number_of_employees => "1222",
|
33
|
+
:profit_ratio => "7.48",
|
34
|
+
:capacity_ratio => "1.4",
|
35
|
+
:lots_and_sites => "162650.0",
|
36
|
+
:solvency_ratio => "9.72",
|
37
|
+
:accounting_date => Date.parse('2012-03-30'),
|
38
|
+
:fixed_cost => "562808.0",
|
39
|
+
:published_date => Date.parse('2012-03-30'),
|
40
|
+
:year => "2011"
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
subject { NNEClient::Finance.new(hash) }
|
45
|
+
|
46
|
+
its(:accounting_date) { should == hash[:accounting_date] }
|
47
|
+
its(:assets) { should == hash[:assets] }
|
48
|
+
its(:available_funds) { should == hash[:available_funds] }
|
49
|
+
its(:available_funds_ratio) { should == hash[:available_funds_ratio] }
|
50
|
+
its(:balance) { should == hash[:balance] }
|
51
|
+
its(:capacity_ratio) { should == hash[:capacity_ratio] }
|
52
|
+
its(:contribution_ratio) { should == hash[:contribution_ratio] }
|
53
|
+
its(:credit_rating) { should be_nil }
|
54
|
+
its(:current_assets) { should == hash[:current_assets] }
|
55
|
+
its(:depreciations) { should == hash[:depreciations] }
|
56
|
+
its(:fixed_assets) { should == hash[:fixed_assets] }
|
57
|
+
its(:fixed_cost) { should == hash[:fixed_cost] }
|
58
|
+
its(:gross_profit) { should == hash[:gross_profit] }
|
59
|
+
its(:income_before_income_tax) { should == hash[:income_before_income_tax] }
|
60
|
+
its(:link_pdf) { should == hash[:link_pdf] }
|
61
|
+
its(:long_termed_liability) { should == hash[:long_termed_liability] }
|
62
|
+
its(:lots_and_sites) { should == hash[:lots_and_sites] }
|
63
|
+
its(:net_outcome) { should == hash[:net_outcome] }
|
64
|
+
its(:number_of_employees) { should == hash[:number_of_employees] }
|
65
|
+
its(:placings) { should == hash[:placings] }
|
66
|
+
its(:profit) { should == hash[:profit] }
|
67
|
+
its(:profit_for_the_year) { should == hash[:profit_for_the_year] }
|
68
|
+
its(:profit_ratio) { should == hash[:profit_ratio] }
|
69
|
+
its(:published_date) { should == hash[:published_date] }
|
70
|
+
its(:return_on_assets) { should == hash[:return_on_assets] }
|
71
|
+
its(:share_holders_funds_of_interest) { should == hash[:share_holders_funds_of_interest] }
|
72
|
+
its(:shareholders_funds) { should == hash[:shareholders_funds] }
|
73
|
+
its(:short_termed_liability) { should == hash[:short_termed_liability] }
|
74
|
+
its(:solvency_ratio) { should == hash[:solvency_ratio] }
|
75
|
+
its(:stock) { should == hash[:stock] }
|
76
|
+
its(:trade_debitors) { should == hash[:trade_debitors] }
|
77
|
+
its(:turnover) { should == hash[:turnover] }
|
78
|
+
its(:year) { should == hash[:year] }
|
79
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NNEClient::Ownership do
|
4
|
+
let(:ownership_hash) do
|
5
|
+
{
|
6
|
+
:country => "Holland",
|
7
|
+
:"@xsi:type" => "ns0:Ownership",
|
8
|
+
:share => "100 ",
|
9
|
+
:tdc_id => "123",
|
10
|
+
:@id => "ID2",
|
11
|
+
:name => "Ingka Holding Scandinavia Bv"
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
subject { NNEClient::Ownership.new(ownership_hash) }
|
16
|
+
|
17
|
+
it { should eq NNEClient::Ownership.new(ownership_hash) }
|
18
|
+
its(:share) { should == '100' }
|
19
|
+
its(:name) { should == ownership_hash[:name] }
|
20
|
+
its(:country) { should == ownership_hash[:country] }
|
21
|
+
|
22
|
+
describe "#company" do
|
23
|
+
let(:result) { double(:result) }
|
24
|
+
|
25
|
+
it "knows how to fetch company information" do
|
26
|
+
NNEClient::Result.should_receive(:new).with(:tdc_id => '123') { result }
|
27
|
+
subject.company
|
28
|
+
end
|
29
|
+
it "knows how to fetch company information" do
|
30
|
+
NNEClient::Result.stub(:new) { result }
|
31
|
+
subject.company.should == result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/result_spec.rb
ADDED
@@ -0,0 +1,284 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NNEClient::Result do
|
4
|
+
|
5
|
+
let(:result_hash) do
|
6
|
+
{
|
7
|
+
:p_no => "1015150161",
|
8
|
+
:fax => {:"@xsi:type" => "xsd:string"},
|
9
|
+
:ad_protection => "0",
|
10
|
+
:tdc_id => "202541543",
|
11
|
+
:"@xsi:type" => "ns0:CompanyBasic",
|
12
|
+
:phone => "26256502",
|
13
|
+
:company_id => "4218680",
|
14
|
+
:official_name => "Incremental V/ Jacob Atzen",
|
15
|
+
:street => "Bygmestervej 47 3 tv",
|
16
|
+
:zip_code => "2400",
|
17
|
+
:company_type => "PL",
|
18
|
+
:@id => "ID4",
|
19
|
+
:cvr_no => "31999529",
|
20
|
+
:district => "København NV"
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { NNEClient::Result.new(result_hash) }
|
25
|
+
|
26
|
+
its(:cvr_no) { should == result_hash[:cvr_no] }
|
27
|
+
its(:p_no) { should == result_hash[:p_no] }
|
28
|
+
its(:district) { should == result_hash[:district] }
|
29
|
+
its(:official_name) { should == result_hash[:official_name] }
|
30
|
+
its(:phone) { should == result_hash[:phone] }
|
31
|
+
its(:street) { should == result_hash[:street] }
|
32
|
+
its(:zip_code) { should == result_hash[:zip_code] }
|
33
|
+
its(:ad_protection) { should == result_hash[:ad_protection] }
|
34
|
+
it { should == NNEClient::Result.new(:tdc_id => '202541543') }
|
35
|
+
|
36
|
+
it "is unique based on tdc_id" do
|
37
|
+
[
|
38
|
+
NNEClient::Result.new(:tdc_id => '202541543'),
|
39
|
+
subject
|
40
|
+
].uniq.size.should == 1
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns nil for a basic attribute that's a hash" do
|
44
|
+
result = NNEClient::Result.new(
|
45
|
+
result_hash.merge(:phone => {"@xsi:type" => 'xsd:string'})
|
46
|
+
)
|
47
|
+
result.phone.should be_nil
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns nil for an extended attribute that's a hash" do
|
51
|
+
soap_vcr('result_fetching_ext_attributes_email_hash') do
|
52
|
+
NNEClient.search(:tdcId => '101953776').first.email.should be_nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "raises CompanyMissing if tdc_id is unknown" do
|
57
|
+
soap_vcr('result_fetching_missing_company') do
|
58
|
+
expect {
|
59
|
+
NNEClient::Result.new(:tdc_id => '202177618').official_name
|
60
|
+
}.to raise_error(NNEClient::CompanyMissing)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'with only tdc_id' do
|
65
|
+
around(:each) do |example|
|
66
|
+
soap_vcr('result_fetching_basic_attributes') do
|
67
|
+
example.run
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
subject { NNEClient::Result.new(:tdc_id => '202541543') }
|
72
|
+
|
73
|
+
its(:cvr_no) { should == result_hash[:cvr_no] }
|
74
|
+
its(:p_no) { should == result_hash[:p_no] }
|
75
|
+
its(:district) { should == result_hash[:district] }
|
76
|
+
its(:official_name) { should == result_hash[:official_name] }
|
77
|
+
its(:phone) { should == result_hash[:phone] }
|
78
|
+
its(:street) { should == result_hash[:street] }
|
79
|
+
its(:zip_code) { should == result_hash[:zip_code] }
|
80
|
+
its(:ad_protection) { should == result_hash[:ad_protection] }
|
81
|
+
end
|
82
|
+
|
83
|
+
context "with extended info" do
|
84
|
+
context "with an access key" do
|
85
|
+
around(:each) do |example|
|
86
|
+
NNEClient.configure { |config| config.access_key = 'some key' }
|
87
|
+
soap_vcr('result_extended_info_with_access_key') do
|
88
|
+
example.run
|
89
|
+
end
|
90
|
+
NNEClient.configure { |config| config.access_key = nil }
|
91
|
+
end
|
92
|
+
|
93
|
+
its(:email) { should == 'jacob@incremental.dk' }
|
94
|
+
its(:homepage) { should be_nil }
|
95
|
+
its(:founded_year) { should == '2009' }
|
96
|
+
its(:number_of_employees) { should == '0' }
|
97
|
+
its(:tdf_name) { should == 'Incremental' }
|
98
|
+
its(:status_text) { should == 'Selskabet er i normal drift.' }
|
99
|
+
end
|
100
|
+
|
101
|
+
context "without an access key" do
|
102
|
+
around(:each) do |example|
|
103
|
+
soap_vcr('result_extended_info') do
|
104
|
+
example.run
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
its(:email) { should == 'jacob@incremental.dk' }
|
109
|
+
its(:homepage) { should be_nil }
|
110
|
+
its(:founded_year) { should == '2009' }
|
111
|
+
its(:number_of_employees) { should == '0' }
|
112
|
+
its(:tdf_name) { should == 'Incremental' }
|
113
|
+
its(:status_text) { should == 'Selskabet er i normal drift.' }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "with a single trade" do
|
118
|
+
around(:each) do |example|
|
119
|
+
soap_vcr('result_trades') do
|
120
|
+
example.run
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
its(:trades) {
|
125
|
+
should eq [
|
126
|
+
NNEClient::Trade.new(
|
127
|
+
:primary => true,
|
128
|
+
:trade => 'Konsulentbistand vedrørende informationsteknologi',
|
129
|
+
:trade_code => '620200'
|
130
|
+
)
|
131
|
+
]
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
135
|
+
context "with multiple trades" do
|
136
|
+
around(:each) do |example|
|
137
|
+
soap_vcr('result_multiple_trades') do
|
138
|
+
example.run
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
subject do NNEClient.search(:name => 'Dansk Supermarked').to_a[5] end
|
143
|
+
|
144
|
+
its(:trades) {
|
145
|
+
should include NNEClient::Trade.new(
|
146
|
+
:primary => true,
|
147
|
+
:trade => "Anden detailhandel fra ikke-specialiserede forretninger",
|
148
|
+
:trade_code => "471900"
|
149
|
+
)
|
150
|
+
}
|
151
|
+
|
152
|
+
its(:trades) {
|
153
|
+
should include NNEClient::Trade.new(
|
154
|
+
:primary => false,
|
155
|
+
:trade => "Discountforretninger",
|
156
|
+
:trade_code => "471130"
|
157
|
+
)
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
161
|
+
context "with no ownership information" do
|
162
|
+
around(:each) do |example|
|
163
|
+
soap_vcr('result_no_ownerships') do
|
164
|
+
example.run
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
subject { NNEClient::Result.new(result_hash) }
|
169
|
+
|
170
|
+
its(:ownerships) { should be_empty }
|
171
|
+
end
|
172
|
+
|
173
|
+
context "with single ownership" do
|
174
|
+
around(:each) do |example|
|
175
|
+
soap_vcr('result_single_ownership') do
|
176
|
+
example.run
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
subject { NNEClient.search(:name => 'Ikea').first }
|
181
|
+
|
182
|
+
its(:ownerships) {
|
183
|
+
should include NNEClient::Ownership.new(
|
184
|
+
:share => '100 ',
|
185
|
+
:name => 'Ingka Holding Scandinavia Bv',
|
186
|
+
:country => 'Holland'
|
187
|
+
)
|
188
|
+
}
|
189
|
+
end
|
190
|
+
|
191
|
+
context "with multiple ownership" do
|
192
|
+
around(:each) do |example|
|
193
|
+
soap_vcr('result_multiple_ownerships') do
|
194
|
+
example.run
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
subject { NNEClient.search(:tdcId => '100319964').first }
|
199
|
+
|
200
|
+
its(:ownerships) {
|
201
|
+
should include NNEClient::Ownership.new(
|
202
|
+
:share => '33 ',
|
203
|
+
:name => 'Henrik Harald Halberg',
|
204
|
+
:country => nil
|
205
|
+
)
|
206
|
+
}
|
207
|
+
end
|
208
|
+
|
209
|
+
context "with no subsidiaries" do
|
210
|
+
it "has no subsidiares" do
|
211
|
+
soap_vcr('result_no_subsidiaries') do
|
212
|
+
result = NNEClient.search(:tdcId => '100319964').first
|
213
|
+
result.subsidiaries.should be_empty
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
context "with a single subsidiary" do
|
219
|
+
it "returns the subsidiary" do
|
220
|
+
soap_vcr('result_single_subsidiary') do
|
221
|
+
NNEClient.search(:name => 'Ikea').first.subsidiaries.should eq [
|
222
|
+
NNEClient::Subsidiary.new(
|
223
|
+
:country => "Danmark",
|
224
|
+
:share => "100",
|
225
|
+
:name => "Ikea Ejendomme ApS"
|
226
|
+
)
|
227
|
+
]
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'with no finances' do
|
233
|
+
it "returns an empty array of finances" do
|
234
|
+
soap_vcr('result_no_finance') do
|
235
|
+
NNEClient.search(:name => 'Incremental').first.finances.should be_empty
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
context 'with a single finance record' do
|
241
|
+
it "has a finance record" do
|
242
|
+
soap_vcr('result_single_finance') do
|
243
|
+
records = NNEClient.search(:name => 'Etech').first.finances
|
244
|
+
records.map(&:year).should == ['2010']
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
context 'with multiple finance records' do
|
250
|
+
it "has several finance records" do
|
251
|
+
soap_vcr('result_multiple_finances') do
|
252
|
+
records = NNEClient.search(:name => 'Ikea').first.finances
|
253
|
+
records.map(&:year).should == ["2011", "2010", "2009", "2008", "2007"]
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
it "knows all names" do
|
259
|
+
soap_vcr('result_names') do
|
260
|
+
result = NNEClient::Result.new(:official_name => 'Name', :tdc_id => '100323228')
|
261
|
+
result.additional_names.should == [
|
262
|
+
"Tv Holbæk A/S",
|
263
|
+
"A/S Trykkeriet Nordvest",
|
264
|
+
"A/S Trykkeriet Nordvestsjælland",
|
265
|
+
"Nordvestsjællands Media Selskab A/S",
|
266
|
+
"Radio Holbæk A/S"
|
267
|
+
]
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
it "will convert additional_names to an array" do
|
272
|
+
soap_vcr('result_additional_names_single') do
|
273
|
+
result = NNEClient::Result.new(:tdc_id => '101952996')
|
274
|
+
result.additional_names.should == [ 'Eb Flytning ApS' ]
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
it "is an empty array if no additinal names present" do
|
279
|
+
soap_vcr('result_names_empty') do
|
280
|
+
result = NNEClient::Result.new(:official_name => 'Name', :tdc_id => '202541543')
|
281
|
+
result.additional_names.should == []
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
data/spec/search_spec.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'nne_client'
|
3
|
+
|
4
|
+
describe NNEClient::Search do
|
5
|
+
describe 'a search with a single match' do
|
6
|
+
it 'finds the company' do
|
7
|
+
soap_vcr('search_lokalebasen') do
|
8
|
+
NNEClient::Search.new(:name => 'Lokalebasen').result_set.first.official_name.should == 'Lokalebasen.DK A/S'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'a search with multiple matches' do
|
14
|
+
subject do
|
15
|
+
soap_vcr('search_lokale') do
|
16
|
+
NNEClient::Search.new(:name => 'Lokale').result_set
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'finds the company' do
|
21
|
+
subject.first.official_name.should == 'Andelsselskabet De Lokale Boliger'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'knows the number of matches' do
|
25
|
+
subject.total.should == 124
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'asking for more results' do
|
30
|
+
subject do
|
31
|
+
soap_vcr('search_lokale_100') do
|
32
|
+
NNEClient::Search.new(:name => 'Lokale', :hits_per_page => 100).result_set
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'finds the company' do
|
37
|
+
subject.first.official_name.should == 'Andelsselskabet De Lokale Boliger'
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'fetches 100 records' do
|
41
|
+
subject.count.should == 100
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "searching for something non existent" do
|
46
|
+
subject do
|
47
|
+
soap_vcr('search_for_noise') do
|
48
|
+
NNEClient::Search.new(:name => 'asdfasdfasdf').result_set
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'has a total of 0 results' do
|
53
|
+
subject.total.should == 0
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'fetches 0 records' do
|
57
|
+
subject.count.should == 0
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'can iterate' do
|
61
|
+
expect { |block|
|
62
|
+
subject.each(&block)
|
63
|
+
}.not_to yield_control
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'with an access key' do
|
68
|
+
before(:each) do
|
69
|
+
NNEClient.configure { |config| config.access_key = 'some key' }
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'finds the company' do
|
73
|
+
soap_vcr('search_lokalebasen_with_access_key') do
|
74
|
+
NNEClient::Search.new(:name => 'Lokalebasen').result_set.first.official_name.should == 'Lokalebasen.DK A/S'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'vcr'
|
3
|
+
require 'equivalent-xml'
|
4
|
+
require 'nne_client'
|
5
|
+
|
6
|
+
HTTPI.log = false
|
7
|
+
|
8
|
+
Savon.configure do |config|
|
9
|
+
config.log = false # disable logging
|
10
|
+
config.log_level = :info # changing the log level
|
11
|
+
# config.logger = Rails.logger # using the Rails logger
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
VCR.configure do |c|
|
16
|
+
c.cassette_library_dir = 'spec/vcr_cassettes'
|
17
|
+
c.hook_into :fakeweb
|
18
|
+
c.register_request_matcher :soap_body_matcher do |request_1, request_2|
|
19
|
+
node_1 = Nokogiri::XML(request_1.body)
|
20
|
+
node_2 = Nokogiri::XML(request_2.body)
|
21
|
+
EquivalentXml.equivalent?(node_1, node_2, opts = { :element_order => true, :normalize_whitespace => false })
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def soap_vcr(cassette_name)
|
26
|
+
VCR.use_cassette(cassette_name, :match_requests_on => [:soap_body_matcher]) do
|
27
|
+
yield
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NNEClient::Subsidiary do
|
4
|
+
let(:subsidiary_hash) do
|
5
|
+
{
|
6
|
+
:country => "Holland",
|
7
|
+
:"@xsi:type" => "ns0:Subsidiary",
|
8
|
+
:share => "100 ",
|
9
|
+
:tdc_id => "123",
|
10
|
+
:@id => "ID2",
|
11
|
+
:name => "Ingka Holding Scandinavia Bv"
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
subject { NNEClient::Subsidiary.new(subsidiary_hash) }
|
16
|
+
|
17
|
+
it { should eq NNEClient::Subsidiary.new(subsidiary_hash) }
|
18
|
+
its(:share) { should == '100' }
|
19
|
+
its(:name) { should == subsidiary_hash[:name] }
|
20
|
+
its(:country) { should == subsidiary_hash[:country] }
|
21
|
+
|
22
|
+
describe "#company" do
|
23
|
+
let(:result) { double(:result) }
|
24
|
+
|
25
|
+
it "knows how to fetch company information" do
|
26
|
+
NNEClient::Result.should_receive(:new).with(:tdc_id => '123') { result }
|
27
|
+
subject.company
|
28
|
+
end
|
29
|
+
it "knows how to fetch company information" do
|
30
|
+
NNEClient::Result.stub(:new) { result }
|
31
|
+
subject.company.should == result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
data/spec/trade_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NNEClient::Trade do
|
4
|
+
let(:trade_hash) do
|
5
|
+
{
|
6
|
+
:"@xsi:type" => "ns0:Trade",
|
7
|
+
:primary => true,
|
8
|
+
:trade_code => "471900",
|
9
|
+
:@id => "ID2",
|
10
|
+
:trade => "Anden detailhandel fra ikke-specialiserede forretninger"
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { NNEClient::Trade.new(trade_hash) }
|
15
|
+
|
16
|
+
it { should be_primary }
|
17
|
+
it { should eq NNEClient::Trade.new(trade_hash) }
|
18
|
+
its(:trade_code) { should == trade_hash[:trade_code] }
|
19
|
+
its(:trade) { should == trade_hash[:trade] }
|
20
|
+
|
21
|
+
end
|