Files
mip/tests/default_methods.rb

357 lines
12 KiB
Ruby

# Oracle stuff
#
require 'oci8'
#used to handle javascript popups
require 'watir/contrib/enabled_popup'
require 'watir/WindowHelper'
#
# Method to handle javascript popups.
#
require 'thread'
#
require 'win32ole'
#
def startClicker( button , waitTime = 3)
w = WinClicker.new
longName = @@ie.dir.gsub("/" , "\\" )
shortName = w.getShortFileName(longName)
c = "start ruby #{shortName}\\watir\\clickJSDialog.rb #{button} #{waitTime} "
puts "Starting #{c}"
w.winsystem(c)
w=nil
end
#
#
# DOSQL
#
def dosql(p_sql)
conn = OCI8.new(DBUSERNAME,DBPASSWORD,DATABASE)
#conn.exec('begin DELETE_TEST_DATA; end;')
puts p_sql
conn.exec(p_sql)
#conn.exec('commit;')
end
#
#LOGIN
#
def login(p_username, p_password)
#
# Enter logon details
#
@@ie.text_field( :id, 'P101_USERNAME' ).set( p_username )
@@ie.text_field( :id, 'P101_PASSWORD' ).set( p_password )
#
@@ie.button(:id, "login").click
@@ie.wait
#
# TRUE if doesn't find
#
assert_nil(@@ie.contains_text('Invalid Login Credentials'),'Unable to login')
end
def menu (p_menuitem)
@@ie.link(:name, p_menuitem).click
@@ie.wait
end
def geterrormess(ie)
if ie.div(:id, 'ErrorOutputDiv').exists? then
return ie.div(:id, 'ErrorOutputDiv').text
end
return ie.div(:id,'colRight').to_s
end
#
# SETCONTRACTVALUE
#
def set_contract_value(p_index_start,p_values)
#
i = p_index_start
@@ie.text_field( :index, i).set(p_values[0] )
@@ie.text_field(:index, i+1).set(p_values[1])
@@ie.text_field(:index, i+2).set(p_values[2])
@@ie.text_field(:index, i+3).set(p_values[3])
@@ie.text_field(:index, i+4).set(p_values[4])
@@ie.text_field(:index, i+5).set(p_values[5])
@@ie.text_field(:index, i+6).set(p_values[6])
@@ie.text_field(:index, i+7).set(p_values[7])
@@ie.text_field(:index, i+8).set(p_values[8])
@@ie.text_field(:index, i+9).set(p_values[9])
@@ie.text_field(:index, i+10).set(p_values[10])
@@ie.text_field(:index, i+11).set(p_values[11])
#@@ie.text_field(:index, i+12).set(p_values[12])
#
end
#
# SETCONTRACT
#
def set_contract(p_name,p_customer,p_template,p_format,p_verify_data_entry,p_date_from=futuredate(0),p_date_to=futuredate(100),p_expect_success='y')
@@ie.button(:value, 'Find').click
@@ie.wait
@@ie.button(:value, 'New Contract').click
@@ie.wait
#
@@ie.text_field(:name,'p_contract_number').set(p_name)
@@ie.select_list(:name, 'p_customer_id').select(p_customer)
#
#
#get javascript popup, start thread before as popup locks ruby so can't click the button!
#
startClicker("OK" , 1)
#sleep 1
@@ie.select_list(:name,'p_template_id').select(p_template)
#
# Will need to click the cutton manually if can't find a way to interact with the Javascript box
#
@@ie.select_list(:name,'p_spte_id').select(p_format)
@@ie.text_field(:name,'p_date_from').set(p_date_from)
@@ie.text_field(:name,'p_date_to').set(p_date_to)
@@ie.text_field(:name,'p_ops_contact').set('John')
@@ie.text_field(:name,'p_bus_contact').set('Paul')
@@ie.text_field(:name,'p_val_window').set('0')
@@ie.text_field(:name,'p_days_before').set('14')
@@ie.select_list(:name,'p_val_action').select('Look Back')
@@ie.select_list(:name,'p_status').select('Open')
@@ie.select_list(:name,'p_val_exception').select('Contracted Amount')
#
@@ie.select_list(:name,'add_nepo_id').select('EDEN HAG')
@@ie.select_list(:name,'add_nepo_id').select('EDEN TSTV')
@@ie.button(:value,'Add Network Points').click
@@ie.wait
@@ie.button('Insert').click
#
if p_expect_success=='y'
assert(@@ie.contains_text('Success!'),'Create Contract '+p_name+' did not succeed: ' +geterrormess(@@ie))
else
assert(@@ie.contains_text('Insert failed'),'Create Contract '+p_name+' succeeded, should have given us an overlap error')
assert(@@ie.contains_text('Open contracts exist for this date period'),'Expected error message: [Open contracts exist for this date period] but did not find it')
#if we are testing it to fail there is no need to continue through rest of the test below
return
end
#
# Create the contract rule values
#
@@ie.button('Set Values').click
#
#
if p_verify_data_entry == 'Y'
#
# Format of the numbers must be 99999.99
#
set_contract_value(3,['17,123.30','35,616.46','34,246.60','0.00','17123.3','0.00','0.00','17123.3','0.00','0.00','17123.3','0.00'])
set_contract_value(15,['68493.20','142,465.86','136,986.40','0.00','68,493.20','0.00','0.00','68,493.20','0.00','0.00','68,493.20','0.00'])
@@ie.button('Update').click
@@ie.wait
#
assert(@@ie.contains_text('Data supplied with invalid number formats'),'Create Contract Values did not fail as expected'+geterrormess(@@ie))
#
# Contracted value is > maximum
#
set_contract_value(3,['17123.30','34246.60','35616.46','0.00','17123.3','0.00','0.00','17123.3','0.00','0.00','17123.3','0.00'])
set_contract_value(15,['68493.20','136986.40','142465.86','0.00','68493.20','0.00','0.00','68493.20','0.00','0.00','68493.20','0.00'])
@@ie.button('Update').click
@@ie.wait
#
assert(@@ie.contains_text('Contracted greater than Maximum'),'Create Contract Values did not fail as expected'+geterrormess(@@ie))
#
#
# Contracted value is < minimum
#
set_contract_value(3,['17123.30','35616.46','246.60','0.00','17123.3','0.00','0.00','17123.3','0.00','0.00','17123.3','0.00'])
set_contract_value(15,['68493.20','142465.86','6986.40','0.00','68493.20','0.00','0.00','68493.20','0.00','0.00','68493.20','0.00'])
@@ie.button('Update').click
@@ie.wait
#
assert(@@ie.contains_text('Contracted less than Minimum'),'Create Contract Values did not fail as expected'+geterrormess(@@ie))
#
end
#
set_contract_value(3,['17123.30','35616.46','34246.60','0.00','17123.3','0.00','0.00','17123.3','0.00','0.00','17123.3','0.00'])
set_contract_value(15,['68493.20','142465.86','136986.40','0.00','68493.20','0.00','0.00','68493.20','0.00','0.00','68493.20','0.00'])
@@ie.button('Update').click
@@ie.wait
#
assert(@@ie.contains_text('Success!'),'Create Contract Values for '+p_name+' did not succeed: ' +geterrormess(@@ie))
#
end
#
# SETRULE
#
def set_rule(p_name,p_errmsg,p_LHS,p_RHS,p_operator)
#
@@ie.button(:value, 'New Rule').click
@@ie.wait
#
@@ie.text_field(:name,'p_rule_name').set(p_name)
@@ie.text_field(:name,'p_err_message_hu').set(p_errmsg)
@@ie.text_field(:name,'p_err_message_en').set(p_errmsg)
#
@@ie.text_field(:name,'p_left_side').set('$<'+p_LHS+'>')
@@ie.text_field(:name,'p_right_side').set('$<'+p_RHS+'>')
#
@@ie.select_list(:name, 'p_rule_relation').select(p_operator)
#
@@ie.button( :value, 'Insert' ).click
@@ie.wait
#
assert(@@ie.contains_text('Success!'),'Create Rule '+p_name+' did not succeed: ' +geterrormess(@@ie))
#
@@ie.button( :value, 'Cancel' ).click
@@ie.wait
#
end
#
# SETCATEGORIES
#
def set_categories(p_name,p_display_seq)
#
@@ie.button(:value,'New').click
@@ie.wait
#
@@ie.text_field(:name,'P_CODE').set(p_name)
@@ie.text_field(:name,'P_NAME').set(p_name)
@@ie.text_field(:name,'P_UNITS').set('m3/day')
@@ie.text_field(:name,'P_NUMBER_FORMAT').set('999999.99')
@@ie.text_field(:name,'P_DISPLAY_SEQUENCE').set(p_display_seq)
#
@@ie.button( :value, 'Insert' ).click
@@ie.wait
#c
end
#
# SETNETWORKPOINT
#
def set_network_point(p_name)
#
@@ie.button(:value,'New').click
@@ie.wait
#
@@ie.text_field( :name, 'P_CODE').set( p_name )
@@ie.text_field( :name, 'P_NAME').set( p_name )
@@ie.select_list( :name , "P_STATUS").select("Active")
@@ie.select_list( :name , "P_SITE_TYPE").select("Entry")
#
@@ie.button( :value, 'Insert' ).click
@@ie.wait
#
end ;
#
# SETNOMINATION
#
#This method simply takes the date/time of the nomination , the nominated value and
#number of subsequent days and submits it into the current web form. It assumes you have
#already loaded the web form in the @@ie class object variable
#Method designed for use iwth the EDEN1 contract (2 NP plus 4 categories)
#
def setnomination(p_contract, p_quantity)
#
@@ie.select_list( :name , "p_contract").select(p_contract)
@@ie.wait
#
#@@ie.text_field( :name, 'nomid' ).set( 'PUW_EDEN1_'+(Time.now).strftime("%d%m%y%H%M%S") )
#
i = 4
#
# Passing in an array of arrays the loop though, use the index i to deermine the text field for data entry.
#
p_quantity.each do |nomination|
#
@@ie.text_field( :index, i).set( nomination[0] )
@@ie.text_field(:index, i+1).set(nomination[1])
@@ie.text_field(:index, i+2).set(nomination[2])
@@ie.text_field(:index, i+3).set(nomination[3])
@@ie.text_field(:index, i+4).set(nomination[4])
@@ie.text_field(:index, i+5).set(nomination[5])
@@ie.text_field(:index, i+6).set(nomination[6])
@@ie.text_field(:index, i+7).set(nomination[7])
@@ie.text_field(:index, i+8).set(nomination[8])
#
i = i + 8
#
end
#
@@ie.button( :value, 'Insert' ).click
@@ie.wait
#
end
#
# SETMULTINOM
#
#This method simply takes the date/time of the nimination , the nominated value and
#number of subsequent days and submits it into the current web form. It assumes you have
#already loaded the web form in the @@ie class object variable
#Method designed for use iwth the EDEN1 contract (2 NP plus 4 categories)
#
def setmultinom(p_contract, p_quantity)
#
@@ie.select_list( :name , "p_contract").select(p_contract)
@@ie.wait
#
#@@ie.text_field( :name, 'nomid' ).set( 'PUW_EDEN2_'+(Time.now).strftime("%d%m%y%H%M%S") )
#
i = 5
#
# Passing in an array of arrays the loop though, use the index i to deermine the text field for data entry.
#
p_quantity.each do |nomination|
#
@@ie.text_field( :index, i).set( nomination[0] )
@@ie.text_field(:index, i+1).set(nomination[1])
@@ie.text_field(:index, i+2).set(nomination[2])
@@ie.text_field(:index, i+3).set(nomination[3])
@@ie.text_field(:index, i+4).set(nomination[4])
i = i + 5
#
end
#
@@ie.button( :value, 'Insert' ).click
@@ie.wait
#
end
#
# GETERRORMESS
#
#The geterrormess method extracts the error message from
#a designer built screen
def geterrormess (ie)
#get the html for the current page
html = ie.html
#Find the start of the error
i= html.index('Error!')
if i == nil
return ''
end
#get the html code from the error onwards
htmlex = html.slice(i,html.length)
#get the end of the error message
x= htmlex.index('</B>')
#extract just the error message (skip 'Error!</I></font><br>')
return errcode = htmlex.slice(21,x-21)
end
#
# STARTDATE
#
#set up the startdate method (you could call it a function if you're not into Ruby)
#create time (year, month, day, hour, minutes, seconds)
#Hello testers be sure to set the start date for the test here
#Note that I've now set this in the controlling program so it's no longer
#required here
#STARTDATE = Time.gm(2007,'feb',13)
def futuredate (days=0)
#The startdate method takes a number of days + or - and then takes or
#adds them to the startdate specified in the local variable startdate and returns
#the date in the format dd-mmm-yyyy
#add a number of days to the time and return it in the format dd/mm/yyyy eg. 10/02/2007
return ((Time.now)+(86400*days)).strftime("%d/%m/%Y").upcase
end
#
#
#
def purge_EDEN2_noms
dosql('begin DELETE nom_net_point_cat_vals WHERE nomi_id IN (SELECT nomi_id FROM nominations WHERE cont_id = (SELECT cont_id FROM contracts WHERE contract_number = \'EDEN2\')); commit; end;')
dosql('begin DELETE nominations WHERE cont_id = (SELECT cont_id FROM contracts WHERE contract_number = \'EDEN2\'); commit; end;')
end