sandoz.bbmb.ch 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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.travis.yml +26 -0
  4. data/Gemfile +12 -0
  5. data/History.txt +6 -0
  6. data/LICENSE +339 -0
  7. data/Rakefile +21 -0
  8. data/doc/index.rbx +14 -0
  9. data/doc/resources/activex/BbmbBarcodeReader.CAB +0 -0
  10. data/doc/resources/activex/BbmbBarcodeReader2.CAB +0 -0
  11. data/doc/resources/bbmb.css +301 -0
  12. data/doc/resources/errors/appdown.html +14 -0
  13. data/doc/resources/javascript/bcreader.js +131 -0
  14. data/doc/resources/javascript/order.js +65 -0
  15. data/doc/resources/javascript/widget/ContentToggler.js +60 -0
  16. data/doc/resources/javascript/widget/__package__.js +2 -0
  17. data/doc/resources/javascript/widget/templates/ContentToggler.html +4 -0
  18. data/doc/resources/logo.png +0 -0
  19. data/lib/bbmb/html/util/lookandfeel.rb +202 -0
  20. data/lib/bbmb/sandoz.rb +4 -0
  21. data/lib/bbmb/sandoz/html/state/viral/customer.rb +25 -0
  22. data/lib/bbmb/sandoz/version.rb +5 -0
  23. data/lib/bbmb/util/csv_importer.rb +123 -0
  24. data/readme.md +28 -0
  25. data/sandoz.bbmb.ch.gemspec +45 -0
  26. data/test/rcov +2 -0
  27. data/test/selenium.rb +1687 -0
  28. data/test/selenium/selenium-server.jar +0 -0
  29. data/test/selenium/test_current_order.rb +336 -0
  30. data/test/selenium/test_customer.rb +363 -0
  31. data/test/selenium/test_customers.rb +92 -0
  32. data/test/selenium/test_favorites.rb +257 -0
  33. data/test/selenium/test_favorites_result.rb +81 -0
  34. data/test/selenium/test_history.rb +112 -0
  35. data/test/selenium/test_login.rb +112 -0
  36. data/test/selenium/test_orders.rb +111 -0
  37. data/test/selenium/test_result.rb +157 -0
  38. data/test/selenium/unit.rb +146 -0
  39. data/test/stub/http_server.rb +140 -0
  40. data/test/stub/persistence.rb +58 -0
  41. data/test/suite.rb +15 -0
  42. data/test/util/data/Artikel.TXT +50 -0
  43. data/test/util/data/Kunden.TXT +14 -0
  44. data/test/util/test_csv_importer.rb +136 -0
  45. metadata +414 -0
Binary file
@@ -0,0 +1,336 @@
1
+ #!/usr/bin/env ruby
2
+ # Selenium::TestCurrentOrder -- bbmb.ch -- 22.09.2006 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('..', File.dirname(__FILE__))
5
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
6
+
7
+ require 'selenium/unit'
8
+
9
+ module BBMB
10
+ module Selenium
11
+ class TestCurrentOrder < Test::Unit::TestCase
12
+ include Selenium::TestCase
13
+ def test_current_order__empty
14
+ user = login_customer
15
+ assert_equal "BBMB | Home", @selenium.get_title
16
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
17
+ assert @selenium.is_text_present("Sie sind angemeldet als test.customer@bbmb.ch")
18
+ assert @selenium.is_element_present("file_chooser")
19
+ assert @selenium.is_element_present("order_transfer")
20
+ assert_equal "Datei zu Best.", @selenium.get_value("order_transfer")
21
+ assert @selenium.is_element_present("query")
22
+ assert @selenium.is_element_present("//input[@name='search']")
23
+ assert_equal "Suchen", @selenium.get_value("//input[@name='search']")
24
+ end
25
+ def test_current_order__with_position
26
+ BBMB.persistence.should_ignore_missing
27
+ product = Model::Product.new('12345')
28
+ product.description.de = 'product - a description'
29
+ product.price = Util::Money.new(11.50)
30
+ product.l1_price = Util::Money.new(12.50)
31
+ product.l1_qty = 2
32
+ product.l2_price = Util::Money.new(13.50)
33
+ product.l2_qty = 3
34
+ email = 'test.customer@bbmb.ch'
35
+ customer = Model::Customer.new('007')
36
+ customer.instance_variable_set('@email', email)
37
+ customer.current_order.add(15, product)
38
+ user = login_customer(customer)
39
+ assert_equal "BBMB | Home", @selenium.get_title
40
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
41
+ assert @selenium.is_text_present("Sie sind angemeldet als test.customer@bbmb.ch")
42
+ assert @selenium.is_element_present("file_chooser")
43
+ assert @selenium.is_element_present("order_transfer")
44
+ assert_equal "Datei zu Best.", @selenium.get_value("order_transfer")
45
+ assert @selenium.is_element_present("clear_order")
46
+ assert_equal "Bestellung löschen", @selenium.get_value("clear_order")
47
+ assert @selenium.is_text_present("2 Stk. à 12.50")
48
+ assert @selenium.is_text_present("3 Stk. à 13.50")
49
+ assert @selenium.is_element_present("reference")
50
+ assert @selenium.is_element_present("comment")
51
+ assert @selenium.is_element_present("document.forms[3].priority")
52
+ assert @selenium.is_element_present("commit")
53
+ assert_equal "Bestellung auslösen", @selenium.get_value("commit")
54
+ assert @selenium.is_text_present("Total Sfr.")
55
+ assert @selenium.is_element_present("total")
56
+ assert_equal "202.50", @selenium.get_text("total")
57
+ @selenium.click "document.forms[3].priority[6]"
58
+ sleep 0.5
59
+ assert_equal "252.50", @selenium.get_text("total")
60
+ @selenium.click "document.forms[3].priority[5]"
61
+ sleep 0.5
62
+ assert_equal "282.50", @selenium.get_text("total")
63
+ @selenium.refresh
64
+ @selenium.wait_for_page_to_load "30000"
65
+ assert_equal "on", @selenium.get_value("document.forms[3].priority[5]")
66
+ @selenium.click "document.forms[3].priority[4]"
67
+ sleep 0.5
68
+ assert_equal "202.50", @selenium.get_text("total")
69
+ @selenium.click "document.forms[3].priority[3]"
70
+ sleep 0.5
71
+ assert_equal "202.50", @selenium.get_text("total")
72
+ @selenium.click "document.forms[3].priority[2]"
73
+ sleep 0.5
74
+ assert_equal "202.50", @selenium.get_text("total")
75
+ @selenium.click "document.forms[3].priority[1]"
76
+ sleep 0.5
77
+ assert_equal "202.50", @selenium.get_text("total")
78
+ =begin # works, but throws an error when run with other tests, reason unclear
79
+ @selenium.choose_cancel_on_next_confirmation
80
+ @selenium.click("clear_order")
81
+ assert_equal "BBMB | Home", @selenium.get_title
82
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
83
+ assert_equal "Wollen Sie wirklich die gesamte Bestellung löschen?",
84
+ @selenium.get_confirmation
85
+ @selenium.click("clear_order")
86
+ =end
87
+ @selenium.open('/de/clear_order') # <- workaround
88
+ @selenium.wait_for_page_to_load "30000"
89
+ @selenium.choose_cancel_on_next_confirmation
90
+ assert_equal "BBMB | Home", @selenium.get_title
91
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
92
+ end
93
+ def test_current_order__commit
94
+ BBMB.persistence.should_ignore_missing
95
+ product = Model::Product.new('12345')
96
+ product.description.de = 'product - a description'
97
+ product.price = Util::Money.new(11.50)
98
+ product.l1_price = Util::Money.new(12.50)
99
+ product.l1_qty = 2
100
+ product.l2_price = Util::Money.new(13.50)
101
+ product.l2_qty = 3
102
+ email = 'test.customer@bbmb.ch'
103
+ customer = Model::Customer.new('007')
104
+ customer.instance_variable_set('@email', email)
105
+ current = customer.current_order
106
+ current.add(15, product)
107
+ user = login_customer(customer)
108
+ assert_equal "BBMB | Home", @selenium.get_title
109
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
110
+ assert @selenium.is_text_present("Sie sind angemeldet als test.customer@bbmb.ch")
111
+ assert @selenium.is_element_present("commit")
112
+ assert_equal "Bestellung auslösen", @selenium.get_value("commit")
113
+ assert @selenium.is_element_present("accept_terms")
114
+ @selenium.click "commit"
115
+ @selenium.wait_for_page_to_load "30000"
116
+ assert @selenium.is_text_present("Bitte akzeptieren Sie die Allgemeinen Geschäftsbedingungen (\"AGB\") der Sandoz Pharmaceuticals AG, vgl. unten.")
117
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
118
+ assert @selenium.is_element_present("commit")
119
+ assert_equal "Bestellung auslösen", @selenium.get_value("commit")
120
+ @selenium.click "accept_terms"
121
+ flexstub(BBMB::Util::Mail).should_receive(:send_order).and_return { |order|
122
+ assert_equal(current, order)
123
+ assert_equal(1, order.commit_id)
124
+ assert_not_nil(order.commit_time)
125
+ }
126
+ @selenium.click "commit"
127
+ @selenium.wait_for_page_to_load "30000"
128
+ assert @selenium.is_text_present("Ihre Bestellung wurde an die Sandoz AG versandt.")
129
+ @selenium.wait_for_page_to_load "30000"
130
+ assert_equal "BBMB | Home", @selenium.get_title
131
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
132
+ @selenium.click "link=Archiv"
133
+ @selenium.wait_for_page_to_load "30000"
134
+ assert_equal "BBMB | Archiv", @selenium.get_title
135
+ assert @selenium.is_text_present(Date.today.strftime('%d.%m.%Y'))
136
+ assert @selenium.is_text_present("202.50")
137
+ end
138
+ def test_current_order__commit__error
139
+ BBMB.persistence.should_ignore_missing
140
+ product = Model::Product.new('12345')
141
+ product.description.de = 'product - a description'
142
+ product.price = Util::Money.new(11.50)
143
+ product.l1_price = Util::Money.new(12.50)
144
+ product.l1_qty = 2
145
+ product.l2_price = Util::Money.new(13.50)
146
+ product.l2_qty = 3
147
+ email = 'test.customer@bbmb.ch'
148
+ customer = Model::Customer.new('007')
149
+ customer.instance_variable_set('@email', email)
150
+ current = customer.current_order
151
+ current.add(15, product)
152
+ user = login_customer(customer)
153
+ assert_equal "BBMB | Home", @selenium.get_title
154
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
155
+ assert @selenium.is_text_present("Sie sind angemeldet als test.customer@bbmb.ch")
156
+ assert @selenium.is_element_present("commit")
157
+ assert_equal "Bestellung auslösen", @selenium.get_value("commit")
158
+ assert @selenium.is_element_present("accept_terms")
159
+ @selenium.click "accept_terms"
160
+ mail = flexstub(BBMB::Util::Mail)
161
+ mail.should_receive(:send_order).and_return { |order|
162
+ raise "some error"
163
+ }
164
+ mail.should_receive(:notify_error).with(RuntimeError).times(1)
165
+ @selenium.click "commit"
166
+ @selenium.wait_for_page_to_load "30000"
167
+ assert @selenium.is_text_present("Ihre Bestellung wurde an die Sandoz AG versandt.")
168
+ @selenium.wait_for_page_to_load "30000"
169
+ assert_equal "BBMB | Home", @selenium.get_title
170
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
171
+ @selenium.click "link=Archiv"
172
+ @selenium.wait_for_page_to_load "30000"
173
+ assert_equal "BBMB | Archiv", @selenium.get_title
174
+ assert @selenium.is_text_present(Date.today.strftime('%d.%m.%Y'))
175
+ assert @selenium.is_text_present("202.50")
176
+ end
177
+ def test_current_order__transfer_dat
178
+ datadir = File.expand_path('data', File.dirname(__FILE__))
179
+ BBMB.persistence.should_ignore_missing
180
+ user = login_customer
181
+ assert_equal "BBMB | Home", @selenium.get_title
182
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
183
+ assert @selenium.is_element_present("file_chooser")
184
+ assert @selenium.is_element_present("order_transfer")
185
+
186
+ src = <<-EOS
187
+ 030201899 0624427Mycolog creme tube 15 g 000176803710902940
188
+ EOS
189
+ path = File.join(datadir, 'Transfer.dat')
190
+ FileUtils.mkdir_p(datadir)
191
+ File.open(path, 'w') { |fh| fh.puts src }
192
+
193
+ prod1 = Model::Product.new('1')
194
+ prod1.description.de = 'product - by pcode'
195
+ prod1.price = Util::Money.new(11.50)
196
+ prod2 = Model::Product.new('2')
197
+ prod2.description.de = 'product - by ean13'
198
+ prod2.price = Util::Money.new(21.50)
199
+
200
+ prodclass = flexstub(Model::Product)
201
+ prodclass.should_receive(:find_by_pcode).and_return { |pcode|
202
+ if(pcode == '624427')
203
+ prod1
204
+ end
205
+ }
206
+ prodclass.should_receive(:find_by_ean13).and_return { |ean13|
207
+ if(ean13 == '7680523160141')
208
+ prod2
209
+ end
210
+ }
211
+
212
+ @selenium.type "file_chooser", path
213
+ @http_server.inject_params = {"file_chooser", [src]}
214
+ @selenium.click "order_transfer"
215
+ @selenium.wait_for_page_to_load "30000"
216
+
217
+ assert @selenium.is_text_present("Aktuelle Bestellung: 2 Positionen"),
218
+ "Most likely firefox is blocking Javascript-Fileupload."
219
+ assert @selenium.is_text_present("product - by pcode")
220
+ assert @selenium.is_text_present("product - by ean13")
221
+ assert @selenium.is_text_present("Unidentifiziertes Produkt (Tramal gtt 10 ml 100 mg/ml, EAN-Code: 7680437880197, Pharmacode: 933022)")
222
+ assert @selenium.is_text_present("Total Sfr. 33.00")
223
+
224
+ @selenium.click "name=delete index=2"
225
+ @selenium.wait_for_page_to_load "30000"
226
+ assert_equal "BBMB | Home", @selenium.get_title
227
+ assert !@selenium.is_text_present("Unidentifiziertes Produkt (Tramal gtt 10 ml 100 mg/ml, EAN-Code: 7680437880197, Pharmacode: 933022)")
228
+ assert @selenium.is_text_present("Aktuelle Bestellung: 2 Positionen")
229
+
230
+ @selenium.click "name=delete index=1"
231
+ @selenium.wait_for_page_to_load "30000"
232
+ assert_equal "BBMB | Home", @selenium.get_title
233
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
234
+ assert @selenium.is_text_present("product - by ean13")
235
+ assert !@selenium.is_text_present("product - by pcode")
236
+ ensure
237
+ FileUtils.rm_r(datadir) if(File.exist?(datadir))
238
+ end
239
+ def test_current_order__scan
240
+ BBMB.persistence.should_ignore_missing
241
+ user = login_customer
242
+ assert_equal "BBMB | Home", @selenium.get_title
243
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
244
+
245
+ prod1 = Model::Product.new('1')
246
+ prod1.description.de = 'product 1'
247
+ prod1.price = Util::Money.new(11.50)
248
+ prodclass = flexstub(Model::Product)
249
+ prodclass.should_receive(:find_by_ean13).and_return { |ean13|
250
+ if(ean13 == '7680523160141')
251
+ prod1
252
+ end
253
+ }
254
+
255
+ ## simulate barcode-reader
256
+ @selenium.open('/de/scan/EAN_13[7680523160141]/1/EAN_13[7680123456781]/1')
257
+ @selenium.wait_for_page_to_load "30000"
258
+
259
+ @selenium.open('/de/current_order')
260
+ @selenium.wait_for_page_to_load "30000"
261
+ assert_equal "BBMB | Home", @selenium.get_title
262
+
263
+ assert @selenium.is_text_present("Aktuelle Bestellung: 1 Positionen")
264
+ assert @selenium.is_text_present("product 1")
265
+ assert @selenium.is_text_present("Unidentifiziertes Produkt (EAN-Code: 7680123456781)")
266
+ assert @selenium.is_text_present("Total Sfr. 11.50")
267
+ end
268
+ def test_current_order__sort
269
+ BBMB.persistence.should_ignore_missing
270
+ product1 = Model::Product.new('12345')
271
+ product1.description.de = 'product 1'
272
+ product1.price = Util::Money.new(11.50)
273
+ product1.l1_price = Util::Money.new(12.50)
274
+ product1.l1_qty = 2
275
+ product1.l2_price = Util::Money.new(13.50)
276
+ product1.l2_qty = 3
277
+ product2 = Model::Product.new('23456')
278
+ product2.description.de = 'product 2'
279
+ product2.price = Util::Money.new(2.50)
280
+ product2.l1_price = Util::Money.new(1.50)
281
+ product2.l1_qty = 2
282
+ email = 'test.customer@bbmb.ch'
283
+ customer = Model::Customer.new('007')
284
+ customer.instance_variable_set('@email', email)
285
+ customer.current_order.add(15, product1)
286
+ customer.current_order.add(100, product2)
287
+ user = login_customer(customer)
288
+ assert_equal "BBMB | Home", @selenium.get_title
289
+ assert @selenium.is_text_present("Aktuelle Bestellung: 2 Positionen")
290
+ assert_equal "product 1", @selenium.get_text("//tr[2]/td[3]/a")
291
+ assert_equal "product 2", @selenium.get_text("//tr[4]/td[3]/a")
292
+ @selenium.click "link=Preis"
293
+ @selenium.wait_for_page_to_load "30000"
294
+ assert_equal "BBMB | Home", @selenium.get_title
295
+ assert @selenium.is_text_present("Aktuelle Bestellung: 2 Positionen")
296
+ assert_equal "product 2", @selenium.get_text("//tr[2]/td[3]/a")
297
+ assert_equal "product 1", @selenium.get_text("//tr[4]/td[3]/a")
298
+ @selenium.click "link=Preis"
299
+ @selenium.wait_for_page_to_load "30000"
300
+ assert_equal "BBMB | Home", @selenium.get_title
301
+ assert @selenium.is_text_present("Aktuelle Bestellung: 2 Positionen")
302
+ assert_equal "product 1", @selenium.get_text("//tr[2]/td[3]/a")
303
+ assert_equal "product 2", @selenium.get_text("//tr[4]/td[3]/a")
304
+ end
305
+ def test_current_order__barcode_controls
306
+ session = flexstub(@server['test:preset-session-id'])
307
+ session.should_receive(:client_activex?).and_return(true)
308
+ BBMB.persistence.should_ignore_missing
309
+ user = login_customer
310
+ assert_equal "BBMB | Home", @selenium.get_title
311
+ assert @selenium.is_text_present("Aktuelle Bestellung: 0 Positionen")
312
+ assert @selenium.is_element_present("//a[@name='barcode_usb']")
313
+ assert @selenium.is_element_present("//input[@name='barcode_button']")
314
+ assert @selenium.is_element_present("//input[@name='barcode_comport']")
315
+ end
316
+ def test_current_order__backorder
317
+ BBMB.persistence.should_ignore_missing
318
+ product = Model::Product.new('12345')
319
+ product.description.de = 'product - a description'
320
+ product.backorder = true
321
+ product.price = Util::Money.new(11.50)
322
+ product.l1_price = Util::Money.new(12.50)
323
+ product.l1_qty = 2
324
+ product.l2_price = Util::Money.new(13.50)
325
+ product.l2_qty = 3
326
+ email = 'test.customer@bbmb.ch'
327
+ customer = Model::Customer.new('007')
328
+ customer.instance_variable_set('@email', email)
329
+ customer.current_order.add(15, product)
330
+ user = login_customer(customer)
331
+ assert_equal "BBMB | Home", @selenium.get_title
332
+ assert @selenium.is_text_present("im Rückstand")
333
+ end
334
+ end
335
+ end
336
+ end
@@ -0,0 +1,363 @@
1
+ #!/usr/bin/env ruby
2
+ # Selenium::TestCustomer -- bbmb.ch -- 04.10.2006 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('..', File.dirname(__FILE__))
5
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
6
+
7
+ require 'selenium/unit'
8
+
9
+ module BBMB
10
+ module Selenium
11
+ class TestCustomer < Test::Unit::TestCase
12
+ include Selenium::TestCase
13
+ def test_customer
14
+ customer = BBMB::Model::Customer.new('007')
15
+ customer.organisation = 'Test-Customer'
16
+ customer.instance_variable_set('@email', 'test.customer@bbmb.ch')
17
+ customer.plz = '7777'
18
+ @persistence.should_receive(:all).and_return { |klass|
19
+ assert_equal(BBMB::Model::Customer, klass)
20
+ [customer]
21
+ }
22
+ user = login_admin
23
+ click "link=Test-Customer"
24
+ wait_for_page_to_load "30000"
25
+ assert_equal "BBMB | Kunde", get_title
26
+
27
+ assert_equal "Kunde*", get_text("//label[@for='organisation']")
28
+ assert is_element_present("organisation")
29
+ assert_equal "Test-Customer", get_value("organisation")
30
+
31
+ assert_equal "Kundennr*", get_text("//label[@for='customer_id']")
32
+ assert is_element_present("customer_id")
33
+ assert_equal "007", get_value("customer_id")
34
+
35
+ assert_equal "EAN-Code", get_text("//label[@for='ean13']")
36
+ assert is_element_present("ean13")
37
+
38
+ assert_equal "Umsatz", get_text("//label[@for='turnover']")
39
+ assert is_element_present("link=Sfr. 0.00")
40
+ url = "http://localhost:10080/de/orders/customer_id/007"
41
+ assert_equal url, get_attribute("//a[@name='turnover']@href")
42
+
43
+ assert is_element_present("link=Umsatz")
44
+ assert is_text_present("Sfr. 0.00 - Umsatz")
45
+ assert_equal "Anrede", get_text("//label[@for='title']")
46
+ assert is_element_present("title")
47
+ assert_equal "Titel", get_text("//label[@for='drtitle']")
48
+ assert is_element_present("drtitle")
49
+ assert_equal "Name", get_text("//label[@for='lastname']")
50
+ assert is_element_present("lastname")
51
+ assert_equal "Vorname", get_text("//label[@for='firstname']")
52
+ assert is_element_present("firstname")
53
+ assert_equal "Adresse*", get_text("//label[@for='address1']")
54
+ assert is_element_present("address1")
55
+ assert is_element_present("address2")
56
+ assert is_element_present("address3")
57
+ assert_equal "PLZ", get_text("//label[@for='plz']")
58
+ assert is_element_present("plz")
59
+ assert_equal "Ort", get_text("//label[@for='city']")
60
+ assert is_element_present("city")
61
+ assert is_text_present("PLZ/Ort")
62
+ assert_equal "Kanton", get_text("//label[@for='canton']")
63
+ assert is_element_present("canton")
64
+
65
+ assert_equal "Email*", get_text("//label[@for='email']")
66
+ assert is_element_present("email")
67
+ assert_equal "test.customer@bbmb.ch", get_value("email")
68
+
69
+ assert_equal "Tel. Geschäft", get_text("//label[@for='phone_business']")
70
+ assert is_element_present("phone_business")
71
+ assert_equal "Tel. Privat", get_text("//label[@for='phone_private']")
72
+ assert is_element_present("phone_private")
73
+ assert_equal "Tel. Mobile", get_text("//label[@for='phone_mobile']")
74
+ assert is_element_present("phone_mobile")
75
+ assert_equal "Fax", get_text("//label[@for='fax']")
76
+ assert is_element_present("fax")
77
+
78
+ assert is_element_present("change_pass")
79
+ assert is_element_present("generate_pass")
80
+ assert !is_element_present("pass")
81
+ assert !is_element_present("confirm_pass")
82
+
83
+ assert is_element_present("save")
84
+ assert_equal "Speichern", get_value("save")
85
+ end
86
+ def test_customer__save_errors
87
+ BBMB.server = flexmock('server')
88
+ BBMB.server.should_ignore_missing
89
+ BBMB.persistence.should_ignore_missing
90
+ customer = BBMB::Model::Customer.new('007')
91
+ customer.organisation = 'Test-Customer'
92
+ customer.instance_variable_set('@email', 'test.customer@bbmb.ch')
93
+ customer.plz = '7777'
94
+ @persistence.should_receive(:all).and_return { |klass|
95
+ assert_equal(BBMB::Model::Customer, klass)
96
+ [customer]
97
+ }
98
+ user = login_admin
99
+ click "link=Test-Customer"
100
+ wait_for_page_to_load "30000"
101
+
102
+ click "change_pass"
103
+ wait_for_page_to_load "30000"
104
+
105
+ assert is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
106
+
107
+ type "ean13", "768012345678"
108
+ click "save"
109
+ wait_for_page_to_load "30000"
110
+
111
+ assert is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
112
+ assert is_text_present("Das Passwort war leer.")
113
+ assert_equal "error", get_attribute("//label[@for='address1']@class")
114
+ assert_equal "error", get_attribute("//label[@for='pass']@class")
115
+ assert_equal "error", get_attribute("//label[@for='confirm_pass']@class")
116
+ assert_equal "error", get_attribute("//label[@for='ean13']@class")
117
+
118
+ type "address1", "Address"
119
+ type "pass", "secret"
120
+ type "confirm_pass", "terces"
121
+ click "save"
122
+ wait_for_page_to_load "30000"
123
+
124
+ assert is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
125
+ assert is_text_present("Das Passwort und die Bestätigung waren nicht identisch.")
126
+ assert is_text_present("Der EAN-Code war ungültig.")
127
+ end
128
+ def test_customer__save
129
+ BBMB.server = flexmock('server')
130
+ BBMB.server.should_ignore_missing
131
+ BBMB.persistence.should_ignore_missing
132
+ customer = BBMB::Model::Customer.new('007')
133
+ customer.organisation = 'Test-Customer'
134
+ customer.instance_variable_set('@email', 'test.customer@bbmb.ch')
135
+ customer.plz = '7777'
136
+ @persistence.should_receive(:all).and_return { |klass|
137
+ assert_equal(BBMB::Model::Customer, klass)
138
+ [customer]
139
+ }
140
+ user = login_admin
141
+ user.should_receive(:get_preference).and_return('')
142
+
143
+ click "link=Test-Customer"
144
+ wait_for_page_to_load "30000"
145
+
146
+ click "change_pass"
147
+ wait_for_page_to_load "30000"
148
+
149
+ type "ean13", "7680123456781"
150
+ type "address1", "Address"
151
+ type "pass", "secret"
152
+ type "confirm_pass", "secret"
153
+
154
+ entity = flexmock('yus-entity')
155
+ entity.should_receive(:valid?).and_return(true)
156
+ user.should_receive(:grant).times(1).and_return { |email, action, item|
157
+ assert_equal('login', action)
158
+ assert_equal('ch.bbmb.Customer', item)
159
+ }
160
+ user.should_receive(:set_password).times(1).and_return { |email, hash|
161
+ assert_equal('test.customer@bbmb.ch', email)
162
+ assert_equal(Digest::MD5.hexdigest('secret'), hash)
163
+ @yus_entities.store(email, entity)
164
+ }
165
+
166
+ click "save"
167
+ wait_for_page_to_load "30000"
168
+
169
+ assert !is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
170
+ assert is_element_present("change_pass")
171
+ assert is_element_present("generate_pass")
172
+ assert_equal "Passwort ändern", get_value("change_pass")
173
+ end
174
+ def test_customer__duplicate_email
175
+ BBMB.server = flexmock('server')
176
+ BBMB.server.should_receive(:rename_user).and_return { |old, new|
177
+ raise Yus::YusError, 'duplicate email'
178
+ }
179
+ BBMB.server.should_ignore_missing
180
+ BBMB.persistence.should_ignore_missing
181
+ customer = BBMB::Model::Customer.new('007')
182
+ customer.organisation = 'Test-Customer'
183
+ customer.plz = '7777'
184
+ @persistence.should_receive(:all).and_return { |klass|
185
+ assert_equal(BBMB::Model::Customer, klass)
186
+ [customer]
187
+ }
188
+ user = login_admin
189
+ user.should_receive(:get_preference).and_return('')
190
+
191
+ click "link=Test-Customer"
192
+ wait_for_page_to_load "30000"
193
+
194
+ click "change_pass"
195
+ wait_for_page_to_load "30000"
196
+
197
+ type "email", "test.user@bbmb.ch"
198
+ type "address1", "Address"
199
+ type "pass", "secret"
200
+ type "confirm_pass", "secret"
201
+
202
+ entity = flexmock('yus-entity')
203
+ entity.should_receive(:valid?).and_return(true)
204
+
205
+ click "save"
206
+ wait_for_page_to_load "30000"
207
+
208
+ assert is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
209
+ assert is_text_present("Es gibt bereits ein Benutzerprofil für diese Email-Adresse")
210
+ end
211
+ def test_customer__password_not_set
212
+ BBMB.server = flexmock('server')
213
+ BBMB.server.should_receive(:rename_user)
214
+ BBMB.server.should_ignore_missing
215
+ BBMB.persistence.should_ignore_missing
216
+ customer = BBMB::Model::Customer.new('007')
217
+ customer.organisation = 'Test-Customer'
218
+ customer.plz = '7777'
219
+ @persistence.should_receive(:all).and_return { |klass|
220
+ assert_equal(BBMB::Model::Customer, klass)
221
+ [customer]
222
+ }
223
+ user = login_admin
224
+ user.should_receive(:get_preference).and_return('')
225
+ user.should_receive(:grant)
226
+ user.should_receive(:set_password).and_return { |old, new|
227
+ raise Yus::YusError, 'other error, user not found, privilege problem'
228
+ }
229
+
230
+ click "link=Test-Customer"
231
+ wait_for_page_to_load "30000"
232
+
233
+ click "change_pass"
234
+ wait_for_page_to_load "30000"
235
+
236
+ type "email", "test.user@bbmb.ch"
237
+ type "address1", "Address"
238
+ type "pass", "secret"
239
+ type "confirm_pass", "secret"
240
+
241
+ entity = flexmock('yus-entity')
242
+ entity.should_receive(:valid?).and_return(true)
243
+
244
+ click "save"
245
+ wait_for_page_to_load "30000"
246
+
247
+ assert is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
248
+ assert is_text_present("Das Passwort konnte nicht gespeichert werden")
249
+ end
250
+ def test_customer__generate_pass
251
+ BBMB.server = flexmock('server')
252
+ BBMB.server.should_ignore_missing
253
+ BBMB.persistence.should_ignore_missing
254
+ customer = BBMB::Model::Customer.new('007')
255
+ customer.organisation = 'Test-Customer'
256
+ customer.instance_variable_set('@email', 'test.customer@bbmb.ch')
257
+ customer.drtitle = 'Dr. med. vet.'
258
+ customer.firstname = 'firstname'
259
+ customer.lastname = 'lastname'
260
+ customer.plz = '7777'
261
+ customer.city = 'city'
262
+ customer.ean13 = "7680123456781"
263
+ customer.address1 = "Address"
264
+ @persistence.should_receive(:all).and_return { |klass|
265
+ assert_equal(BBMB::Model::Customer, klass)
266
+ [customer]
267
+ }
268
+
269
+ user = login_admin
270
+ user.should_receive(:get_preference).and_return('')
271
+ entity = flexmock('yus-entity')
272
+ entity.should_receive(:valid?).and_return(true)
273
+ @yus_entities.store(customer.email, entity)
274
+
275
+ click "link=Test-Customer"
276
+ wait_for_page_to_load "30000"
277
+
278
+ flexstub(Util::PasswordGenerator).should_receive(:generate).and_return 'pass'
279
+
280
+ user.should_receive(:set_password).times(1).and_return { |email, hash|
281
+ assert_equal('test.customer@bbmb.ch', email)
282
+ assert_equal(Digest::MD5.hexdigest('pass'), hash)
283
+ @yus_entities.store(email, entity)
284
+ }
285
+
286
+ click "generate_pass"
287
+ wait_for_page_to_load "30000"
288
+ wait_for_page_to_load "30000"
289
+
290
+ =begin # selecting a window opened by onload does not seem to work.
291
+ select_window('password')
292
+ assert_equal "BBMB | Kunde", get_title
293
+ assert is_text_present("Test-Customer")
294
+ assert is_text_present("Dr. med. vet. firstname lastname")
295
+ assert is_text_present("Address")
296
+ assert is_text_present("7777")
297
+ assert is_text_present("pass")
298
+ assert is_text_present("test.customer@bbmb.ch")
299
+ close
300
+ =end
301
+
302
+ select_window("")
303
+ assert !is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
304
+ assert is_element_present("change_pass")
305
+ assert(is_element_present("generate_pass") \
306
+ || is_element_present("show_pass"))
307
+ end
308
+ def test_customer__generate_pass__errors
309
+ BBMB.server = flexmock('server')
310
+ BBMB.server.should_ignore_missing
311
+ BBMB.persistence.should_ignore_missing
312
+ customer = BBMB::Model::Customer.new('007')
313
+ customer.organisation = 'Test-Customer'
314
+ customer.drtitle = 'Dr. med. vet.'
315
+ customer.firstname = 'firstname'
316
+ customer.lastname = 'lastname'
317
+ customer.plz = '7777'
318
+ customer.city = 'city'
319
+ customer.ean13 = "7680123456781"
320
+ customer.address1 = "Address"
321
+ @persistence.should_receive(:all).and_return { |klass|
322
+ assert_equal(BBMB::Model::Customer, klass)
323
+ [customer]
324
+ }
325
+
326
+ user = login_admin
327
+ user.should_receive(:get_preference).and_return('')
328
+ entity = flexmock('yus-entity')
329
+ entity.should_receive(:valid?).and_return(true)
330
+ @yus_entities.store(customer.email, entity)
331
+
332
+ click "link=Test-Customer"
333
+ wait_for_page_to_load "30000"
334
+
335
+ click "generate_pass"
336
+ wait_for_page_to_load "30000"
337
+
338
+ assert is_text_present("Das Benutzerprofil wurde nicht gespeichert!")
339
+ assert is_text_present("Bitte speichern Sie zuerst eine gültige Email-Adresse")
340
+ assert is_element_present("change_pass")
341
+ assert(is_element_present("generate_pass") \
342
+ || is_element_present("show_pass"))
343
+
344
+
345
+ BBMB.server.should_receive(:rename_user).and_return { |old, new|
346
+ raise Yus::YusError, 'duplicate email'
347
+ }
348
+
349
+ flexstub(Util::PasswordGenerator).should_receive(:generate).and_return 'pass'
350
+ user.should_receive(:set_password).times(1).and_return { |email, hash|
351
+ raise Yus::YusError
352
+ }
353
+
354
+ type 'email', 'test.customer@bbmb.ch'
355
+ customer.instance_variable_set('@email', 'test.customer@bbmb.ch')
356
+ click "generate_pass"
357
+ wait_for_page_to_load "30000"
358
+
359
+ assert is_text_present("Das Passwort konnte nicht gespeichert werden")
360
+ end
361
+ end
362
+ end
363
+ end