xmlconv2 2.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.
Files changed (108) hide show
  1. data/History.txt +6 -0
  2. data/LICENCE.txt +339 -0
  3. data/Manifest.txt +107 -0
  4. data/README.txt +25 -0
  5. data/Rakefile +28 -0
  6. data/bin/admin +65 -0
  7. data/bin/xmlconvd +19 -0
  8. data/data/grammar/i2.grammar +73 -0
  9. data/src/conversion/bdd_geh.rb +281 -0
  10. data/src/conversion/bdd_i2.rb +102 -0
  11. data/src/conversion/bdd_xml.rb +242 -0
  12. data/src/conversion/geh_bdd.rb +165 -0
  13. data/src/conversion/i2_bdd.rb +271 -0
  14. data/src/conversion/xml_bdd.rb +125 -0
  15. data/src/custom/lookandfeel.rb +47 -0
  16. data/src/i2/address.rb +33 -0
  17. data/src/i2/date.rb +37 -0
  18. data/src/i2/document.rb +26 -0
  19. data/src/i2/header.rb +24 -0
  20. data/src/i2/order.rb +44 -0
  21. data/src/i2/parser.rb +25 -0
  22. data/src/i2/position.rb +37 -0
  23. data/src/i2/record.rb +11 -0
  24. data/src/model/address.rb +20 -0
  25. data/src/model/agreement.rb +10 -0
  26. data/src/model/bdd.rb +26 -0
  27. data/src/model/bsr.rb +16 -0
  28. data/src/model/delivery.rb +15 -0
  29. data/src/model/delivery_item.rb +18 -0
  30. data/src/model/freetext_container.rb +26 -0
  31. data/src/model/id_container.rb +15 -0
  32. data/src/model/invoice.rb +18 -0
  33. data/src/model/invoice_item.rb +11 -0
  34. data/src/model/item.rb +19 -0
  35. data/src/model/item_container.rb +15 -0
  36. data/src/model/name.rb +27 -0
  37. data/src/model/part_info.rb +10 -0
  38. data/src/model/part_info_container.rb +15 -0
  39. data/src/model/party.rb +23 -0
  40. data/src/model/party_container.rb +20 -0
  41. data/src/model/price.rb +10 -0
  42. data/src/model/price_container.rb +18 -0
  43. data/src/model/transaction.rb +28 -0
  44. data/src/state/global.rb +28 -0
  45. data/src/state/global_predefine.rb +11 -0
  46. data/src/state/login.rb +38 -0
  47. data/src/state/transaction.rb +13 -0
  48. data/src/state/transactions.rb +130 -0
  49. data/src/util/application.rb +143 -0
  50. data/src/util/destination.rb +130 -0
  51. data/src/util/invoicer.rb +72 -0
  52. data/src/util/known_user.rb +16 -0
  53. data/src/util/polling_manager.rb +78 -0
  54. data/src/util/session.rb +23 -0
  55. data/src/util/transaction.rb +105 -0
  56. data/src/util/validator.rb +20 -0
  57. data/src/view/foot.rb +27 -0
  58. data/src/view/head.rb +13 -0
  59. data/src/view/login.rb +36 -0
  60. data/src/view/navigation.rb +30 -0
  61. data/src/view/navigationlink.rb +21 -0
  62. data/src/view/pager.rb +73 -0
  63. data/src/view/preformatted.rb +39 -0
  64. data/src/view/template.rb +17 -0
  65. data/src/view/transaction.rb +42 -0
  66. data/src/view/transactions.rb +90 -0
  67. data/test/mock.rb +149 -0
  68. data/test/suite.rb +16 -0
  69. data/test/test_conversion/bdd_geh.rb +533 -0
  70. data/test/test_conversion/bdd_i2.rb +314 -0
  71. data/test/test_conversion/bdd_xml.rb +556 -0
  72. data/test/test_conversion/geh_bdd.rb +372 -0
  73. data/test/test_conversion/i2_bdd.rb +804 -0
  74. data/test/test_conversion/xml_bdd.rb +203 -0
  75. data/test/test_i2/address.rb +88 -0
  76. data/test/test_i2/date.rb +49 -0
  77. data/test/test_i2/document.rb +62 -0
  78. data/test/test_i2/header.rb +39 -0
  79. data/test/test_i2/order.rb +94 -0
  80. data/test/test_i2/parser.rb +309 -0
  81. data/test/test_i2/position.rb +65 -0
  82. data/test/test_integration/geh_i2.rb +312 -0
  83. data/test/test_integration/i2_geh.rb +449 -0
  84. data/test/test_integration/i2_xml.rb +162 -0
  85. data/test/test_integration/xml_i2.rb +254 -0
  86. data/test/test_model/address.rb +35 -0
  87. data/test/test_model/agreement.rb +22 -0
  88. data/test/test_model/bdd.rb +55 -0
  89. data/test/test_model/bsr.rb +38 -0
  90. data/test/test_model/delivery.rb +79 -0
  91. data/test/test_model/delivery_item.rb +52 -0
  92. data/test/test_model/freetext_container.rb +45 -0
  93. data/test/test_model/invoice.rb +65 -0
  94. data/test/test_model/invoice_item.rb +41 -0
  95. data/test/test_model/name.rb +57 -0
  96. data/test/test_model/part_info.rb +24 -0
  97. data/test/test_model/party.rb +96 -0
  98. data/test/test_model/price.rb +24 -0
  99. data/test/test_util/application.rb +168 -0
  100. data/test/test_util/destination.rb +197 -0
  101. data/test/test_util/invoicer.rb +36 -0
  102. data/test/test_util/polling_manager.rb +111 -0
  103. data/test/test_util/transaction.rb +129 -0
  104. data/user-stories/UserStories_XmlConv2.txt +381 -0
  105. data/user-stories/doku/ABB.incoming.HTTP.invoice.xml +315 -0
  106. data/user-stories/doku/ABB.received.xml +259 -0
  107. data/user-stories/doku/BO_OrderProcessing.sxw +0 -0
  108. metadata +195 -0
@@ -0,0 +1,254 @@
1
+ #!/usr/bin/env ruby
2
+ # Integration::TestXmlI2 -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('..', File.dirname(__FILE__))
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'util/transaction'
9
+ require 'util/destination'
10
+ require 'conversion/xml_bdd'
11
+ require 'conversion/bdd_i2'
12
+ require 'mock'
13
+
14
+ module XmlConv
15
+ module Integration
16
+ class TestXmlI2 < Test::Unit::TestCase
17
+ def setup
18
+ @src = <<-EOS
19
+ <?xml version="1.0" encoding="ISO-8859-1"?>
20
+ <!DOCTYPE BDD SYSTEM "ABB BDD.dtd">
21
+ <BDD Version="2">
22
+ <BSR Version="3">
23
+ <Timestamp Zone="+1">20040416151630</Timestamp>
24
+ <Verb>Place</Verb>
25
+ <Noun>Order</Noun>
26
+ <Party Role="Customer" Version="2">
27
+ <Name>Winterhalter + Fenner AG</Name>
28
+ <PartyId Domain="ACC">%%%99999%%% Kundennummer ElectroLAN</PartyId>
29
+ </Party>
30
+ </BSR>
31
+ <Delivery Version="3">
32
+ <Status Date="20040416151441" Domain="">Order</Status>
33
+ <DeliveryId Domain="Customer">B-465178 W</DeliveryId>
34
+ <Party Version="2" Role="Seller">
35
+ <Name>Plica AG</Name>
36
+ <Address>
37
+ <AddressLine>Z�rcherstr. 350/Postfach 173</AddressLine>
38
+ <City>Frauenfeld</City>
39
+ <ZipCode Domain="">8501</ZipCode>
40
+ </Address>
41
+ </Party>
42
+ <Party Version="2" Role="Customer">
43
+ <Name>Winterhalter + Fenner AG</Name>
44
+ <Phone Domain="Business">01 / 839 58 44</Phone>
45
+ <Address>
46
+ <AddressLine>Birgistrasse 10</AddressLine>
47
+ <City>Wallisellen</City>
48
+ <ZipCode Domain="CH">8304</ZipCode>
49
+ </Address>
50
+ <Party Role="Employee">
51
+ <Name>
52
+ <LastName>Russo Giovanni</LastName>
53
+ </Name>
54
+ <Competency>Sachbearbeiter</Competency>
55
+ </Party>
56
+ <Party Role="ShipTo">
57
+ <Name>Winterhalter + Fenner AG</Name>
58
+ <PartyId Domain="ACC">%%%99999%%% Lieferadressnummer</PartyId>
59
+ <Address>
60
+ <AddressLine>Filiale Wallisellen</AddressLine>
61
+ <AddressLine>Hertistrasse 31</AddressLine>
62
+ <City>Wallisellen</City>
63
+ <ZipCode Domain="CH">8304</ZipCode>
64
+ </Address>
65
+ </Party>
66
+ <Party Role="BillTo">
67
+ <Name>Winterhalter + Fenner AG</Name>
68
+ <PartyId Domain="ACC">%%%99999%%% Rechnungsadressnummer</PartyId>
69
+ <Address>
70
+ <AddressLine>Birgistrasse 10</AddressLine>
71
+ <City>Wallisellen</City>
72
+ <ZipCode Domain="CH">8304</ZipCode>
73
+ </Address>
74
+ </Party>
75
+ </Party>
76
+ <DeliveryItem>
77
+ <LineNo>2508466</LineNo>
78
+ <PartId>
79
+ <IdentNo Domain="ET-NUMMER">125301307</IdentNo>
80
+ <IdentNo Domain="LIEFERANTENARTIKEL">15.0205.025</IdentNo>
81
+ </PartId>
82
+ <Qty>7200</Qty>
83
+ <FreeText Type="BEZEICHNUNG">KRF-ROHR PE O/DRAHT M25 OR</FreeText>
84
+ <DeliveryDate>14.04.2004</DeliveryDate>
85
+ </DeliveryItem>
86
+ <DeliveryItem>
87
+ <LineNo>2508467</LineNo>
88
+ <PartId>
89
+ <IdentNo Domain="ET-NUMMER">125301607</IdentNo>
90
+ <IdentNo Domain="LIEFERANTENARTIKEL">15.0202.550</IdentNo>
91
+ </PartId>
92
+ <Qty>900</Qty>
93
+ <FreeText Type="BEZEICHNUNG">KRF-ROHR PE O/DRAHT M50 OR</FreeText>
94
+ <DeliveryDate>SOFORT</DeliveryDate>
95
+ </DeliveryItem>
96
+ <DeliveryItem>
97
+ <LineNo>2508468</LineNo>
98
+ <PartId>
99
+ <IdentNo Domain="ET-NUMMER">125301707</IdentNo>
100
+ <IdentNo Domain="LIEFERANTENARTIKEL">15.0202.563</IdentNo>
101
+ </PartId>
102
+ <Qty>250</Qty>
103
+ <FreeText Type="BEZEICHNUNG">KRF-ROHR PE O/DRAHT M63 OR</FreeText>
104
+ <DeliveryDate>14.04.2004</DeliveryDate>
105
+ </DeliveryItem>
106
+ </Delivery>
107
+ </BDD>
108
+ EOS
109
+ @xml_doc = REXML::Document.new(@src)
110
+ @target_dir = File.expand_path('data/xml_i2',
111
+ File.dirname(__FILE__))
112
+ clear_dir
113
+ end
114
+ def teardown
115
+ clear_dir
116
+ end
117
+ def clear_dir
118
+ if(File.exist?(@target_dir))
119
+ FileUtils.rm_r(@target_dir)
120
+ end
121
+ end
122
+ def test_xml_i2
123
+ bdd = Conversion::XmlBdd.convert(@xml_doc)
124
+ i2_doc = Conversion::BddI2.convert(bdd)
125
+ result = i2_doc.to_s.split("\n")
126
+ expected = <<-EOS
127
+ 001:EPIN_PL
128
+ 002:ORDERX
129
+ 003:220
130
+ 010:#{i2_doc.filename}
131
+ 100:%%%99999%%% Kundennummer ElectroLAN
132
+ 101:B-465178 W
133
+ 201:EP
134
+ 220:Russo Giovanni
135
+ 201:DP
136
+ 202:%%%99999%%% Lieferadressnummer
137
+ 220:Winterhalter + Fenner AG
138
+ 221:Filiale Wallisellen
139
+ 222:Hertistrasse 31
140
+ 223:Wallisellen
141
+ 225:8304
142
+ 201:BY
143
+ 202:%%%99999%%% Rechnungsadressnummer
144
+ 220:Winterhalter + Fenner AG
145
+ 222:Birgistrasse 10
146
+ 223:Wallisellen
147
+ 225:8304
148
+ 237:61
149
+ 300:4
150
+ 301:#{Date.today.strftime('%Y%m%d')}
151
+ 500:2508466
152
+ 501:125301307
153
+ 502:15.0205.025
154
+ 520:7200
155
+ 540:2
156
+ 541:20040414
157
+ 500:2508467
158
+ 501:125301607
159
+ 502:15.0202.550
160
+ 520:900
161
+ 540:2
162
+ 541:#{Date.today.strftime('%Y%m%d')}
163
+ 500:2508468
164
+ 501:125301707
165
+ 502:15.0202.563
166
+ 520:250
167
+ 540:2
168
+ 541:20040414
169
+ EOS
170
+ expected.split("\n").each_with_index { |line, index|
171
+ assert_equal(line, result[index])
172
+ }
173
+ end
174
+ def test_execute_transaction
175
+ storage = Mock.new('Storage')
176
+ storage.__next(:transaction) { |block|
177
+ block.call
178
+ }
179
+ ODBA.storage = storage
180
+ cache = Mock.new('Cache')
181
+ cache.__next(:store) { |persistable|
182
+ assert_instance_of(Util::DestinationDir, persistable)
183
+ }
184
+ ODBA.cache = cache
185
+ destination = Util::DestinationDir.new
186
+ destination.path = @target_dir
187
+ transaction = Util::Transaction.new
188
+ transaction.reader = "XmlBdd"
189
+ transaction.writer = "BddI2"
190
+ transaction.input = @src
191
+ transaction.destination = destination
192
+ output = transaction.execute
193
+ result = output.to_s.split("\n")
194
+ expected = <<-EOS
195
+ 001:EPIN_PL
196
+ 002:ORDERX
197
+ 003:220
198
+ 010:#{transaction.destination.filename}
199
+ 100:%%%99999%%% Kundennummer ElectroLAN
200
+ 101:B-465178 W
201
+ 201:EP
202
+ 220:Russo Giovanni
203
+ 201:DP
204
+ 202:%%%99999%%% Lieferadressnummer
205
+ 220:Winterhalter + Fenner AG
206
+ 221:Filiale Wallisellen
207
+ 222:Hertistrasse 31
208
+ 223:Wallisellen
209
+ 225:8304
210
+ 201:BY
211
+ 202:%%%99999%%% Rechnungsadressnummer
212
+ 220:Winterhalter + Fenner AG
213
+ 222:Birgistrasse 10
214
+ 223:Wallisellen
215
+ 225:8304
216
+ 237:61
217
+ 300:4
218
+ 301:#{Date.today.strftime('%Y%m%d')}
219
+ 500:2508466
220
+ 501:125301307
221
+ 502:15.0205.025
222
+ 520:7200
223
+ 540:2
224
+ 541:20040414
225
+ 500:2508467
226
+ 501:125301607
227
+ 502:15.0202.550
228
+ 520:900
229
+ 540:2
230
+ 541:#{Date.today.strftime('%Y%m%d')}
231
+ 500:2508468
232
+ 501:125301707
233
+ 502:15.0202.563
234
+ 520:250
235
+ 540:2
236
+ 541:20040414
237
+ EOS
238
+ expected.split("\n").each_with_index { |line, index|
239
+ assert_equal(line, result[index])
240
+ }
241
+ assert(File.exist?(@target_dir), 'Target Directory does not exist')
242
+ entries = Dir.entries(@target_dir)
243
+ assert_equal(3, entries.size)
244
+ entry = entries.sort.last
245
+ path = File.expand_path(entry, @target_dir)
246
+ content = File.read(path)
247
+ assert_equal(expected, content)
248
+ ensure
249
+ ODBA.storage = nil
250
+ ODBA.cache = nil
251
+ end
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # TestAddress -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'model/address'
9
+
10
+ module XmlConv
11
+ module Model
12
+ class TestAddress < Test::Unit::TestCase
13
+ def setup
14
+ @address = Address.new
15
+ end
16
+ def test_attr_accessors
17
+ assert_respond_to(@address, :city)
18
+ assert_respond_to(@address, :city=)
19
+ assert_respond_to(@address, :zip_code)
20
+ assert_respond_to(@address, :zip_code=)
21
+ assert_respond_to(@address, :country)
22
+ assert_respond_to(@address, :country=)
23
+ end
24
+ def test_attr_readers
25
+ assert_respond_to(@address, :lines)
26
+ end
27
+ def test_add_line
28
+ @address.add_line('line 1')
29
+ assert_equal(['line 1'], @address.lines)
30
+ @address.add_line('line 2')
31
+ assert_equal(['line 1', 'line 2'], @address.lines)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # TestAgreement -- xmlconv2 -- 22.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'model/agreement'
9
+
10
+ module XmlConv
11
+ module Model
12
+ class TestAgreement < Test::Unit::TestCase
13
+ def setup
14
+ @agreement = Agreement.new
15
+ end
16
+ def test_attr_accessors
17
+ assert_respond_to(@agreement, :terms_cond)
18
+ assert_respond_to(@agreement, :terms_cond=)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ # TestBdd -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'model/bdd'
9
+ require 'mock'
10
+ require 'flexmock'
11
+
12
+ module XmlConv
13
+ module Model
14
+ class TestBdd < Test::Unit::TestCase
15
+ def setup
16
+ @bdd = Bdd.new
17
+ end
18
+ def test_attr_accessors
19
+ assert_respond_to(@bdd, :bsr)
20
+ assert_respond_to(@bdd, :bsr=)
21
+ end
22
+ def test_attr_readers
23
+ assert_respond_to(@bdd, :deliveries)
24
+ assert_respond_to(@bdd, :invoices)
25
+ end
26
+ def test_add_delivery
27
+ delivery = Mock.new('Delivery')
28
+ assert_equal([], @bdd.deliveries)
29
+ @bdd.add_delivery(delivery)
30
+ assert_equal([delivery], @bdd.deliveries)
31
+ end
32
+ def test_add_invoice
33
+ invoice = Mock.new('Invoice')
34
+ assert_equal([], @bdd.invoices)
35
+ @bdd.add_invoice(invoice)
36
+ assert_equal([invoice], @bdd.invoices)
37
+ end
38
+ def test_invoiced_amount
39
+ assert_equal(0, @bdd.invoiced_amount)
40
+ invoice = FlexMock.new
41
+ price = FlexMock.new
42
+ @bdd.invoices.push(invoice, invoice)
43
+ invoice.mock_handle(:get_price, 4) { |purpose|
44
+ assert_equal('SummePositionen', purpose)
45
+ price
46
+ }
47
+ price.mock_handle(:amount) { '123.45' }
48
+ assert_equal(246.90, @bdd.invoiced_amount)
49
+ @bdd.deliveries.push(invoice)
50
+ assert_equal(246.90, @bdd.invoiced_amount)
51
+ invoice.mock_verify
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+ # TestBsr -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'model/bsr'
9
+ require 'mock'
10
+
11
+ module XmlConv
12
+ module Model
13
+ class TestBsr < Test::Unit::TestCase
14
+ def setup
15
+ @bsr = Bsr.new
16
+ end
17
+ def test_attr_readers
18
+ assert_respond_to(@bsr, :parties)
19
+ end
20
+ def test_attr_accessors
21
+ assert_respond_to(@bsr, :timestamp)
22
+ assert_respond_to(@bsr, :timestamp=)
23
+ assert_respond_to(@bsr, :noun)
24
+ assert_respond_to(@bsr, :noun=)
25
+ assert_respond_to(@bsr, :verb)
26
+ assert_respond_to(@bsr, :verb=)
27
+ end
28
+ def test_bsr_id
29
+ party = Mock.new('Party')
30
+ party.__next(:role) { 'Customer' }
31
+ party.__next(:party_id) { 'id_string' }
32
+ @bsr.add_party(party)
33
+ assert_equal('id_string', @bsr.bsr_id)
34
+ party.__verify
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+ # TestDelivery -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../src', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'model/delivery'
9
+ require 'mock'
10
+
11
+ module XmlConv
12
+ module Model
13
+ class TestDelivery < Test::Unit::TestCase
14
+ def setup
15
+ @delivery = Delivery.new
16
+ end
17
+ def test_attr_accessors
18
+ assert_respond_to(@delivery, :customer)
19
+ assert_respond_to(@delivery, :customer=)
20
+ assert_respond_to(@delivery, :bsr)
21
+ assert_respond_to(@delivery, :bsr=)
22
+ assert_respond_to(@delivery, :agreement)
23
+ assert_respond_to(@delivery, :agreement=)
24
+ assert_respond_to(@delivery, :free_text)
25
+ assert_respond_to(@delivery, :free_text=)
26
+ assert_respond_to(@delivery, :status)
27
+ assert_respond_to(@delivery, :status=)
28
+ assert_respond_to(@delivery, :status_date)
29
+ assert_respond_to(@delivery, :status_date=)
30
+ end
31
+ def test_attr_readers
32
+ assert_respond_to(@delivery, :items)
33
+ assert_respond_to(@delivery, :parties)
34
+ assert_respond_to(@delivery, :ids)
35
+ assert_respond_to(@delivery, :customer_id)
36
+ assert_respond_to(@delivery, :prices)
37
+ end
38
+ def test_add_free_text
39
+ assert_respond_to(@delivery, :add_free_text)
40
+ end
41
+ def test_bsr_id
42
+ bsr = Mock.new('BSR')
43
+ bsr.__next(:bsr_id) { 'id_string' }
44
+ assert_nil(@delivery.bsr_id)
45
+ @delivery.bsr = bsr
46
+ assert_equal('id_string', @delivery.bsr_id)
47
+ bsr.__verify
48
+ end
49
+ def test_add_party__customer
50
+ party = Mock.new('Customer')
51
+ party.__next(:role) { 'Customer' }
52
+ @delivery.add_party(party)
53
+ assert_equal(party, @delivery.customer)
54
+ assert_equal([party], @delivery.parties)
55
+ party.__verify
56
+ end
57
+ def test_add_party__seller
58
+ party = Mock.new('Seller')
59
+ party.__next(:role) { 'Seller' }
60
+ @delivery.add_party(party)
61
+ assert_equal(party, @delivery.seller)
62
+ assert_equal([party], @delivery.parties)
63
+ party.__verify
64
+ end
65
+ def test_add_item
66
+ item = Mock.new
67
+ @delivery.add_item(item)
68
+ assert_equal([item], @delivery.items)
69
+ item.__verify
70
+ end
71
+ def test_add_price
72
+ assert_equal([], @delivery.prices)
73
+ price = Mock.new('BruttoPreis')
74
+ @delivery.add_price(price)
75
+ assert_equal([price], @delivery.prices)
76
+ end
77
+ end
78
+ end
79
+ end