taf 0.4.1 → 0.4.4

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.
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