Class: AlignLogin

Inherits:
AutomationFramework::Utilities
  • Object
show all
Includes:
Capybara::DSL
Defined in:
lib/oct_td_factory/helpers/align_login.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#tokenObject

Returns the value of attribute token.



4
5
6
# File 'lib/oct_td_factory/helpers/align_login.rb', line 4

def token
  @token
end

Instance Method Details

#get_logged_in_bearer_tokenObject

def app

@app ||= AutomationFramework::Application.instance

end



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/oct_td_factory/helpers/align_login.rb', line 11

def get_logged_in_bearer_token
  align_cookie = Capybara.current_session.driver.browser.manage.cookie_named('align')[:value]
  align_sig = Capybara.current_session.driver.browser.manage.cookie_named('align.sig')[:value]
  url = URI("#{ENV.fetch('TOPICS_URL')}/auth/token")

  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = (url.scheme == 'https')
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  request = Net::HTTP::Post.new(url)
  request['Cookie'] = "align=#{align_cookie}; align.sig=#{align_sig}"
  response = http.request(request)
  JSON.parse(response.body)['accessToken']
end

#login(user, app_url = url) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/oct_td_factory/helpers/align_login.rb', line 25

def (user, app_url = url)
  logout
  visit(app_url)
  find('#usernameField').set(username(user))
  find('button[id=nextButton]').click
  has_css?('#usernameField')
  has_css?('#passwordField', wait: 1)
  find('#passwordField').set(password)
  find('#signInButton').click
  has_css?('.user-name', wait: 5)
  set_token(user)
end

#login_headless(user) ⇒ Object



38
39
40
41
# File 'lib/oct_td_factory/helpers/align_login.rb', line 38

def (user)
  set_headless_browser
  (user)
end

#logoutObject



43
44
45
46
# File 'lib/oct_td_factory/helpers/align_login.rb', line 43

def logout
  visit("#{url}/logout")
  Capybara.current_session.driver.browser.manage.delete_all_cookies
end

#password(user = 'TOPICS') ⇒ Object



48
49
50
# File 'lib/oct_td_factory/helpers/align_login.rb', line 48

def password(user = 'TOPICS')
  ENV.fetch(user.upcase + '_PASSWORD')
end

#re_enter_username?(user) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
56
# File 'lib/oct_td_factory/helpers/align_login.rb', line 52

def re_enter_username?(user)
  return if page.find('input[id=usernameField]').value == username(user)

  fill_in 'usernameField', with: username(user)
end

#set_headless_browser(screen_width = (ENV['SCREEN_WIDTH'] || '1600'), screen_height = (ENV['SCREEN_HEIGHT'] || '1200')) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/oct_td_factory/helpers/align_login.rb', line 58

def set_headless_browser(screen_width = (ENV['SCREEN_WIDTH'] || '1600'),
                         screen_height = (ENV['SCREEN_HEIGHT'] || '1200'))
  Capybara.register_driver :selenium_chrome_headless do |app|
    o = Selenium::WebDriver::Chrome::Options
        .new(args: ['--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage',
                    '--incognito', '--disable-notifications',
                    "--window-size=#{screen_width},#{screen_height}"])
    Capybara::Selenium::Driver.new(app, browser: :chrome, options: o)
  end
  Capybara.current_driver = :selenium_chrome_headless
end

#set_token(user) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/oct_td_factory/helpers/align_login.rb', line 70

def set_token(user)
  if token.is_a?(Hash)
    token[user] = get_logged_in_bearer_token
  else
    self.token = { user => get_logged_in_bearer_token }
  end
end

#url(app = 'TOPICS') ⇒ Object



89
90
91
# File 'lib/oct_td_factory/helpers/align_login.rb', line 89

def url(app = 'TOPICS')
  ENV.fetch(app.upcase + '_URL')
end

#user_token(user) ⇒ Object



78
79
80
81
82
83
84
85
86
87
# File 'lib/oct_td_factory/helpers/align_login.rb', line 78

def user_token(user)
  if token.nil? || token.key?(user) == false
    (user)
  elsif JWT.decode(token[user], nil, false)[0]['exp'] > (Time.now + 60).to_i
    token[user] = token[user]
  else
    (user)
  end
  token[user]
end

#username(user) ⇒ Object



93
94
95
# File 'lib/oct_td_factory/helpers/align_login.rb', line 93

def username(user)
  ENV.fetch(user.upcase + '_USERNAME')
end