# frozen_string_literal: true module Brevio::Session # Module used to enable testing for controllers using the Brevio session. # Mocks a login to a shared redis, with keys generated by the Brevio::Session::CookieJar. # module Testing # Simulates a user with a shared Brevio session. We can specify which *brevio_id* the # mocked ID service should return (as well as a custom last updated_at timestamp). # # The user needs to have the following methods defined: #brevio_id, #audit_company # def brevio_login(user, updated_at: Time.current.yesterday) redis_key = SecureRandom.hex(6) session_hash = { user_id: user.brevio_id, audit_company_id: user.audit_company.brevio_id, user_patch: user.patch, user_stamp: updated_at } Testing.config.logger.info "setting Brevio session to #{session_hash}" Testing.config.gem_config.redis.set( redis_key, session_hash ) Testing.config.gem_config.redis.set("brevio-id:audit-company:#{user.audit_company.brevio_id}:patch", user.audit_company.patch) set_cookie(redis_key) end def brevio_login_new_user(user_brevio_id, patch: nil, audit_company:) redis_key = SecureRandom.hex(6) session_hash = { user_id: user_brevio_id, audit_company_id: audit_company.brevio_id, user_patch: patch || SecureRandom.hex(12), user_stamp: Time.current.yesterday } Testing.config.logger.info "setting Brevio session to #{session_hash}" Testing.config.gem_config.redis.set( redis_key, session_hash ) set_cookie(redis_key) end def brevio_logout cookies[Testing.config.gem_config.session_cookie] = nil end # rubocop:disable Naming/AccessorMethodName (set makes sense here) def set_cookie(value) cookies[Testing.config.gem_config.session_cookie] = value end # rubocop:enable Naming/AccessorMethodName extend self attr_accessor :sessions, :config def setup!(logger:) self.config = Config.new config.logger = logger config.gem_config = Brevio::Session::Config.config config.logger.info '--- 👨‍🔬 Setting up Brevio Session gem for testing 👨‍🔬 ---' # Ensures we return a mocked value of the session, rather than something which depends on # the cryptographically signed value. # Brevio::Session::Cookies::Parse.send(:define_method, :perform!) do |cookie| raise NilSession if cookie.nil? cookie end end class Config attr_accessor :logger, :gem_config end end end