efo_nelfo 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.
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe EfoNelfo::V40::Order do
5
+ let(:order) { EfoNelfo::V40::Order.new buyer_id: '123', customer_id: '456' }
6
+ let(:csv) { order.to_csv }
7
+
8
+ describe "to_a" do
9
+
10
+ it "returns an array" do
11
+ order.to_a.size.must_equal 1
12
+ end
13
+
14
+ it "includes the lines" do
15
+ order.add EfoNelfo::V40::Order::Line.new
16
+ order.add EfoNelfo::V40::Order::Line.new
17
+ order.to_a.size.must_equal 3
18
+ end
19
+
20
+ end
21
+
22
+ describe "to_csv" do
23
+ before do
24
+ order.add EfoNelfo::V40::Order::Line.new(order_number: 'foo', item_name: 'Ware')
25
+ order.add EfoNelfo::V40::Order::Text.new text: 'haha'
26
+ end
27
+
28
+ it "includes standard fields" do
29
+ csv.must_match /;EFONELFO;/
30
+ csv.must_match /;4.0;/
31
+ csv.must_match /;123;/
32
+ end
33
+
34
+ it "can be parsed" do
35
+ o = EfoNelfo.parse(csv)
36
+ o.must_be_instance_of EfoNelfo::V40::Order
37
+ o.lines.first.text.must_be_instance_of EfoNelfo::V40::Order::Text
38
+ end
39
+
40
+ it "adds order lines" do
41
+ order.add EfoNelfo::V40::Order::Line.new(order_number: 'foo', item_name: 'Ware')
42
+ csv.must_match /Ware/
43
+ end
44
+
45
+ it "adds text to order line" do
46
+ csv.must_match /haha/
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,114 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ # helper method that returns full path to csv files
5
+ def csv(filename)
6
+ File.expand_path("../samples/#{filename}", __FILE__)
7
+ end
8
+
9
+ describe EfoNelfo do
10
+
11
+ describe "properties" do
12
+ it "is accessible as alias" do
13
+ order = EfoNelfo::V40::Order.new
14
+ order.buyer_id = "123"
15
+ order.KjøpersId.must_equal "123"
16
+ end
17
+
18
+ it "can update the variable using the alias" do
19
+ order = EfoNelfo::V40::Order.new
20
+ order.KjøpersId = "foo"
21
+ order.buyer_id.must_equal "foo"
22
+ end
23
+
24
+ it "has custom setters" do
25
+ EfoNelfo::V40::Order.new(delivery_date: "20110402").delivery_date.must_be_kind_of Date
26
+ end
27
+
28
+ end
29
+
30
+ describe ".parse" do
31
+
32
+ it "parses CSV and does the same as .load" do
33
+ filename = csv('B650517.032.csv')
34
+ parsed = EfoNelfo.parse File.read(filename)
35
+ loaded = EfoNelfo.load filename
36
+ parsed.source.must_equal loaded.source
37
+ end
38
+
39
+ end
40
+
41
+ describe ".load" do
42
+
43
+ describe "when passing in invalid file" do
44
+ it "raises an exception" do
45
+ lambda { EfoNelfo.load 'foo' }.must_raise Errno::ENOENT
46
+ end
47
+ end
48
+
49
+ describe "passing a Order file" do
50
+
51
+ it "uses the correct version" do
52
+ lambda { EfoNelfo.load(csv('B123.v3.csv')) }.must_raise EfoNelfo::UnsupportedPostType
53
+ end
54
+
55
+ it "parses the file and returns an Order" do
56
+ EfoNelfo.load(csv('B650517.032.csv')).must_be_instance_of EfoNelfo::V40::Order
57
+ end
58
+
59
+ it "the order contains order information" do
60
+ order = EfoNelfo.load(csv('B650517.032.csv'))
61
+ order.post_type.must_equal 'BH'
62
+ order.post_type_human.must_equal 'Bestilling Hodepost'
63
+ order.format.must_equal 'EFONELFO'
64
+ order.version.must_equal '4.0'
65
+ end
66
+
67
+ it "the order contains orderlines" do
68
+ order = EfoNelfo.load(csv('B650517.032.csv'))
69
+
70
+ line = order.lines.first
71
+ line.must_be_instance_of EfoNelfo::V40::Order::Line
72
+
73
+ line.post_type.must_equal 'BL'
74
+ line.post_type_human.must_equal 'Bestilling vareLinjepost'
75
+
76
+ line.index.must_equal 1
77
+ line.order_number.must_equal '1465'
78
+ line.item_count.must_equal 200
79
+ line.price_unit.must_equal "EA"
80
+ line.buyer_item_number.must_be_nil
81
+ line.delivery_date.must_equal Date.new(2010, 6, 1)
82
+ line.buyer_ref.must_be_nil
83
+ line.splitable.must_equal true
84
+ line.replacable.must_equal true
85
+
86
+ line.item_type.must_equal 1
87
+ line.item_number.must_equal '8000502'
88
+ line.item_name.must_equal '200L OSO STD BEREDER SUPER S'
89
+ line.item_description.must_be_nil
90
+ end
91
+
92
+ it "adds text to orderline" do
93
+ order = EfoNelfo.load(csv('B650517.032.csv'))
94
+ line = order.lines.first
95
+ line.text.to_s.must_equal "Her er litt fritekst"
96
+ end
97
+
98
+ it "stores the contents file in the Order object" do
99
+ filename = csv('B650517.032.csv')
100
+ order = EfoNelfo.load(filename)
101
+ order.source.must_equal File.read(filename)
102
+ end
103
+ end
104
+
105
+ # Loads all files in the samples directory
106
+ %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|
107
+ it "can load #{file}" do
108
+ EfoNelfo.load(csv(file)).must_be_instance_of EfoNelfo::V40::Order
109
+ end
110
+ end
111
+
112
+ end
113
+
114
+ end
@@ -0,0 +1,125 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe EfoNelfo::Property do
5
+
6
+ class Foo
7
+ include EfoNelfo::Property
8
+ property :foo, alias: "Føbar", limit: 3, default: 'I am foo'
9
+ property :bar
10
+ property :date, type: :date
11
+ property :number, type: :integer
12
+ property :doable, type: :boolean, default: false
13
+ property :immutable, read_only: true, default: 'NO'
14
+ end
15
+
16
+ let(:obj) { Foo.new }
17
+
18
+ it "raises an error if trying to add duplicate property" do
19
+ lambda {
20
+ class Bar
21
+ include EfoNelfo::Property
22
+ property :foo
23
+ property :foo
24
+ end
25
+ }.must_raise EfoNelfo::DuplicateProperty
26
+ end
27
+
28
+ it "adds a getter and setter for foo" do
29
+ obj.foo = 'Test'
30
+ obj.foo.must_equal 'Test'
31
+ end
32
+
33
+ it "adds an alias getter and setter for foo" do
34
+ obj.foo = 'Test'
35
+ obj.Føbar.must_equal 'Test'
36
+ obj.Føbar = 'Hacked'
37
+ obj.Føbar.must_equal 'Hacked'
38
+ obj.foo.must_equal 'Hacked'
39
+ end
40
+
41
+ it "assigns default values" do
42
+ obj.bar.must_be_nil
43
+ obj.foo.must_equal 'I am foo'
44
+ end
45
+
46
+ it "can be assigned nil values" do
47
+ obj.number = nil
48
+ obj.number.must_be_nil
49
+ end
50
+
51
+ it "readonly attributes cannot be changed" do
52
+ lambda { obj.immutable = 'test' }.must_raise NoMethodError
53
+ obj.immutable.must_equal 'NO'
54
+ end
55
+
56
+ describe "property types" do
57
+ describe ":date" do
58
+ it "converts strings to dates" do
59
+ obj.date = "20100504"
60
+ obj.date.must_be_kind_of Date
61
+ end
62
+
63
+ it "accepts a Date" do
64
+ obj.date = Date.new 2010, 5, 4
65
+ obj.date.must_be_kind_of Date
66
+ end
67
+
68
+ end
69
+
70
+ it "handles :integer" do
71
+ obj.number = "2"
72
+ obj.number.must_equal 2
73
+ end
74
+
75
+ describe ":boolean" do
76
+ it "returns true when assigning blank string" do
77
+ obj.doable = ''
78
+ obj.doable?.must_equal true
79
+ end
80
+
81
+ it "returns true when assigning nil" do
82
+ obj.doable = nil
83
+ obj.doable?.must_equal true
84
+ end
85
+
86
+ it "returns true when assigning 'J'" do
87
+ obj.doable = 'J'
88
+ obj.doable?.must_equal true
89
+ end
90
+
91
+ it "returns false" do
92
+ obj.doable = false
93
+ obj.doable?.must_equal false
94
+
95
+ obj.doable = 'N'
96
+ obj.doable?.must_equal false
97
+ end
98
+
99
+ end
100
+
101
+
102
+ end
103
+
104
+ describe ".properties" do
105
+ let(:props) { Foo.properties }
106
+
107
+ it "includes the properties" do
108
+ props[:foo].must_be_kind_of Hash
109
+ end
110
+
111
+ it "includes the property options" do
112
+ props[:foo][:limit].must_equal 3
113
+ end
114
+ end
115
+
116
+ describe "#to_a" do
117
+ it "returns array of all attributes in correct order" do
118
+ obj.date = Date.new 2012, 5, 30
119
+ obj.number = 3
120
+ obj.doable = true
121
+ obj.to_a.must_equal ["I am foo", nil, "20120530", 3, "J", "NO"]
122
+ end
123
+ end
124
+
125
+ end
@@ -0,0 +1,2 @@
1
+ BH;EFONELFO;4.0;;NO950349875MVA;2091;28579;;;19271;;19271;;;;;;;2091/19271;;;;20100602;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;2091;1;6047602;IF� festeplugg til Aqua og;;100;EA;;20100602;;;
@@ -0,0 +1,4 @@
1
+ BH;EFONELFO;4.0;;NO950349875MVA;2113;28579;;;;;;;;;;;;2113;;;;20100615;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;2113;1;2215316;75 x 2,6 x 3000mm sort PP r�r;;3000;MTR;;20100615;;;
3
+ BL;2;2113;1;5002202;12 x 1.0mm kobberr�r f/kap.lod;;3000;MTR;;20100615;;;
4
+ BL;3;2113;1;5002203;15 x 1.0mm kobberr�r f/kap.lod;;3000;MTR;;20100615;;;
@@ -0,0 +1,9 @@
1
+ BH;EFONELFO;4.0;;NO950349875MVA;2116;28579;;;;;;;;;;LAGER;;2116/LAGER;;;;20100617;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;2116;1;5030026;15 mm 1/1 bend m/1 muffe 5001A;;5000;EA;;20100617;;;
3
+ BL;2;2116;1;5030213;12 mm 1/1 bend m/2 muffer;;5000;EA;;20100617;;;
4
+ BL;3;2116;1;5030216;15 mm 1/1 bend m/2 muffer;;5000;EA;;20100617;;;
5
+ BL;4;2116;1;5030219;18 mm 1/1 bend m/2 muffer;;2000;EA;;20100617;;;
6
+ BL;5;2116;1;5034253;22 x 18 mm overg.nipl. 5243;;1000;EA;;20100617;;;
7
+ BL;6;2116;1;4516183;FALU SNAP ENK 10-16 MM HVIT;;5000;EA;;20100617;;;
8
+ BL;7;2116;1;4516273;FALU SNAP ENK 18-22 MM HVIT;;1000;EA;;20100617;;;
9
+ BL;8;2116;1;4516271;FALU SNAP DOB 18-22 MM 40 CC;;1000;EA;;20100617;;;
@@ -0,0 +1,17 @@
1
+ BH;EFONELFO;4.0;;NO950349875MVA;2124;28579;;;;;;;;;;;;2124;;;;20100621;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;2124;1;2215334;110 mm x 45� sort PP bend;;3000;EA;;20100621;;;
3
+ BL;2;2124;1;2215338;110 mm x 88� sort PP bend;;3000;EA;;20100621;;;
4
+ BL;3;2124;1;2215337;75 mm x 88� sort PP bend;;3000;EA;;20100621;;;
5
+ BL;4;2124;1;2215328;75 mm x 15� sort PP bend;;3000;EA;;20100621;;;
6
+ BL;5;2124;1;2215331;75 mm x 30� sort PP bend;;3000;EA;;20100621;;;
7
+ BL;6;2124;1;2215333;75 mm x 45� sort PP bend;;3000;EA;;20100621;;;
8
+ BL;7;2124;1;2215324;75 mm sort PP dobbeltmuffe;;3000;EA;;20100621;;;
9
+ BL;8;2124;1;2215325;110 mm sort PP dobbeltmuffe;;3000;EA;;20100621;;;
10
+ BL;9;2124;1;2215326;75 mm sort PP l�pemuffe Wafix;;3000;EA;;20100621;;;
11
+ BL;10;2124;1;2214523;32 mm x 15' PP-HT bend hvit;;3000;EA;;20100621;;;
12
+ BL;11;2124;1;2214527;32 mm x 30' PP-HT bend hvit;;3000;EA;;20100621;;;
13
+ BL;12;2124;1;2214534;32 mm x 45' PP-HT bend hvit;;3000;EA;;20100621;;;
14
+ BL;13;2124;1;2214512;32 mm PP-HT l�pemuffe hvit;;3000;EA;;20100621;;;
15
+ BL;14;2124;1;2214502;32 mm PP-HT dobbelmuffe hvit;;3000;EA;;20100621;;;
16
+ BL;15;2124;1;2214553;32 x 32 mm x 45' PP-HT gren;;1000;EA;;20100621;;;
17
+ BL;16;2124;1;5110093;15x1/2" Q&E veggboks M6 enkel;;3000;EA;;20100621;;;
@@ -0,0 +1,2 @@
1
+ BH;EFONELFO;3.0;;NO986692002MVA;1465;650517;;;5000;;5000;;;;;lager;;1465/5000/lager;;;;20100601;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;1465;1;8000502;200L OSO STD BEREDER SUPER S;;200;EA;;20100601;;;
@@ -0,0 +1,4 @@
1
+ BH;EFONELFO;4.0;;NO986692002MVA;1464;650517;;;5000;;5000;;;;;lager;;1464/5000/lager;;;;20100601;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;1464;1;5118157;25 MM ROTH SKAPGJENNOMF�RING;;2000;EA;;20100601;;;
3
+ BL;2;1464;1;5118207;ROTH ENKEL KLAMMER 25MM;;5000;EA;;20100601;;;
4
+ BL;3;1464;1;5118214;ROTH KLAMMER DOBBEL 25 MM;;5000;EA;;20100601;;;
@@ -0,0 +1,2 @@
1
+ BH;EFONELFO;4.0;;NO986692002MVA;1462;650517;;;5423;;5423;;;;;Kirkeveien;Sigrid;1462/5423/Kirkeveien E, ;;;;20100601;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;1462;1;8000503;300L OSO STD BEREDER SUPER S;;100;EA;;20100601;;;
@@ -0,0 +1,3 @@
1
+ BH;EFONELFO;4.0;;NO986692002MVA;1465;650517;;;5000;;5000;;;;;lager;;1465/5000/lager;;;;20100601;;;;;;;;;;;;;;;;;;;;;;;;;;
2
+ BL;1;1465;1;8000502;200L OSO STD BEREDER SUPER S;;200;EA;;20100601;;;
3
+ BT;Her er litt fritekst