diff --git a/test/feature/shop_test.rb b/test/feature/shop_test.rb index 9cb08d4..e9d45a6 100644 --- a/test/feature/shop_test.rb +++ b/test/feature/shop_test.rb @@ -52,50 +52,57 @@ def test_shopping_cart_calculation_with_publications link.click end - #def test_checkout_fails_without_user_info - # assert_match('/en/communication/shop', browser.url) + def test_checkout_fails_without_user_info + assert_match('/en/communication/shop', browser.url) - # item = browser.text_field(:id, 'article[113]') - # item.set('2') - # item.send_keys(:tab) + item = browser.text_field(:id, 'article[113]') + item.set('2') + item.send_keys(:tab) - # item = browser.text_field(:id, 'article[114]') - # item.set('1') - # item.send_keys(:tab) + item = browser.text_field(:id, 'article[114]') + item.set('1') + item.send_keys(:tab) - # #link = browser.button(:text, 'Order item(s)') - # #link.click + link = browser.button(:text, 'Order item(s)') + link.click - # assert(browser.text.include?( - # 'Please fill out the fields that are marked with red.')) - #end + assert(browser.text.include?( + 'Please fill out the fields that are marked with red.')) - # def test_checkout_fails_with_validation_error - # assert_match('/en/communication/shop', browser.url) + link = browser.link(:text, 'Remove all items') + link.click + end - # item = browser.text_field(:id, 'article[113]') - # item.set('2') - # item.send_keys(:tab) + def test_checkout_fails_with_validation_error + assert_match('/en/communication/shop', browser.url) - # item = browser.text_field(:id, 'article[114]') - # item.set('1') - # item.send_keys(:tab) + item = browser.text_field(:id, 'article[113]') + item.set('2') + item.send_keys(:tab) + + item = browser.text_field(:id, 'article[114]') + item.set('1') + item.send_keys(:tab) - # browser.text_field(:name, 'name').set('John Smith') - # browser.text_field(:name, 'surname').set('Mr.') - # browser.text_field(:name, 'postal_code').set('INVALID') - # browser.text_field(:name, 'city').set('Zürich') - # browser.text_field(:name, 'country').set('Switzerland') - # browser.text_field(:name, 'email').set('john@example.org') + browser.text_field(:name, 'name').set('John Smith') + browser.text_field(:name, 'surname').set('Mr.') + browser.text_field(:name, 'street').set('Winterthurerstrasse') + browser.text_field(:name, 'postal_code').set('A') + browser.text_field(:name, 'city').set('Zürich') + browser.text_field(:name, 'country').set('Switzerland') + browser.text_field(:name, 'email').set('john@example.org') - # link = browser.button(:text, 'Order item(s)') - # link.click + link = browser.button(:text, 'Order item(s)') + link.click + + assert(browser.text.include?( + 'Your Postal Code seems to be invalid.')) + assert(browser.text.include?( + 'Sorry, but your email-address seems to be invalid. Please try again.')) - # assert(browser.text.include?( - # 'Your Postal Code seems to be invalid.')) - # assert(browser.text.include?( - # 'Sorry, but your email-address seems to be invalid. Please try again.')) - # end + link = browser.link(:text, 'Remove all items') + link.click + end #def test_checkout # @browser.type "article[113]", "2" diff --git a/test/support/stub/http_server.rb b/test/support/stub/http_server.rb index b4396fd..133f84d 100644 --- a/test/support/stub/http_server.rb +++ b/test/support/stub/http_server.rb @@ -34,6 +34,10 @@ def headers_in def uri @uri || unparsed_uri end + + def content_length + return Integer(self['content-length'] || '0') + end end class HTTPResponse @@ -121,8 +125,9 @@ def self.http_server(drburi) davaz = Proc.new do |req, resp| resp.chunked = true - if req.uri == '/favicon.ico' - resp.chunked = true + if req.uri =~ /\.css\z/ + resp.body = '' + elsif req.uri == '/favicon.ico' resp.body = File.open(File.join(doc, req.uri)) else req.server = server @@ -136,6 +141,7 @@ def self.http_server(drburi) sbsm.cgi.env_table['SERVER_NAME'] = \ "#{TEST_SRV_URI.host}:#{TEST_SRV_URI.port}" sbsm.cgi.env_table['REQUEST_METHOD'] = req.request_method + sbsm.cgi.env_table['CONTENT_LENGTH'] = req.content_length.to_s sbsm.cgi.cookies['_session_id'] = 'test:preset-session-id' sbsm.cgi.output = output sbsm.process diff --git a/test/support/test_case.rb b/test/support/test_case.rb index 2bea40c..e89ac0a 100644 --- a/test/support/test_case.rb +++ b/test/support/test_case.rb @@ -9,20 +9,14 @@ module TestCase def before_setup super - @headless ||= Headless.new - @headless.start - at_exit do - @headless.destroy - end - - unless @server - @http_server ||= startup_server - trap('INT') { @http_server.shutdown } - @http_server.shutdown - @server = Thread.new { @http_server.start } + if TEST_HEADLESS && !@headless + @headless = Headless.new + @headless.start + at_exit { @headless.destroy if @headless } end - @browser ||= open_browser + startup_server + boot_browser end def setup @@ -34,48 +28,70 @@ def teardown end def after_teardown - shutdown_server if @server - close_browser if @browser - @headless.destroy + close_browser + shutdown_server + + if TEST_HEADLESS && @headless + @headless.destroy + @headless = nil + end + super end private def startup_server + return if @server + drb_url = TEST_APP_URI.to_s app = DaVaz::Util::App.new app.db_manager = DaVaz::Stub::DbManager.new app.yus_server = DaVaz::Stub::YusServer.new server = DaVaz::Util::DRbServer.new(app) - @drb ||= Thread.new do + @drb = Thread.new do begin - @drb_server ||= DRb.start_service(drb_url, server) + @drb_server = DRb.start_service(drb_url, server) rescue Exception => e - puts e.class - puts e.message - puts e.backtrace + $stdout.puts e.class + $stdout.puts e.message + $stdout.puts e.backtrace raise end end - @drb.abort_on_exception = true - Stub.http_server(drb_url) + #@drb.abort_on_exception = true + @http_server = Stub.http_server(drb_url) + @http_server.shutdown + trap('INT') { @http_server.shutdown } + + @server = Thread.new { @http_server.start } end def shutdown_server + return unless @server + @http_server.shutdown + @http_server = nil @drb_server.stop_service + @drb_server = nil + @drb.exit @drb = nil + @server.exit + @server = nil end - def open_browser + def boot_browser + return if @browser + client = Selenium::WebDriver::Remote::Http::Default.new - client.timeout = 900 - DaVaz::Browser.new(:firefox, http_client: client) + client.timeout = 90 + @browser = DaVaz::Browser.new(:firefox, http_client: client) end def close_browser + return unless @browser + @browser.close @browser = nil end diff --git a/test/test_helper.rb b/test/test_helper.rb index d12d908..ea9be63 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -29,9 +29,10 @@ module DaVaz::TestCase include WaitUntil end -TEST_SRV_URI = URI.parse(ENV['TEST_SRV_URL'] || 'http://127.0.0.1:11080') -TEST_APP_URI = URI.parse(ENV['TEST_APP_URL'] || 'druby://127.0.0.1:11081') -TEST_YUS_URI = URI.parse(ENV['TEST_YUS_URL'] || 'drbssl://127.0.0.1:10007') +TEST_HEADLESS = true +TEST_SRV_URI = URI.parse(ENV['TEST_SRV_URL'] || 'http://127.0.0.1:11080') +TEST_APP_URI = URI.parse(ENV['TEST_APP_URL'] || 'druby://127.0.0.1:11081') +TEST_YUS_URI = URI.parse(ENV['TEST_YUS_URL'] || 'drbssl://127.0.0.1:10007') DaVaz.config.document_root = root_dir.join('doc').to_s DaVaz.config.environment = 'test'