8f39c015ea
This is the first step of a multi-step SaaS engine extraction. Looking ahead to an open source release, we need to make sure that local authentication is treated as an "official" option, and not just a hack I added for Kevin to do load testing outside our DC. So this PR gets to green, and adds a CI step in "local authentication" mode. This all probably feels a little hacky to you, Reader, but the goal of this change is to ease the next step, which will be extracting the 37id and Queenbee integrations into a proprietary "SaaS mode" engine. In service of that goal, this commit simply wraps all of the dependent code and tests with a conditional check on `config.x.local_authentication`.
84 lines
2.5 KiB
Ruby
84 lines
2.5 KiB
Ruby
ENV["RAILS_ENV"] ||= "test"
|
|
require_relative "../config/environment"
|
|
|
|
Rails.application.config.active_record_tenanted.default_tenant = ActiveRecord::FixtureSet.identify :'37s_fizzy'
|
|
|
|
require "rails/test_help"
|
|
require "webmock/minitest"
|
|
require "vcr"
|
|
unless Rails.application.config.x.local_authentication
|
|
require "signal_id/testing"
|
|
require "queenbee/testing/mocks"
|
|
end
|
|
require "mocha/minitest"
|
|
|
|
WebMock.allow_net_connect!
|
|
|
|
VCR.configure do |config|
|
|
config.allow_http_connections_when_no_cassette = true
|
|
config.cassette_library_dir = "test/vcr_cassettes"
|
|
config.hook_into :webmock
|
|
config.filter_sensitive_data("<OPEN_API_KEY>") { Rails.application.credentials.openai_api_key || ENV["OPEN_AI_API_KEY"] }
|
|
config.default_cassette_options = {
|
|
match_requests_on: [ :method, :uri, :body ]
|
|
}
|
|
|
|
# Ignore timestamps in request bodies
|
|
config.before_record do |i|
|
|
if i.request&.body
|
|
i.request.body.gsub!(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} UTC/, "<TIME>")
|
|
end
|
|
end
|
|
|
|
config.register_request_matcher :body_without_times do |r1, r2|
|
|
b1 = (r1.body || "").gsub(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} UTC/, "<TIME>")
|
|
b2 = (r2.body || "").gsub(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} UTC/, "<TIME>")
|
|
b1 == b2
|
|
end
|
|
|
|
config.default_cassette_options = {
|
|
match_requests_on: [ :method, :uri, :body_without_times ]
|
|
}
|
|
end
|
|
|
|
module ActiveSupport
|
|
class TestCase
|
|
parallelize(workers: :number_of_processors)
|
|
|
|
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
|
|
fixtures :all
|
|
|
|
include ActiveJob::TestHelper
|
|
unless Rails.application.config.x.local_authentication
|
|
include SignalId::Testing
|
|
end
|
|
include ActionTextTestHelper, CardTestHelper, ChangeTestHelper, SessionTestHelper
|
|
end
|
|
end
|
|
|
|
class ActionDispatch::IntegrationTest
|
|
setup do
|
|
integration_session.default_url_options[:script_name] = "/#{ApplicationRecord.current_tenant}"
|
|
end
|
|
end
|
|
|
|
class ActionDispatch::SystemTestCase
|
|
setup do
|
|
self.default_url_options[:script_name] = "/#{ApplicationRecord.current_tenant}"
|
|
end
|
|
end
|
|
|
|
RubyLLM.configure do |config|
|
|
config.openai_api_key ||= "DUMMY-TEST-KEY" # Run tests with VCR without having to configure OpenAI API key locally.
|
|
end
|
|
|
|
unless Rails.application.config.x.local_authentication
|
|
Queenbee::Remote::Account.class_eval do
|
|
# because we use the account ID as the tenant name, we need it to be unique in each test to avoid
|
|
# parallelized tests clobbering each other.
|
|
def next_id
|
|
super + Random.rand(1000000)
|
|
end
|
|
end
|
|
end
|