taf 0.4.1 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2367c31920261be5fd4ab3b50e3266c972f6f4eeb6f22a99e704a64904639ae3
4
- data.tar.gz: dccbc5fc244b455a3d2173dbde7c2814571d090d7fc8447fa34759bb1f2c80f8
3
+ metadata.gz: 0501ee31ac5742b113c9e33b359bc324dae96b87e7a2caf82495113d6e6a3222
4
+ data.tar.gz: f9021907fd6dec231fe807e0afd32e2879ce44a9789f0bfd89ab62febb326e05
5
5
  SHA512:
6
- metadata.gz: f0d440c2349b3543910236233e321a651677fcce1e96dfb300e86ae6f6cadd81865aedd0aa705ab0e3e0b4b046b74703f9cab91e4611bb3fa24bc17421f3c238
7
- data.tar.gz: d90267152e10e951260c2181b30b38209ab22bfdada3b4afe63d52b26207f8fabe08e5347a88cd179ce2f7f6d0f24a4dacba36444570da3f240ced03ae3d4541
6
+ metadata.gz: 527cb4c93cce55d055bf5bb3d28026db1d5733ad8ba11c9bd91e2b091e1cedc3851169f889a2a6f4dc8ea6f932bbeb7f9fd23eb87e1f819c296ce76b106d8596
7
+ data.tar.gz: 16061dd456c4449a343261651e50b1c9de3509ef982acb965f9778a4f5f3d3bcd4a9abd9f1abeb757bcbdfb5921da21c92418939a898c60632a6ce1125c20d47
data/lib/taf.rb CHANGED
@@ -8,18 +8,18 @@ module Taf
8
8
  class BrowserFailedOpen < TafError; end
9
9
  class LoginTypeFailed < TafError; end
10
10
 
11
- require 'selenium-webdriver'
12
- require 'watir'
13
- require 'rubygems'
11
+ require 'colored'
14
12
  require 'fileutils'
13
+ require 'faraday'
14
+ require 'json'
15
15
  require 'logger'
16
- require 'net/ping'
17
- require 'time_difference'
18
- require 'colored'
16
+ require 'open3'
19
17
  require 'optparse'
20
- require 'fileutils'
18
+ require 'rubygems'
21
19
  require 'securerandom'
22
- require 'json'
20
+ require 'selenium-webdriver'
21
+ require 'time_difference'
22
+ require 'watir'
23
23
 
24
24
  require 'taf/browser'
25
25
  require 'taf/cmd_line'
@@ -9,14 +9,20 @@
9
9
  module Taf
10
10
  # browser_setup.rb - a browser functions
11
11
  module Browser
12
+ # Suppoerted Browser names
13
+ @chrome_name = 'chrome'
14
+ @chrome_headless_name = 'chrome-headless'
15
+ @firefox_name = 'firefox'
16
+ @firefox_headless_name = 'firefox-headless'
17
+
12
18
  # open_browser function
13
19
  def self.open_browser
14
20
  browser = Taf::CMDLine.browser_type.downcase
15
21
  case browser
16
- when 'chrome' then chrome
17
- when 'chrome-headless' then chrome_headless
18
- when 'firefox' then firefox
19
- when 'firefox-headless' then firefox_headless
22
+ when @chrome_name then chrome
23
+ when @chrome_headless_name then chrome_headless
24
+ when @firefox_name then firefox
25
+ when @firefox_headless_name then firefox_headless
20
26
  else
21
27
  raise Taf::BrowserFailedOpen,
22
28
  "unable to open selected browser: #{browser}"
@@ -77,27 +83,27 @@ module Taf
77
83
  def self.browser_version
78
84
  browser_name = Taf::CMDLine.browser_type.downcase
79
85
  case browser_name
80
- when 'chrome', 'chrome-headless'
86
+ when @chrome_name, @chrome_headless_name
81
87
  @browser.driver.capabilities[:version]
82
- when 'firefox', 'firefox-headless'
88
+ when @firefox_name, @firefox_headless_name
83
89
  @browser.execute_script('return navigator.userAgent;').split('/')[-1]
90
+ else
91
+ 'No Browser version'
84
92
  end
85
- rescue StandardError
86
- 'No Browser version'
87
93
  end
88
94
 
89
95
  # Check platform
90
96
  def self.browser_platform
91
97
  browser_name = Taf::CMDLine.browser_type.downcase
92
98
  case browser_name
93
- when 'chrome', 'chrome-headless'
99
+ when @chrome_name, @chrome_headless_name
94
100
  @browser.execute_script('return navigator.userAgent;')
95
101
  .split(';')[1].split(')')[0]
96
- when 'firefox', 'firefox-headless'
102
+ when @firefox_name, @firefox_headless_name
97
103
  @browser.execute_script('return navigator.userAgent;').split(';')[1]
104
+ else
105
+ 'No Platform found'
98
106
  end
99
- rescue StandardError
100
- 'No Platform found'
101
107
  end
102
108
  end
103
109
  end
@@ -22,7 +22,7 @@ module Taf
22
22
 
23
23
  def self.browser(browser)
24
24
  @browser_type = browser
25
- unless ['chrome', 'chrome-headless', 'firefox', 'firefox-headless']
25
+ unless %w[chrome chrome-headless firefox firefox-headless]
26
26
  .include?(@browser_type)
27
27
  Taf::MyLog.log.warn 'A valid Browser has not been supplied as a' \
28
28
  ' command-line parameter as expected'
@@ -9,6 +9,34 @@
9
9
  module Taf
10
10
  # test_engine.rb - controls the iteration through the test suite and specs
11
11
  module TestEngine
12
+ def self.get_test_data(test_file_name)
13
+ # read in the test data
14
+ tests = Taf::Parser.read_test_data(test_file_name)
15
+ tests
16
+ # if unable to read the test data, show the error and move onto the
17
+ # next file (if there is one)
18
+ rescue StandardError => e
19
+ Taf::MyLog.log.warn 'Terminating the current test spec: ' \
20
+ "#{test_file_name} #{e}"
21
+ Taf::MyLog.log.info
22
+ '...continuing with the next test file (if there is one)'
23
+ end
24
+
25
+ def self.get_step_data(test_file_name, tests, metrics)
26
+ tests['steps'].each_with_index do |test_step, test_step_idx|
27
+ test_step_idx += 1
28
+
29
+ parsed_steps = Taf::Parser.parse_test_step_data(test_step)
30
+
31
+ # process the test step data
32
+ Taf::TestSteps.process_test_steps(test_file_name, test_step_idx,
33
+ parsed_steps, metrics)
34
+ end
35
+ rescue Taf::TafError => e
36
+ warn e
37
+ Taf::MyLog.log.warn e
38
+ end
39
+
12
40
  # process the test files to execute the tests
13
41
  def self.process_testfiles
14
42
  total_passes = 0
@@ -20,37 +48,13 @@ module Taf
20
48
  metrics = Struct.new(:stepPasses, :stepFailures, :stepSkipped)
21
49
  .new(0, 0, 0)
22
50
 
23
- begin
24
- # read in the test data
25
- tests = Taf::Parser.read_test_data(test_file_name)
26
- # if unable to read the test data, show the error and move onto the
27
- # next file (if there is one)
28
- rescue StandardError => e
29
- Taf::MyLog.log.warn 'Terminating the current test spec: ' \
30
- "#{test_file_name} #{e}"
31
- Taf::MyLog.log.info
32
- '...continuing with the next test file (if there is one)'
33
- end
51
+ tests = get_test_data(test_file_name)
34
52
 
35
53
  # create project folders - these only need creating once per test suite
36
54
  Taf::CreateDirectories.construct_projectdirs
37
55
 
38
56
  Taf::Browser.open_browser
39
-
40
- begin
41
- tests['steps'].each_with_index do |test_step, test_step_idx|
42
- test_step_idx += 1
43
-
44
- parsed_steps = Taf::Parser.parse_test_step_data(test_step)
45
-
46
- # process the test step data
47
- Taf::TestSteps.process_test_steps(test_file_name, test_step_idx,
48
- parsed_steps, metrics)
49
- end
50
- rescue Taf::TafError => e
51
- warn e
52
- Taf::MyLog.log.warn e
53
- end
57
+ get_step_data(test_file_name, tests, metrics)
54
58
 
55
59
  # output the test results summary to console
56
60
  Taf::ReportSummary.test_step_summary(test_file_name, test_file_idx,
@@ -9,8 +9,10 @@ module Taf
9
9
  def initialize(step_attributes)
10
10
  @value = step_attributes[:testvalue]
11
11
  @value2 = step_attributes[:testvalue2]
12
+ @value3 = step_attributes[:testvalue3]
12
13
  @locate = step_attributes[:locate]
13
14
  @locate2 = step_attributes[:locate2]
15
+ @locate3 = step_attributes[:locate3]
14
16
  end
15
17
 
16
18
  def self.register(name)
@@ -45,7 +47,7 @@ module Taf
45
47
  end
46
48
 
47
49
  def mem_word_check(user, b_title_sucess)
48
- if Taf::Browser.b.title.eql?('Memorable word')
50
+ if Taf::Browser.b.title.eql?('Memorable word Portal')
49
51
  portal_mem_word(user, b_title_sucess)
50
52
  elsif Taf::Browser.b.title.eql?(b_title_sucess)
51
53
  Taf::MyLog.log.info("User: #{user} has logged in successful.")
@@ -27,12 +27,18 @@ module Taf
27
27
  ele = Taf::Browser.b.send(@elms[index], "#{@locate}": @value)
28
28
 
29
29
  ele.wait_until(&:exists?)
30
- (ele.value == @value2)
31
- Taf::MyLog.log.info("Textbox: #{@value} has correct value: #{value2}")
32
- true
33
- rescue StandardError
34
- Taf::MyLog.log.warn("Textbox: #{@value} does not exist")
35
- false
30
+
31
+ if ele.value == @value2
32
+ Taf::MyLog.log.info(
33
+ "Textbox: #{@value} has correct value: #{@value2}"
34
+ )
35
+ true
36
+ else
37
+ Taf::MyLog.log.warn(
38
+ "Textbox: got #{ele.value}, expected #{@value2}"
39
+ )
40
+ false
41
+ end
36
42
  end
37
43
  end
38
44
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Taf
4
+ module TestSteps
5
+ module Handlers
6
+ # Generate an RSA token for use with 2FA login.
7
+ class GenerateToken < Base
8
+ register :generate_token
9
+
10
+ def perform
11
+ raise 'TOKEN_SEED env var not set' unless ENV['TOKEN_SEED']
12
+
13
+ # Generate token using the seed from the environment.
14
+ _, stdout, stderr, wait_thr = Open3.popen3(
15
+ 'stoken', '--file', ENV['TOKEN_SEED']
16
+ )
17
+
18
+ raise stderr.gets unless wait_thr.value.success?
19
+
20
+ Taf::Browser.b.send(:text_field, "#{@locate}": @value)
21
+ .wait_until(&:exists?).send_keys stdout.gets
22
+
23
+ stdout.close
24
+ stderr.close
25
+
26
+ true
27
+ rescue StandardError => e
28
+ Taf::MyLog.log.warn("Error generating token: #{e}")
29
+
30
+ false
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -12,27 +12,40 @@ module Taf
12
12
  user = ENV[user.to_s] if ENV[user.to_s]
13
13
 
14
14
  login_user(user)
15
- rescue StandardError
16
- Taf::MyLog.log.error "unable to find login: #{@value}"
17
- raise Taf::LoginTypeFailed
18
15
  end
19
16
 
20
17
  def login_user(user)
21
18
  case @value.downcase
22
- when 'portal_login'
23
- portal_login(user)
24
- when 'sso_login'
25
- sso_login(user)
19
+ when 'admin_portal_login' then admin_portal_login(user)
20
+ when 'portal_login' then portal_login(user)
21
+ when 'sint_login' then sint_login(user)
22
+ when 'sso_login' then sso_login(user)
23
+ else
24
+ Taf::MyLog.log.error "unable to find login: #{@value}"
25
+ raise Taf::LoginTypeFailed
26
26
  end
27
27
  end
28
28
 
29
29
  private
30
30
 
31
+ def admin_portal_login(user)
32
+ url = ENV['ADMINL_URL']
33
+ pass = ENV['ADMIN_USER_PASS']
34
+ b_title = 'Log in Portal Admin'
35
+ b_title_sucess = 'Home Admin Portal'
36
+ user_elm = 'admin_username'
37
+ pass_elm = 'admin_password'
38
+
39
+ Taf::Browser.b.goto(url)
40
+ login_process(b_title, user_elm, pass_elm, user, pass)
41
+ login_check(b_title_sucess, user)
42
+ end
43
+
31
44
  def portal_login(user)
32
45
  url = ENV['PORTAL_URL']
33
46
  pass = ENV['PORTAL_USER_PASS']
34
- b_title = 'Log in'
35
- b_title_sucess = 'Home'
47
+ b_title = 'Log in Portal'
48
+ b_title_sucess = 'Home Portal'
36
49
  user_elm = 'user_email'
37
50
  pass_elm = 'user_password'
38
51
 
@@ -53,6 +66,19 @@ module Taf
53
66
  login_process(b_title, user_elm, pass_elm, user, pass)
54
67
  login_check(b_title_sucess, user)
55
68
  end
69
+
70
+ def sint_login(user)
71
+ url = ENV['SINT_URL']
72
+ pass = ENV['SINT_USER_PASS']
73
+ b_title = 'SINT'
74
+ b_title_sucess = 'SINT'
75
+ user_elm = 'user_username'
76
+ pass_elm = 'user_password'
77
+
78
+ Taf::Browser.b.goto(url)
79
+ login_process(b_title, user_elm, pass_elm, user, pass)
80
+ login_check(b_title_sucess, user)
81
+ end
56
82
  end
57
83
  end
58
84
  end
@@ -7,19 +7,21 @@ module Taf
7
7
  class PingTest < Base
8
8
  register :ping_test
9
9
 
10
- # TODO: retry every 'x' until timeout reached.
11
10
  def perform
12
- check = Net::Ping::HTTP.new(@value)
13
-
14
- check.ping?
15
- sleep 5
16
- if check.ping?
17
- Taf::MyLog.log.info("pinged: #{@value}")
18
- return true
11
+ tries ||= 20
12
+ Faraday.get(@value)
13
+ rescue Faraday::Error
14
+ if (tries -= 1).positive?
15
+ sleep 1
16
+ puts "Failed to ping: #{@value} - Retries left: #{tries}"
17
+ retry
19
18
  else
20
19
  Taf::MyLog.log.warn("Failed to ping: #{@value}")
21
- return false
20
+ false
22
21
  end
22
+ else
23
+ Taf::MyLog.log.info("Pinged successfully: #{@value}")
24
+ true
23
25
  end
24
26
  end
25
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Taf
4
- VERSION = '0.4.1'
4
+ VERSION = '0.4.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Perrett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-16 00:00:00.000000000 Z
11
+ date: 2019-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '2.02'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '2.02'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.8'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler-audit
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,47 +67,47 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.2'
55
69
  - !ruby/object:Gem::Dependency
56
- name: json
70
+ name: faraday
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '2.2'
75
+ version: '0.15'
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '2.2'
82
+ version: '0.15'
69
83
  - !ruby/object:Gem::Dependency
70
- name: logger
84
+ name: json
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '1.2'
89
+ version: '2.2'
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '1.2'
96
+ version: '2.2'
83
97
  - !ruby/object:Gem::Dependency
84
- name: net-ping
98
+ name: logger
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '2.0'
103
+ version: '1.2'
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '2.0'
110
+ version: '1.2'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubygems-update
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -188,6 +202,7 @@ files:
188
202
  - lib/taf/test_steps/handlers/base/check_url.rb
189
203
  - lib/taf/test_steps/handlers/base/click_button.rb
190
204
  - lib/taf/test_steps/handlers/base/execute_system_command.rb
205
+ - lib/taf/test_steps/handlers/base/generate_token.rb
191
206
  - lib/taf/test_steps/handlers/base/handle_browser_window.rb
192
207
  - lib/taf/test_steps/handlers/base/ipause.rb
193
208
  - lib/taf/test_steps/handlers/base/list_all_dropdowns_values.rb