tec_doc 0.2.0

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.
Files changed (65) hide show
  1. data/LICENSE +20 -0
  2. data/README.md +29 -0
  3. data/bin/tec_doc +51 -0
  4. data/lib/tec_doc.rb +28 -0
  5. data/lib/tec_doc/article.rb +317 -0
  6. data/lib/tec_doc/article_attribute.rb +17 -0
  7. data/lib/tec_doc/article_document.rb +49 -0
  8. data/lib/tec_doc/article_oe_number.rb +11 -0
  9. data/lib/tec_doc/article_thumbnail.rb +18 -0
  10. data/lib/tec_doc/assembly_group.rb +77 -0
  11. data/lib/tec_doc/brand.rb +18 -0
  12. data/lib/tec_doc/client.rb +84 -0
  13. data/lib/tec_doc/date_parser.rb +14 -0
  14. data/lib/tec_doc/error.rb +4 -0
  15. data/lib/tec_doc/fuel_type.rb +0 -0
  16. data/lib/tec_doc/generic_article.rb +47 -0
  17. data/lib/tec_doc/language.rb +22 -0
  18. data/lib/tec_doc/vehicle.rb +121 -0
  19. data/lib/tec_doc/vehicle_manufacturer.rb +46 -0
  20. data/lib/tec_doc/vehicle_model.rb +46 -0
  21. data/lib/tec_doc/version.rb +3 -0
  22. data/spec/cassettes/article_all.yml +88 -0
  23. data/spec/cassettes/article_all_with_details.yml +84 -0
  24. data/spec/cassettes/article_details.yml +68 -0
  25. data/spec/cassettes/article_details_for_trade_number.yml +56 -0
  26. data/spec/cassettes/article_document_all.yml +49 -0
  27. data/spec/cassettes/article_document_content.yml +763 -0
  28. data/spec/cassettes/article_information.yml +55 -0
  29. data/spec/cassettes/article_linked_manufacturers.yml +45 -0
  30. data/spec/cassettes/article_linked_vehicle_ids.yml +45 -0
  31. data/spec/cassettes/article_linked_vehicles.yml +372 -0
  32. data/spec/cassettes/article_linked_vehicles_with_details.yml +430 -0
  33. data/spec/cassettes/article_search.yml +62 -0
  34. data/spec/cassettes/article_search_for_linked_manufacturers.yml +47 -0
  35. data/spec/cassettes/article_thumbnail_all.yml +45 -0
  36. data/spec/cassettes/article_thumbnail_content.yml +399 -0
  37. data/spec/cassettes/article_trade_number.yml +46 -0
  38. data/spec/cassettes/article_with_a_lot_linked_vehicles.yml +60 -0
  39. data/spec/cassettes/assembly_group_all.yml +90 -0
  40. data/spec/cassettes/assembly_group_children.yml +55 -0
  41. data/spec/cassettes/brand_all.yml +81 -0
  42. data/spec/cassettes/generic_article_all.yml +46 -0
  43. data/spec/cassettes/language_all.yml +48 -0
  44. data/spec/cassettes/linked_targets_by_manufacturers.yml +2584 -0
  45. data/spec/cassettes/status_401.yml +38 -0
  46. data/spec/cassettes/vehicle_all.yml +79 -0
  47. data/spec/cassettes/vehicle_assembly_groups.yml +83 -0
  48. data/spec/cassettes/vehicle_child_assembly_groups.yml +49 -0
  49. data/spec/cassettes/vehicle_find_by_id.yml +50 -0
  50. data/spec/cassettes/vehicle_manufacturer_all.yml +52 -0
  51. data/spec/cassettes/vehicle_model_all.yml +119 -0
  52. data/spec/spec_helper.rb +28 -0
  53. data/spec/tec_doc/article_document_spec.rb +34 -0
  54. data/spec/tec_doc/article_spec.rb +185 -0
  55. data/spec/tec_doc/article_thumbnail_spec.rb +34 -0
  56. data/spec/tec_doc/assembly_group_spec.rb +48 -0
  57. data/spec/tec_doc/brand_spec.rb +22 -0
  58. data/spec/tec_doc/client_spec.rb +11 -0
  59. data/spec/tec_doc/date_parser_spec.rb +17 -0
  60. data/spec/tec_doc/generic_article_spec.rb +30 -0
  61. data/spec/tec_doc/language_spec.rb +22 -0
  62. data/spec/tec_doc/vehicle_manufacturer_spec.rb +43 -0
  63. data/spec/tec_doc/vehicle_model_spec.rb +35 -0
  64. data/spec/tec_doc/vehicle_spec.rb +80 -0
  65. metadata +426 -0
@@ -0,0 +1,28 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib'
2
+
3
+ require "rubygems"
4
+ require "bundler/setup"
5
+ require "tec_doc"
6
+ require "vcr"
7
+ require "simplecov"
8
+
9
+ SimpleCov.start
10
+
11
+ VCR.config do |c|
12
+ c.cassette_library_dir = "spec/cassettes"
13
+ c.stub_with :fakeweb
14
+ c.ignore_localhost = true
15
+ c.default_cassette_options = { :record => :new_episodes }
16
+ end
17
+
18
+ RSpec.configure do |config|
19
+ config.extend VCR::RSpec::Macros
20
+ config.before(:all) do
21
+ I18n.locale = "lv"
22
+ TecDoc.client = TecDoc::Client.new(
23
+ :provider => 330,
24
+ :country => "lv",
25
+ :mode => :test
26
+ )
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::ArticleDocument do
4
+ context ".all" do
5
+ before do
6
+ VCR.use_cassette('article_document_all') do
7
+ @documents = TecDoc::ArticleDocument.all(:article_id => 201756)
8
+ end
9
+ end
10
+
11
+ it "should return array of documents" do
12
+ @documents.should be_an_instance_of(Array)
13
+ @documents.size.should > 0
14
+ @documents.each do |document|
15
+ document.should be_an_instance_of(TecDoc::ArticleDocument)
16
+ document.id.should be_kind_of(Integer)
17
+ document.id.should > 0
18
+ document.file_name.should be_an_instance_of(String)
19
+ document.file_name.size.should > 0
20
+ document.type_id.should be_kind_of(Integer)
21
+ document.type_id.size.should > 0
22
+ end
23
+ end
24
+
25
+ describe "#content" do
26
+ it "should return picture" do
27
+ document = @documents[0]
28
+ VCR.use_cassette('article_document_content') do
29
+ document.content.should include("JFIF")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,185 @@
1
+ #encoding: utf-8
2
+ require "spec_helper"
3
+
4
+ describe TecDoc::Article do
5
+ context ".search" do
6
+ before do
7
+ VCR.use_cassette('article_search') do
8
+ @articles = TecDoc::Article.search(
9
+ :article_number => "31966",
10
+ :number_type => 10,
11
+ :search_exact => false
12
+ )
13
+ end
14
+ end
15
+
16
+ it "should return array of articles" do
17
+ @articles.should be_an_instance_of(Array)
18
+ @articles.each do |article|
19
+ article.should be_an_instance_of(TecDoc::Article)
20
+ article.id.should be_kind_of(Integer)
21
+ article.id.should > 0
22
+ article.name.should be_an_instance_of(String)
23
+ article.name.size.should > 0
24
+ article.search_number.size.should > 0
25
+ end
26
+ end
27
+
28
+ context "#article_details" do
29
+ before do
30
+ @article = @articles.detect { |a| a.brand_name == "FEBI BILSTEIN" && a.number == "31966" }
31
+ VCR.use_cassette('article_details') do
32
+ @article.send(:article_details)
33
+ end
34
+ end
35
+
36
+ it "should have EAN number" do
37
+ @article.ean_number.should == "4027816319665"
38
+ end
39
+
40
+ it "should have information" do
41
+ VCR.use_cassette("article_information") do
42
+ @article.send(:direct_article_data_en)
43
+ end
44
+ @article.information[0][:info_text].should == "for air conditioning"
45
+ end
46
+
47
+ context "with state and trade number" do
48
+ before do
49
+ VCR.use_cassette('article_trade_number') do
50
+ @article = TecDoc::Article.search(
51
+ :article_number => "4PK1217",
52
+ :number_type => 0,
53
+ :search_exact => true
54
+ )[0]
55
+ end
56
+
57
+ VCR.use_cassette('article_details_for_trade_number') do
58
+ @article.send(:article_details)
59
+ end
60
+ end
61
+
62
+ it "should have state" do
63
+ @article.state.should == "Normāls"
64
+ end
65
+
66
+ it "should have trade number" do
67
+ @article.trade_numbers.should == "4 PK 1216, 4 PK 1217, 4 PK 1218, 4 PK 1219"
68
+ end
69
+ end
70
+
71
+ it "should have OE numbers" do
72
+ @article.oe_numbers.size.should > 0
73
+ @article.oe_numbers.each do |oe_number|
74
+ oe_number.should be_an_instance_of(TecDoc::ArticleOENumber)
75
+ oe_number.brand_name.should == "BMW"
76
+ oe_number.oe_number.should be_an_instance_of(String)
77
+ oe_number.oe_number.size.should > 0
78
+ end
79
+ end
80
+
81
+ it "should have attributes" do
82
+ @article.attributes.size.should > 0
83
+ @article.attributes.each do |attribute|
84
+ attribute.name.should be_an_instance_of(String)
85
+ attribute.name.size.should > 0
86
+ attribute.value.should be_an_instance_of(String)
87
+ attribute.value.size.should > 0
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ context ".all" do
94
+ it "should return all vehicles articles with specified generic article" do
95
+ VCR.use_cassette('article_all') do
96
+ @articles = TecDoc::Article.all(
97
+ :linking_target_type => "C",
98
+ :linking_target_id => 10502,
99
+ :generic_article_id => { :array => {:id => [7] } }
100
+ )
101
+ end
102
+
103
+ @articles.count.should == 30
104
+ @articles.map(&:generic_article_id).uniq.should == [7]
105
+ end
106
+ end
107
+
108
+ context ".all_with_details" do
109
+ it "should get all article detail information in and set it to articles" do
110
+ VCR.use_cassette("article_all_with_details") do
111
+ @articles = TecDoc::Article.all_with_details(:ids => [208662, 212551])
112
+ end
113
+
114
+ @articles.each do |article|
115
+ ["07642101", "07642077"].include?(article.instance_variable_get(:@trade_number))
116
+ article.instance_variable_get(:@attributes).to_a.empty?.should be_false
117
+ article.id.should_not be_nil
118
+ article.number.should_not be_nil
119
+ article.brand_number.should_not be_nil
120
+ end
121
+ end
122
+ end
123
+
124
+ context "for linked_manufacturers and linked vehicles" do
125
+ before do
126
+ VCR.use_cassette('article_search_for_linked_manufacturers') do
127
+ @articles = TecDoc::Article.search(
128
+ :article_number => "4PK1025",
129
+ :number_type => 0,
130
+ :search_exact => true
131
+ )
132
+ end
133
+ end
134
+
135
+ it "should return array of linked manufacturers" do
136
+ VCR.use_cassette('article_linked_manufacturers') do
137
+ @articles[0].linked_manufacturers
138
+ end
139
+ @articles[0].linked_manufacturers.map(&:name).should == ["CITRO","HONDA","NISSA","SUZUK"]
140
+ end
141
+
142
+ it "should return array of linked vehicle ids" do
143
+ VCR.use_cassette('article_linked_vehicle_ids') do
144
+ @articles[0].linked_vehicle_ids
145
+ end
146
+ @articles[0].linked_vehicle_ids.count.should == 16
147
+ end
148
+
149
+ it "should return array of linked vehicles" do
150
+ VCR.use_cassette('article_linked_vehicles') do
151
+ @articles[0].linked_vehicles
152
+ end
153
+ @articles[0].linked_vehicles.count.should == 30
154
+ @articles[0].linked_vehicles.map(&:motor_codes).flatten.uniq.include?("A 18 XER").should be_true
155
+ @articles[0].linked_vehicles.first.class.should == TecDoc::Vehicle
156
+ end
157
+
158
+ it "should return article linked vehicle with details" do
159
+ VCR.use_cassette('article_linked_vehicles_with_details') do
160
+ @articles[0].linked_vehicles_with_details
161
+ end
162
+
163
+ vehicle = @articles[0].linked_vehicles_with_details.detect{ |v| v.name =~ /HYUNDAI/i }
164
+ vehicle.manu_id.should > 0
165
+ vehicle.mod_id.should > 0
166
+ vehicle.attributes.length.should == 3
167
+
168
+ attribute = vehicle.attributes[0]
169
+ attribute.name.should == "Sākot ar izlaiduma gadu"
170
+ attribute.value.should == TecDoc::DateParser.new("199207").to_date
171
+ end
172
+ end
173
+
174
+ context "super long list for linking targets" do
175
+ it "should successfully rescue from error and fetch all linked vehicles by manufacturers" do
176
+ VCR.use_cassette('article_with_a_lot_linked_vehicles') do
177
+ @article = TecDoc::Article.all_with_details(:ids => [948671])[0]
178
+ end
179
+ VCR.use_cassette('linked_targets_by_manufacturers') do
180
+ @article.linked_targets
181
+ end
182
+ @article.linked_targets.size.should > 7000
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::ArticleThumbnail do
4
+ context ".all" do
5
+ before do
6
+ VCR.use_cassette('article_thumbnail_all') do
7
+ @thumbnails = TecDoc::ArticleThumbnail.all(:article_id => 201756)
8
+ end
9
+ end
10
+
11
+ it "should return array of thumbnails" do
12
+ @thumbnails.should be_an_instance_of(Array)
13
+ @thumbnails.size.should > 0
14
+ @thumbnails.each do |thumbnail|
15
+ thumbnail.should be_an_instance_of(TecDoc::ArticleThumbnail)
16
+ thumbnail.id.should be_kind_of(Integer)
17
+ thumbnail.id.should > 0
18
+ thumbnail.file_name.should be_an_instance_of(String)
19
+ thumbnail.file_name.size.should > 0
20
+ thumbnail.type_id.should be_kind_of(Integer)
21
+ thumbnail.type_id.size.should > 0
22
+ end
23
+ end
24
+
25
+ describe "#content" do
26
+ it "should return picture" do
27
+ thumbnail = @thumbnails[0]
28
+ VCR.use_cassette('article_thumbnail_content') do
29
+ thumbnail.content.should include("JFIF")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,48 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::AssemblyGroup do
4
+ context ".all" do
5
+ before do
6
+ VCR.use_cassette('assembly_group_all') do
7
+ @groups = TecDoc::AssemblyGroup.all(
8
+ :child_nodes => false,
9
+ :linking_target_type => "C"
10
+ )
11
+ end
12
+ end
13
+
14
+ it "should return array of groups" do
15
+ @groups.should be_an_instance_of(Array)
16
+ @groups.each do |group|
17
+ group.should be_an_instance_of(TecDoc::AssemblyGroup)
18
+ group.id.should be_kind_of(Integer)
19
+ group.id.should > 0
20
+ group.name.should be_an_instance_of(String)
21
+ group.name.size.should > 0
22
+ group.parent_id.should be_nil
23
+ end
24
+ end
25
+
26
+ context "#children" do
27
+ before do
28
+ @parent = @groups.first
29
+ VCR.use_cassette('assembly_group_children') do
30
+ @children = @parent.children
31
+ end
32
+ end
33
+
34
+ it "should have children" do
35
+ @children.should be_an_instance_of(Array)
36
+ @children.each do |group|
37
+ group.should be_an_instance_of(TecDoc::AssemblyGroup)
38
+ group.id.should be_kind_of(Integer)
39
+ group.id.should > 0
40
+ group.name.should be_an_instance_of(String)
41
+ group.name.size.should > 0
42
+ group.parent_id.should == @parent.id
43
+ group.parent.should == @parent
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::Brand do
4
+ context ".all" do
5
+ before do
6
+ VCR.use_cassette('brand_all') do
7
+ @brands = TecDoc::Brand.all
8
+ end
9
+ end
10
+
11
+ it "should return array of brands" do
12
+ @brands.should be_an_instance_of(Array)
13
+ @brands.each do |brand|
14
+ brand.should be_an_instance_of(TecDoc::Brand)
15
+ brand.number.should be_kind_of(Integer)
16
+ brand.number.should > 0
17
+ brand.name.should be_an_instance_of(String)
18
+ brand.name.size.should > 0
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::Client do
4
+ it "should raise TecDoc::Error with status_text when the returned XML doesn't contains <status>200</status>" do
5
+ lambda {
6
+ VCR.use_cassette('status_401') do
7
+ TecDoc.client.request(:get_pegasus_version_info)
8
+ end
9
+ }.should raise_error(TecDoc::Error, "Access not allowed")
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::DateParser do
4
+ describe "#to_date" do
5
+ it "should convert 199904 to April 1st, 1999" do
6
+ TecDoc::DateParser.new("199904").to_date.should == Date.new(1999, 4, 1)
7
+ end
8
+
9
+ it "should convert 201012 to December 1st, 2012" do
10
+ TecDoc::DateParser.new("201012").to_date.should == Date.new(2010, 12, 1)
11
+ end
12
+
13
+ it "should return nil when nil" do
14
+ TecDoc::DateParser.new(nil).to_date.should == nil
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ #encoding: utf-8
2
+ require "spec_helper"
3
+
4
+ describe TecDoc::GenericArticle do
5
+ before do
6
+ VCR.use_cassette("generic_article_all") do
7
+ @generic_articles = TecDoc::GenericArticle.all({
8
+ :linking_target_type => "C",
9
+ :linking_target_id => 10502,
10
+ :generic_article_id => { :array => { :id => [7] } },
11
+ })
12
+ end
13
+ end
14
+
15
+ context ".all" do
16
+ it "should return distinct generic articles" do
17
+ @generic_articles.count.should == 1
18
+ @generic_articles.first.name.should == "Eļļas filtrs"
19
+ end
20
+ end
21
+
22
+ it "should return all vehicles articles without any options if scope is present" do
23
+ generic_article = TecDoc::GenericArticle.new(:id => 7)
24
+ VCR.use_cassette("article_all") do
25
+ @articles = generic_article.articles
26
+ end
27
+ @articles.count.should == 30
28
+ @articles.map(&:generic_article_id).uniq.should == [ 7 ]
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe TecDoc::Language do
4
+ context ".all" do
5
+ before do
6
+ VCR.use_cassette('language_all') do
7
+ @languages = TecDoc::Language.all
8
+ end
9
+ end
10
+
11
+ it "should return array of languages" do
12
+ @languages.should be_an_instance_of(Array)
13
+ @languages.each do |language|
14
+ language.should be_an_instance_of(TecDoc::Language)
15
+ language.code.should be_an_instance_of(String)
16
+ language.code.size.should > 0
17
+ language.name.should be_an_instance_of(String)
18
+ language.name.size.should > 0
19
+ end
20
+ end
21
+ end
22
+ end