efo_nelfo 0.0.7 → 1.0.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.
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe EfoNelfo::V40::Order do
5
- let(:order) { EfoNelfo::V40::Order.new buyer_id: '123', customer_id: '456' }
4
+ describe EfoNelfo::V40::BH do
5
+ let(:order) { EfoNelfo::V40::BH.new buyer_id: '123', customer_id: '456' }
6
6
  let(:csv) { order.to_csv }
7
7
 
8
8
  describe "to_a" do
@@ -12,8 +12,8 @@ describe EfoNelfo::V40::Order do
12
12
  end
13
13
 
14
14
  it "includes the lines" do
15
- order.add EfoNelfo::V40::Order::Line.new
16
- order.add EfoNelfo::V40::Order::Line.new
15
+ order.add EfoNelfo::V40::BL.new
16
+ order.add EfoNelfo::V40::BL.new
17
17
  order.to_a.size.must_equal 3
18
18
  end
19
19
 
@@ -21,8 +21,8 @@ describe EfoNelfo::V40::Order do
21
21
 
22
22
  describe "to_csv" do
23
23
  before do
24
- order.add EfoNelfo::V40::Order::Line.new(order_number: 'foo', item_name: 'Ware', item_count: 6, splitable: true)
25
- order.add EfoNelfo::V40::Order::Text.new text: 'haha'
24
+ order.add EfoNelfo::V40::BL.new order_number: 'foo', item_name: 'Ware', item_count: 6, splitable: true
25
+ order.add EfoNelfo::V40::BT.new text: 'haha'
26
26
  end
27
27
 
28
28
  it "includes standard fields" do
@@ -30,22 +30,22 @@ describe EfoNelfo::V40::Order do
30
30
  csv.must_match /;4.0;/
31
31
  csv.must_match /;123;/
32
32
  csv.must_match /;600;/
33
- csv.must_match /;J;/
33
+ csv.must_match /;J;/ # for fixing sublime syntax highlighting: /
34
34
  end
35
35
 
36
36
  it "can be parsed" do
37
37
  o = EfoNelfo.parse(csv)
38
- o.must_be_instance_of EfoNelfo::V40::Order
39
- o.lines.first.text.must_be_instance_of EfoNelfo::V40::Order::Text
38
+ o.must_be_instance_of EfoNelfo::V40::BH
39
+ o.lines.first.text.first.must_be_instance_of EfoNelfo::V40::BT
40
40
  end
41
41
 
42
42
  it "adds order lines" do
43
- order.add EfoNelfo::V40::Order::Line.new(order_number: 'foo', item_name: 'Ware')
43
+ order.add EfoNelfo::V40::BL.new(order_number: 'foo', item_name: 'Ware')
44
44
  csv.must_match /Ware/
45
45
  end
46
46
 
47
47
  it "adds text to order line" do
48
- csv.must_match /haha/
48
+ csv.must_match /BT;haha/
49
49
  end
50
50
 
51
51
  end
@@ -10,19 +10,19 @@ describe EfoNelfo do
10
10
 
11
11
  describe "properties" do
12
12
  it "is accessible as alias" do
13
- order = EfoNelfo::V40::Order.new
13
+ order = EfoNelfo::V40::BH.new
14
14
  order.buyer_id = "123"
15
15
  order.KjøpersId.must_equal "123"
16
16
  end
17
17
 
18
18
  it "can update the variable using the alias" do
19
- order = EfoNelfo::V40::Order.new
19
+ order = EfoNelfo::V40::BH.new
20
20
  order.KjøpersId = "foo"
21
21
  order.buyer_id.must_equal "foo"
22
22
  end
23
23
 
24
24
  it "has custom setters" do
25
- EfoNelfo::V40::Order.new(delivery_date: "20110402").delivery_date.must_be_kind_of Date
25
+ EfoNelfo::V40::BH.new(delivery_date: "20110402").delivery_date.must_be_kind_of Date
26
26
  end
27
27
 
28
28
  end
@@ -34,15 +34,17 @@ describe EfoNelfo do
34
34
  seller_warehouse: "Somewhere",
35
35
  label: "Some label",
36
36
  lines: [
37
- { item_type: 1, order_number: "12345", item_name: "Foo", price_unit: "NOK" },
38
- { item_type: 1, order_number: "12345", item_name: "Bar", price_unit: "SEK", text: "This is freetext"},
37
+ { post_type: 'BL', item_type: 1, order_number: "12345", item_name: "Foo", price_unit: "NOK" },
38
+ { post_type: 'BL', item_type: 1, order_number: "12345", item_name: "Bar", price_unit: "SEK", text: [
39
+ { post_type: 'BT', text: "some dummy lorem ipsum text" }
40
+ ] }
39
41
  ]
40
42
  }
41
43
  }
42
- let(:order) { EfoNelfo::V40::Order.new json }
44
+ let(:order) { EfoNelfo::V40::BH.new json }
43
45
 
44
46
  it "creates an order" do
45
- order.must_be_instance_of EfoNelfo::V40::Order
47
+ order.must_be_instance_of EfoNelfo::V40::BH
46
48
  end
47
49
 
48
50
  it "assigns attributes" do
@@ -52,15 +54,20 @@ describe EfoNelfo do
52
54
 
53
55
  it "assigns order lines" do
54
56
  order.lines.size.must_equal 2
57
+ order.lines.first.must_be_instance_of EfoNelfo::V40::BL
58
+ order.lines[0].item_name.must_equal "Foo"
59
+ order.lines[1].item_name.must_equal "Bar"
60
+ end
61
+
62
+ it "adds index to the line items" do
55
63
  order.lines[0].index.must_equal 1
56
64
  order.lines[1].index.must_equal 2
57
- order.lines[1].item_name.must_equal "Bar"
58
65
  end
59
66
 
60
67
  it "adds text to order lines" do
61
- order.lines.first.text.must_be_nil
62
- order.lines[1].text.must_be_instance_of EfoNelfo::V40::Order::Text
63
- order.lines[1].text.to_s.must_equal "This is freetext"
68
+ order.lines.first.text.must_be_empty
69
+ order.lines[1].text.first.must_be_instance_of EfoNelfo::V40::BT
70
+ order.lines[1].text.first.to_s.must_equal "some dummy lorem ipsum text"
64
71
  end
65
72
 
66
73
  end
@@ -84,6 +91,60 @@ describe EfoNelfo do
84
91
  end
85
92
  end
86
93
 
94
+ describe "passing a Product file" do
95
+ let(:nelfo) { EfoNelfo.load(csv('varefil_eksempel.csv')) }
96
+
97
+ it { nelfo.must_be_instance_of EfoNelfo::V40::VH }
98
+
99
+ it "loads the order" do
100
+ nelfo.format.must_equal "EFONELFO"
101
+ nelfo.version.must_equal "4.0"
102
+ nelfo.post_type.must_equal "VH"
103
+ nelfo.SelgersId.must_equal "NO1234567879MVA"
104
+ nelfo.KjøpersId.must_be_nil
105
+ nelfo.KundeNr.must_be_nil
106
+ nelfo.from_date.must_equal Date.new(2004, 1, 22)
107
+ nelfo.to_date.must_be_nil
108
+ nelfo.currency.must_equal "NOK"
109
+ nelfo.contract_id.must_be_nil
110
+ nelfo.seller_name.must_equal "ONNINEN A/S"
111
+ nelfo.seller_address1.must_equal "P.B. 70"
112
+ nelfo.seller_address2.must_be_nil
113
+ nelfo.seller_zip.must_equal "1483"
114
+ nelfo.seller_office.must_equal "SKYTTA"
115
+ nelfo.seller_country.must_equal "NO"
116
+ end
117
+
118
+ it "adds product lines" do
119
+ nelfo.lines.count.must_equal 3
120
+
121
+ line = nelfo.lines.first
122
+ line.product_type.must_equal 1
123
+ line.product_number.must_equal "1006100"
124
+ line.name.must_equal "MATTE 3MM 100W/M2 100W"
125
+ line.description.must_equal "1,0 m2 0,5 x 2,0 m"
126
+ line.unit.must_equal 1
127
+ line.price_unit.must_equal "EA"
128
+ line.price_unit_desc.must_equal "STYKK"
129
+ line.price.must_equal 55300
130
+ line.amount.must_equal 10000
131
+ line.price_date.must_equal Date.new(2011,9,1)
132
+ line.status.must_equal 1
133
+ line.block_number.must_be_nil
134
+ line.discount_group.must_equal "1004"
135
+ line.fabrication.must_be_nil
136
+ line.type.must_be_nil
137
+ line.stocked.must_equal true
138
+ line.stocked?.must_equal true
139
+ line.sales_package.must_equal 10000
140
+ end
141
+
142
+ it "adds additional information to the product" do
143
+ line = nelfo.lines.first
144
+ line.info.first.value.must_equal "http://www.elektroskandia.no/image/products/1221102.gif"
145
+ end
146
+ end
147
+
87
148
  describe "passing a Order file" do
88
149
 
89
150
  it "uses the correct version" do
@@ -91,13 +152,12 @@ describe EfoNelfo do
91
152
  end
92
153
 
93
154
  it "parses the file and returns an Order" do
94
- EfoNelfo.load(csv('B650517.032.csv')).must_be_instance_of EfoNelfo::V40::Order
155
+ EfoNelfo.load(csv('B650517.032.csv')).must_be_instance_of EfoNelfo::V40::BH
95
156
  end
96
157
 
97
158
  it "the order contains order information" do
98
159
  order = EfoNelfo.load(csv('B650517.032.csv'))
99
160
  order.post_type.must_equal 'BH'
100
- order.post_type_human.must_equal 'Bestilling Hodepost'
101
161
  order.format.must_equal 'EFONELFO'
102
162
  order.version.must_equal '4.0'
103
163
  end
@@ -106,10 +166,9 @@ describe EfoNelfo do
106
166
  order = EfoNelfo.load(csv('B650517.032.csv'))
107
167
 
108
168
  line = order.lines.first
109
- line.must_be_instance_of EfoNelfo::V40::Order::Line
169
+ line.must_be_instance_of EfoNelfo::V40::BL
110
170
 
111
171
  line.post_type.must_equal 'BL'
112
- line.post_type_human.must_equal 'Bestilling vareLinjepost'
113
172
 
114
173
  line.index.must_equal 1
115
174
  line.order_number.must_equal '1465'
@@ -129,8 +188,7 @@ describe EfoNelfo do
129
188
 
130
189
  it "adds text to orderline" do
131
190
  order = EfoNelfo.load(csv('B650517.032.csv'))
132
- line = order.lines.first
133
- line.text.to_s.must_equal "Her er litt fritekst"
191
+ order.lines.first.text.first.to_s.must_equal "Her er litt fritekst"
134
192
  end
135
193
 
136
194
  it "stores the contents file in the Order object" do
@@ -143,7 +201,7 @@ describe EfoNelfo do
143
201
  # Loads all files in the samples directory
144
202
  %w(B028579.594.csv B028579.596.csv B650517.031.csv B028579.595.csv B028579.597.csv B650517.030.csv B650517.032.csv).each do |file|
145
203
  it "can load #{file}" do
146
- EfoNelfo.load(csv(file)).must_be_instance_of EfoNelfo::V40::Order
204
+ EfoNelfo.load(csv(file)).must_be_instance_of EfoNelfo::V40::BH
147
205
  end
148
206
  end
149
207
 
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe EfoNelfo::PostType do
4
+
5
+ module EfoNelfo
6
+ module V21
7
+ class Foo < EfoNelfo::PostType
8
+ property :post_type
9
+ property :version
10
+ property :seller_id
11
+ has_many :lines, :post_type => "Bar"
12
+ end
13
+
14
+ class Bar < EfoNelfo::PostType
15
+ property :post_type
16
+ property :order_number
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "versioning" do
22
+
23
+ it ".version_from_class returns the version" do
24
+ EfoNelfo::V21::Foo.version_from_class.must_equal "21"
25
+ end
26
+
27
+ it ".version returns the version as a number" do
28
+ EfoNelfo::V21::Foo.version.must_equal "2.1"
29
+ end
30
+
31
+ it ".version_to_namespace converts version to module name" do
32
+ EfoNelfo::V21::Foo.version_to_namespace("2.1").must_equal "21"
33
+ end
34
+
35
+ end
36
+
37
+ describe ".from" do
38
+ let(:hash) {
39
+ {
40
+ post_type: "Foo",
41
+ version: "2.1",
42
+ seller_id: "123",
43
+ lines: [
44
+ { post_type: "Bar", order_number: "666-2" }
45
+ ]
46
+ }
47
+ }
48
+
49
+ let(:pt) { EfoNelfo::PostType.from hash }
50
+
51
+ it "converts the hash into a valid posttype" do
52
+ pt.must_be_instance_of EfoNelfo::V21::Foo
53
+ pt.seller_id.must_equal "123"
54
+ end
55
+
56
+ # it "adds lines" do
57
+ # pt.lines.size.must_equal 1
58
+ # pt.lines.first.order_number.must_equal "666-2"
59
+ # end
60
+
61
+ end
62
+
63
+ end
@@ -25,6 +25,15 @@ describe EfoNelfo::Property do
25
25
  }.must_raise EfoNelfo::DuplicateProperty
26
26
  end
27
27
 
28
+ it "raises an error if trying to assign an unsupported option" do
29
+ lambda {
30
+ class Bar
31
+ include EfoNelfo::Property
32
+ property :lame, funny: true
33
+ end
34
+ }.must_raise EfoNelfo::UnknownPropertyOption
35
+ end
36
+
28
37
  it "adds a getter and setter for foo" do
29
38
  obj.foo = 'Test'
30
39
  obj.foo.must_equal 'Test'
@@ -118,6 +127,11 @@ describe EfoNelfo::Property do
118
127
  end
119
128
  end
120
129
 
130
+ it "#has_property? returns true when property exists" do
131
+ obj.has_property?(:foo).must_equal true
132
+ obj.has_property?(:bullshit).must_equal false
133
+ end
134
+
121
135
  describe "#to_a" do
122
136
  it "returns array of all attributes in correct order" do
123
137
  obj.date = Date.new 2012, 5, 30