Skip to content

Commit

Permalink
First watir tests fails
Browse files Browse the repository at this point in the history
  • Loading branch information
ngiger committed Jun 13, 2016
1 parent 06050ef commit 42cb887
Show file tree
Hide file tree
Showing 8 changed files with 312 additions and 20 deletions.
15 changes: 15 additions & 0 deletions Gemfile
@@ -0,0 +1,15 @@
source 'https://rubygems.org'

gem 'xmlconv', :path => '../xmlconv'
gem 'minitest'
gem 'flexmock'
group :debugger do
gem 'pry-byebug'
gem 'pry-doc'
end

group :test do
gem 'rspec'
gem 'watir'
gem 'watir-webdriver'
end
67 changes: 67 additions & 0 deletions spec/data/invoice.xml
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<customerOrder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
compressionDesired="false" productDescriptionDesired="true"
backLogDesired="true" language="fr"
roundUpForCondition="true" version="1.0">
<client number="4100614181" password="MDPOK" />
<orderHeader deliveryDate="2016-06-13"
referenceNumber="130620161" mannerOfTransport="tour"
phoneCallDesired="false" urgent="false">
<deliveryAddress line1="Rte de Fully 11" line4="Pharmacie de
Saillon" line5PostalCode="1913" line5City="Saillon">
<addressLine2And3Text line2="Saillon" line3="de Saillon"
/>
</deliveryAddress>
</orderHeader>
<orderLines>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="4124733" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="4953990" />
</productOrderLine>
<productOrderLine orderQuantity="6"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="5549297" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="4714009" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="2965693" />
</productOrderLine>
<productOrderLine orderQuantity="2"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="2991118" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="3938468" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="4714179" />
</productOrderLine>
<productOrderLine orderQuantity="2"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="4497463" />
</productOrderLine>
<productOrderLine orderQuantity="3"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="2783905" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="6240372" />
</productOrderLine>
<productOrderLine orderQuantity="1"
roundUpForCondition="true" backLogDesired="true">
<pharmaCode id="5552508" />
</productOrderLine>
</orderLines>
</customerOrder>
80 changes: 80 additions & 0 deletions spec/injection_spec.rb
@@ -0,0 +1,80 @@
#!/usr/bin/env ruby
# encoding: utf-8
require 'spec_helper'
@workThread = nil
CustomerId = 4100614181
ProductName = 'Bilol 2.5 mg Filmtbl 100'
Here = File.expand_path(File.dirname(__FILE__))

describe "bbmb.xmlconv" do

before :all do
@idx = 0
waitForBbmbToBeReady(@browser, BbmbUrl)
end

before :each do
@browser.goto BbmbUrl
end

after :each do
@idx += 1
createScreenshot(@browser, '_'+@idx.to_s)
logout
end

after :all do
@browser.close
end

describe "admin" do
before :all do
end
before :each do
@browser.goto BbmbUrl
logout
login(AdminUser, AdminPassword)
end
after :all do
logout
end
it "handle an injection properly" do
total_before, item_before = get_total_and_item_total
puts "Before #{total_before} item #{item_before}"
inject_invoice
# binding.pry
logout
login(AdminUser, AdminPassword)
total_after, item_after = get_total_and_item_total
puts "After #{total_after} item #{item_after}"
diff_total = total_after - total_before
diff_item= item_after - item_before
puts "diff_item #{diff_item} diff_total #{diff_total}"
end
end

def inject_invoice
filename = File.join(Here, 'data', 'invoice.xml')
expect(File.exists?(filename)).to be true
cmd = "curl http://sandoz.xmlconv.bbmb.ngiger.ch/propharma -X POST -H 'Content-type: text/xml' --data @#{filename}"
expect(system(cmd)).to be true
end

def get_total_and_item_total
@browser.goto "#{BbmbUrl}/de/#{Flavor}/customer/customer_id/#{CustomerId}"
windowSize = @browser.windows.size
expect(@browser.url).to match BbmbUrl
text = @browser.text.clone
expect(@browser.url).to match BbmbUrl
expect(@browser.url).to match CustomerId.to_s
how_much = @browser.link(:name => 'turnover').text
@turnover = how_much.match(/(\d+\.\d+)/)[1].to_f
@browser.link(:name => 'history').click
expect(@browser.url).to match BbmbUrl
expect(@browser.url).to match CustomerId.to_s
expect(@browser.url).to match 'history'
wieviel = @browser.text.match(/#{ProductName}\s+\d+\.\d+\s+(\d+\.\d+)/)
@item_turnover = wieviel[1].to_f
return @turnover, @item_turnover
end
end
134 changes: 134 additions & 0 deletions spec/spec_helper.rb
@@ -0,0 +1,134 @@
#!/usr/bin/env ruby
# encoding: utf-8
# require 'simplecov'
# SimpleCov.start

RSpec.configure do |config|
config.mock_with :flexmock
config.expect_with :rspec do |c|
c.syntax = [:should, :expect]
end
end

BreakIntoPry = false
begin
require 'pry'
rescue LoadError
# ignore error for Travis-CI
end
$LOAD_PATH << File.join(File.dirname(File.dirname(__FILE__)), 'lib')

require 'fileutils'
require 'watir-webdriver'
require 'pp'

AdminPassword = ENV['SANDOZ_ADMIN_PASSWD']
AdminUser = 'admin@sandoz.ch'
XmlConvUrl = 'http://sandoz.xmlconv.bbmb.ngiger.ch/'
BbmbUrl = 'http://sandoz.bbmb.ngiger.ch/'

Flavor = 'sbsm'
ImageDest = File.join(Dir.pwd, 'images')
Browser2test = [ :chrome ]
DownloadDir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'downloads'))
GlobAllDownloads = File.join(DownloadDir, '*')
LeeresResult = /hat ein leeres Resultat/

def setup_browser
return if @browser
FileUtils.makedirs(DownloadDir)
if Browser2test[0].to_s.eql?('firefox')
puts "Setting upd default profile for firefox"
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = DownloadDir
profile['browser.download.folderList'] = 2
profile['browser.helperApps.alwaysAsk.force'] = false
profile['browser.helperApps.neverAsk.saveToDisk'] = "application/zip;application/octet-stream;application/x-zip;application/x-zip-compressed;text/csv;test/semicolon-separated-values"

@browser = Watir::Browser.new :firefox, :profile => profile
elsif Browser2test[0].to_s.eql?('chrome')
puts "Setting up a default profile for chrome"
prefs = {
:download => {
:prompt_for_download => false,
:default_directory => DownloadDir
}
}
@browser = Watir::Browser.new :chrome, :prefs => prefs
elsif Browser2test[0].to_s.eql?('ie')
puts "Trying unknown browser type Internet Explorer"
@browser = Watir::Browser.new :ie
else
puts "Trying unknown browser type #{Browser2test[0]}"
@browser = Watir::Browser.new Browser2test[0]
end
end

def login(user = ViewerUser, password=ViewerPassword, remember_me=false)
setup_browser
@browser.goto BbmbUrl
sleep 0.5
@browser.text_field(:name, 'email').when_present.set(user)
@browser.text_field(:name, 'pass').when_present.set(password)
@browser.button(:name,"login").click
sleep 1 unless @browser.button(:name,"logout").exists?
if @browser.button(:name,"login").exists?
@browser.goto(BbmbUrl)
return false
else
return true
end
end

def get_session_timestamp
@@timestamp ||= Time.now.strftime('%Y%m%d_%H%M%S')
end

def logout
setup_browser
@browser.goto BbmbUrl
sleep(0.1) unless @browser.link(:name=>'logout').exists?
logout_btn = @browser.link(:name=>'logout')
return unless logout_btn.exists?
logout_btn.click
end

def waitForBbmbToBeReady(browser = nil, url = BbmbUrl, maxWait = 30)
setup_browser
startTime = Time.now
@seconds = -1
0.upto(maxWait).each{
|idx|
@browser.goto BbmbUrl; small_delay
unless /Es tut uns leid/.match(@browser.text)
@seconds = idx
break
end
if idx == 0
$stdout.write "Waiting max #{maxWait} seconds for #{url} to be ready"; $stdout.flush
else
$stdout.write('.'); $stdout.flush
end
sleep 1
}
endTime = Time.now
sleep(0.2)
@browser.link(:text=>'Plus').click if @browser.link(:text=>'Plus').exists?
puts "Took #{(endTime - startTime).round} seconds for for #{BbmbUrl} to be ready. First answer was after #{@seconds} seconds." if (endTime - startTime).round > 2
end

def small_delay
sleep(0.1)
end

def createScreenshot(browser, added=nil)
small_delay
if browser.url.index('?')
name = File.join(ImageDest, File.basename(browser.url.split('?')[0]).gsub(/\W/, '_'))
else
name = File.join(ImageDest, browser.url.split('/')[-1].gsub(/\W/, '_'))
end
name = "#{name}#{added}.png"
browser.screenshot.save (name)
puts "createScreenshot: #{name} done" if $VERBOSE
end
10 changes: 3 additions & 7 deletions test/test_conversion/propharma_bdd.rb
Expand Up @@ -4,13 +4,13 @@
$: << File.expand_path('..', File.dirname(__FILE__))
$: << File.expand_path('../../lib', File.dirname(__FILE__))

require 'test/unit'
require 'conversion/propharma_bdd'
require 'flexmock'
require 'minitest/autorun'
require 'flexmock/minitest'

module XmlConv
module Conversion
class TestWbmbBdd < Test::Unit::TestCase
class TestWbmbBdd < ::Minitest::Test
def setup
@src = <<-EOS
[KUNDE]
Expand Down Expand Up @@ -68,10 +68,6 @@ def setup
mge=2
EOS
end
def test_parse
ast = ProPharmaBdd.parse(@src)
assert_instance_of(SyntaxTree, ast)
end
def test_convert
bdd = ProPharmaBdd.convert(ProPharmaBdd.parse(@src))
assert_instance_of(Model::Bdd, bdd)
Expand Down
6 changes: 3 additions & 3 deletions test/test_conversion/sunstore_bdd.rb
Expand Up @@ -4,13 +4,13 @@
$: << File.dirname(__FILE__)
$: << File.expand_path('../../lib', File.dirname(__FILE__))

require 'test/unit'
require 'conversion/sunstore_bdd'
require 'xmlconv/util/transaction'
require 'minitest/autorun'

module XmlConv
module Conversion
class TestGehBdd < Test::Unit::TestCase
class TestGehBdd < ::Minitest::Test
def setup
@src = <<-XML
<?xml version="1.0" encoding="ISO-8859-1"?>
Expand Down Expand Up @@ -73,7 +73,7 @@ def test_convert
"Linkestrasse 99" ],
address.lines)
assert_equal("3322", address.zip_code)
assert_equal("Sch\366nb\374hl", address.city)
assert_equal("Schönbühl", address.city)
assert_equal(2, delivery.items.size)

item = delivery.items.first
Expand Down
4 changes: 2 additions & 2 deletions test/test_integration/propharma_csv.rb
Expand Up @@ -4,15 +4,15 @@
$: << File.expand_path('..', File.dirname(__FILE__))
$: << File.expand_path('../../lib', File.dirname(__FILE__))

require 'test/unit'
require 'xmlconv/util/transaction'
require 'xmlconv/util/destination'
require 'conversion/propharma_bdd'
require 'conversion/bdd_csv'
require 'minitest/autorun'

module XmlConv
module Integration
class TestProPharmaI2 < Test::Unit::TestCase
class TestProPharmaI2 < ::Minitest::Test
def setup
@target_dir = File.expand_path('data/propharma_csv',
File.dirname(__FILE__))
Expand Down

0 comments on commit 42cb887

Please sign in to comment.