diff --git a/Gemfile b/Gemfile index f29df35d..9e1ca17b 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,6 @@ gem "pg", "~> 1.5" gem "puma", "~> 6.5" gem "rack-flash3", "~> 1.0" gem "rackup", "~> 2.0" -gem "sidekiq", "~> 7.2" gem "sinatra", "~> 4.0" group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index ca866851..5eb87643 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -98,8 +98,6 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - redis-client (0.22.1) - connection_pool regexp_parser (2.10.0) rerun (0.14.0) listen (~> 3.0) @@ -131,11 +129,6 @@ GEM ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) securerandom (0.4.1) - sidekiq (7.2.4) - concurrent-ruby (< 2) - connection_pool (>= 2.3.0) - rack (>= 2.2.4) - redis-client (>= 0.19.0) simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) @@ -190,7 +183,6 @@ DEPENDENCIES rerun (~> 0.0) rspec (~> 3.0) rubocop (~> 1.70) - sidekiq (~> 7.2) simplecov (~> 0.0) sinatra (~> 4.0) yard (>= 0.9.36, < 1.0) diff --git a/Procfile b/Procfile index a3e19e30..a124c360 100644 --- a/Procfile +++ b/Procfile @@ -1,6 +1,4 @@ # outboxer_load: bin/outboxer_load 100000 -# sidekiq: bundle exec sidekiq -C config/sidekiq.yml -r ./config/sidekiq.rb # outboxer_published_messages_deleter: bin/outboxer_published_messages_deleter # outboxer_publisher: bin/outboxer_publisher # outboxer_app: bundle exec rerun "rackup -p 4567" -outboxer_sidekiq_publisher_1: bin/outboxer_sidekiq_publisher diff --git a/app/jobs/event_created_job.rb b/app/jobs/event_created_job.rb deleted file mode 100644 index a27a94c4..00000000 --- a/app/jobs/event_created_job.rb +++ /dev/null @@ -1,57 +0,0 @@ -class EventCreatedJob - include Sidekiq::Job - - def self.perform_async(event_id, event_type) - can_handle?(event_type: event_type) ? super : nil - end - - def perform(event_id, event_type) - job_class_name = to_job_class_name(event_type: event_type) - - if job_class_name.nil? - Sidekiq.logger.debug("Could not get job class name from event type: #{event_type}") - - return - end - - job_class = job_class_name.safe_constantize - - if job_class.nil? - Sidekiq.logger.debug("Could not constantize job class name: #{job_class_name}") - - return - end - - job_class.perform_async(event_id, event_type) - end - - TYPE_REGEX = /\A(::)?([A-Z][\w]*::)*[A-Z][\w]*Event\z/ - - def to_job_class_name(event_type:) - self.class.can_handle?(event_type: event_type) ? event_type.sub(/Event\z/, "Job") : nil - end - - def self.can_handle?(event_type:) - # \A => start of string - # (::)? => optional leading :: - # ([A-Z]\w*::)* => zero or more namespace segments like Foo:: or FooBar:: - # [A-Z]\w* => final constant segment (starts with capital letter) - # Event\z => ends with 'Event', anchors to end of string - # - # Valid examples: - # ✔ ContactCreatedEvent - # ✔ ::ContactCreatedEvent - # ✔ Accountify::ContactCreatedEvent - # ✔ Accountify::Invoice::CreatedEvent - # ✔ MyApp::Domain::Event::UserSignedUpEvent - # - # Invalid examples: - # ✘ contactCreatedEvent # starts lowercase - # ✘ ContactCreated # missing 'Event' - # ✘ Event # just 'Event' - # ✘ 123::InvalidEvent # starts with digit - # ✘ Foo:: # incomplete constant - - /\A(::)?([A-Z][\w]*::)*[A-Z][\w]*Event\z/.match?(event_type) - end -end diff --git a/app/jobs/outboxer_integration/complete_test_job.rb b/app/jobs/outboxer_integration/complete_test_job.rb deleted file mode 100644 index f0c36932..00000000 --- a/app/jobs/outboxer_integration/complete_test_job.rb +++ /dev/null @@ -1,13 +0,0 @@ -module OutboxerIntegration - class CompleteTestJob - include Sidekiq::Job - - def perform(args) - TestService.complete( - user_id: args["user_id"], - tenant_id: args["tenant_id"], - id: args["id"], - lock_version: args["lock_version"]) - end - end -end diff --git a/app/jobs/outboxer_integration/test_started_job.rb b/app/jobs/outboxer_integration/test_started_job.rb deleted file mode 100644 index 78474605..00000000 --- a/app/jobs/outboxer_integration/test_started_job.rb +++ /dev/null @@ -1,11 +0,0 @@ -module OutboxerIntegration - class TestStartedJob - include Sidekiq::Job - - def perform(event_id, event_type) - test_started_event = event_type.safe_constantize.find(event_id) - - TestCompletedEvent.create!(body: { "test_id" => test_started_event.body["test_id"] }) - end - end -end diff --git a/bin/console b/bin/console index 9c0d8d8e..50683cd8 100755 --- a/bin/console +++ b/bin/console @@ -3,22 +3,12 @@ require "bundler/setup" require "outboxer" -require "sidekiq" require "irb" -Dir.glob(File.join(__dir__, "../app/models/**/*.rb")).each do |file| - require file -end - environment = ENV["RAILS_ENV"] || "development" db_config = Outboxer::Database.config(environment: environment, concurrency: 1) Outboxer::Database.connect(config: db_config) -Sidekiq.configure_client do |config| - redis_url = ENV["REDIS_URL"] || "redis://localhost:6379/0" - config.redis = { url: redis_url, size: 1 } -end - ActiveRecord::Base.logger = Logger.new($stdout) ActiveRecord::Base.logger.level = Logger::DEBUG diff --git a/bin/outboxer_load b/bin/outboxer_load index 8c0505c3..fe2e1a50 100755 --- a/bin/outboxer_load +++ b/bin/outboxer_load @@ -24,9 +24,18 @@ queued_messages_count = 0 while queued_messages_count < max_messages_count break if reader.wait_readable(0) && reader.gets.strip == "INT" - messageable_id = SecureRandom.hex(3) - Outboxer::Message.queue(messageable_type: "Event", messageable_id: messageable_id) - puts "queued message for Event::#{messageable_id}" + class Event + attr_accessor :id + + def initialize(id:) + @id = id + end + end + + messageable = Event.new(id: SecureRandom.hex(3)) + + Outboxer::Message.queue(messageable: messageable) + puts "queued message for #{messageable.class.name}/#{messageable.id}" queued_messages_count += 1 end diff --git a/bin/outboxer_publisher b/bin/outboxer_publisher index ecebe6fc..fb421489 100755 --- a/bin/outboxer_publisher +++ b/bin/outboxer_publisher @@ -1,9 +1,7 @@ #!/usr/bin/env ruby require "bundler/setup" -require "sidekiq" require "outboxer" -require_relative "../app/jobs/event_created_job" cli_options = Outboxer::Publisher.parse_cli_options(ARGV) environment = cli_options.delete(:environment) || ENV["APP_ENV"] || ENV["RAILS_ENV"] || "development" @@ -12,14 +10,6 @@ config = Outboxer::Publisher.config(environment: environment, path: config_path) options = Outboxer::Publisher::PUBLISH_MESSAGE_DEFAULTS.merge(config.merge(cli_options)) logger = Outboxer::Logger.new($stdout, level: options[:log_level]) -Sidekiq.configure_client do |client_config| - client_config.redis = { - url: ENV["REDIS_URL"] || "redis://localhost:6379", - size: options[:concurrency] - } - client_config.logger = logger -end - database_config = Outboxer::Database.config( environment: environment, concurrency: options[:concurrency]) @@ -34,7 +24,10 @@ begin heartbeat_interval: options[:heartbeat_interval], logger: logger ) do |message| - EventCreatedJob.perform_async(message[:messageable_id], message[:messageable_type]) + logger.info "Outboxer publishing message " \ + "id=#{message[:id]} " \ + "messageable_id=#{message[:messageable_id]} " \ + "messageable_type=#{message[:messageable_type]}" end ensure Outboxer::Database.disconnect(logger: logger) diff --git a/bin/sidekiq b/bin/sidekiq deleted file mode 100755 index e7af7e7e..00000000 --- a/bin/sidekiq +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -# -# This file was generated by Bundler. -# -# The application 'sidekiq' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) - -bundle_binstub = File.expand_path("bundle", __dir__) - -if File.file?(bundle_binstub) - if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") - load(bundle_binstub) - else - abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. -Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") - end -end - -require "rubygems" -require "bundler/setup" - -load Gem.bin_path("sidekiq", "sidekiq") diff --git a/bin/sidekiqmon b/bin/sidekiqmon deleted file mode 100755 index 0c907984..00000000 --- a/bin/sidekiqmon +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -# -# This file was generated by Bundler. -# -# The application 'sidekiqmon' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) - -bundle_binstub = File.expand_path("bundle", __dir__) - -if File.file?(bundle_binstub) - if File.read(bundle_binstub, 300).include?("This file was generated by Bundler") - load(bundle_binstub) - else - abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. -Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") - end -end - -require "rubygems" -require "bundler/setup" - -load Gem.bin_path("sidekiq", "sidekiqmon") diff --git a/config.ru b/config.ru index 3b2dc37e..714c985f 100644 --- a/config.ru +++ b/config.ru @@ -4,20 +4,11 @@ require "dotenv/load" require "securerandom" require "sinatra" -require "sidekiq" -require "sidekiq/web" require "outboxer/web" -require_relative "app/models/application_record" -require_relative "app/models/event" - use Rack::Session::Cookie, secret: ENV.fetch("SESSION_SECRET", nil), same_site: true, max_age: 86_400 map "/outboxer" do run Outboxer::Web end - -map "/sidekiq" do - run Sidekiq::Web -end diff --git a/config/sidekiq.rb b/config/sidekiq.rb deleted file mode 100644 index 5e56f0d2..00000000 --- a/config/sidekiq.rb +++ /dev/null @@ -1,27 +0,0 @@ -require "bundler/setup" -require "active_record" -require "sidekiq" - -require "outboxer" - -Dir[File.expand_path("../app/models/**/*.rb", __dir__)].each { |file| require file } -Dir[File.expand_path("../app/jobs/**/*.rb", __dir__)].each { |file| require file } -Dir[File.expand_path("../app/services/**/*.rb", __dir__)].each { |file| require file } - -environment = ENV["RAILS_ENV"] || "development" - -db_config_content = File.read("config/database.yml") -db_config_erb_result = ERB.new(db_config_content).result -db_config = YAML.safe_load(db_config_erb_result)[environment] - -ActiveRecord::Base.establish_connection(db_config.merge("pool" => 5)) - -redis_url = ENV["REDIS_URL"] || "redis://localhost:6379/0" - -Sidekiq.configure_server do |config| - config.redis = { url: redis_url } -end - -Sidekiq.configure_client do |config| - config.redis = { url: redis_url } -end diff --git a/db/migrate/create_outboxer_integration_tests.rb b/db/migrate/create_outboxer_integration_tests.rb deleted file mode 100644 index ca0a09f0..00000000 --- a/db/migrate/create_outboxer_integration_tests.rb +++ /dev/null @@ -1,15 +0,0 @@ -class CreateOutboxerIntegrationTests < ActiveRecord::Migration[7.0] - def up - create_table :outboxer_integration_tests do |t| - t.bigint :tenant_id - - t.integer :lock_version, default: 0, null: false - - t.timestamps - end - end - - def down - drop_table :outboxer_integration_tests - end -end diff --git a/generators/install_generator.rb b/generators/install_generator.rb index e9688106..b84d3606 100644 --- a/generators/install_generator.rb +++ b/generators/install_generator.rb @@ -36,42 +36,6 @@ def copy_migrations migration_template( "db/migrate/create_outboxer_signals.rb", "db/migrate/create_outboxer_signals.rb") - - migration_template( - "db/migrate/create_events.rb", - "db/migrate/create_events.rb") - end - - def copy_models - copy_file( - "app/models/event.rb", - "app/models/event.rb") - - copy_file( - "app/models/outboxer_integration/test_started_event.rb", - "app/models/outboxer_integration/test_started_event.rb") - - copy_file( - "app/models/outboxer_integration/test_completed_event.rb", - "app/models/outboxer_integration/test_completed_event.rb") - end - - def copy_jobs - copy_file( - "app/jobs/event_created_job.rb", - "app/jobs/event_created_job.rb") - - copy_file( - "spec/jobs/event_created_job_spec.rb", - "spec/jobs/event_created_job_spec.rb") - - copy_file( - "app/jobs/outboxer_integration/test_started_job.rb", - "app/jobs/outboxer_integration/test_started_job.rb") - - copy_file( - "app/jobs/outboxer_integration/complete_test_job.rb", - "app/jobs/outboxer_integration/complete_test_job.rb") end def copy_bin_file diff --git a/lib/outboxer/message.rb b/lib/outboxer/message.rb index 470822f2..0095c570 100644 --- a/lib/outboxer/message.rb +++ b/lib/outboxer/message.rb @@ -11,14 +11,12 @@ module Message # @param messageable_id [Integer, nil] ID of the polymorphic messageable model # @param time [Time] time context for setting timestamps. # @return [Hash] a hash with message details including IDs and timestamps. - def queue(messageable: nil, - messageable_type: nil, messageable_id: nil, - time: ::Time) + def queue(messageable:, time: ::Time) current_utc_time = time.now.utc message = Models::Message.create!( - messageable_id: messageable&.id || messageable_id, - messageable_type: messageable&.class&.name || messageable_type, + messageable_id: messageable.id, + messageable_type: messageable.class.name, status: Message::Status::QUEUED, queued_at: current_utc_time, buffered_at: nil, diff --git a/lib/outboxer/web.rb b/lib/outboxer/web.rb index 571ab735..6bc508b6 100755 --- a/lib/outboxer/web.rb +++ b/lib/outboxer/web.rb @@ -607,8 +607,8 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, message = Message.find_by_id(id: params[:id]) - messageable_class = Object.const_get(message[:messageable_type]) - messageable = messageable_class.find_by_id(id: message[:messageable_id]) + messageable_class = message[:messageable_type]&.safe_constantize + messageable = message && messageable_class&.find_by_id(id: message[:messageable_id]) erb :message, locals: { denormalised_query_params: denormalised_query_params, @@ -632,8 +632,8 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, message = Message.find_by_id(id: params[:id]) messages_metrics = Message.metrics - messageable_class = Object.const_get(message[:messageable_type]) - messageable = messageable_class.find(message[:messageable_id]) + messageable_class = message[:messageable_type]&.safe_constantize + messageable = messageable_class&.find_by_id(id: message[:messageable_id]) erb :messageable, locals: { message: message, diff --git a/lib/outboxer/web/views/message.erb b/lib/outboxer/web/views/message.erb index 7d831253..cf827719 100644 --- a/lib/outboxer/web/views/message.erb +++ b/lib/outboxer/web/views/message.erb @@ -1,7 +1,7 @@
-

Message::<%= message[:id] %>

+

Message/<%= message[:id] %>

" method="post" style="display: inline;"> @@ -37,7 +37,7 @@ Messageable " class="custom-link"> - <%= message[:messageable_type] %>::<%= message[:messageable_id] %> + <%= message[:messageable_type] %>/<%= message[:messageable_id] %> diff --git a/lib/outboxer/web/views/messageable.erb b/lib/outboxer/web/views/messageable.erb index e0f7c7c8..bf06776b 100644 --- a/lib/outboxer/web/views/messageable.erb +++ b/lib/outboxer/web/views/messageable.erb @@ -1,25 +1,32 @@ -
-
-
-

<%= messageable.class.name %>::<%= messageable.id %>

-
-
- - - <% messageable.attributes.each do |key, value| %> - - - - - <% end %> - -
<%= key.humanize %> - <% if value.is_a?(Hash) || value.is_a?(Array) %> -
<%= JSON.pretty_generate(value) %>
- <% else %> - <%= value %> - <% end %> -
-
+<% if messageable.nil? %> + +<% else %> +
+
+
+

<%= messageable.class.name %>/<%= messageable.id %>

+
+
+ + + <% messageable.attributes.each do |key, value| %> + + + + + <% end %> + +
<%= key.humanize %> + <% if value.is_a?(Hash) || value.is_a?(Array) %> +
<%= JSON.pretty_generate(value) %>
+ <% else %> + <%= value %> + <% end %> +
+
+
+ <% end %>
diff --git a/lib/outboxer/web/views/messages.erb b/lib/outboxer/web/views/messages.erb index 3794c96c..6d55cb26 100644 --- a/lib/outboxer/web/views/messages.erb +++ b/lib/outboxer/web/views/messages.erb @@ -122,7 +122,7 @@ <%= message[:status] %> " class="custom-link"> - <%= message[:messageable_type] %>::<%= message[:messageable_id] %> + <%= message[:messageable_type] %>/<%= message[:messageable_id] %> diff --git a/lib/outboxer/web/views/publisher.erb b/lib/outboxer/web/views/publisher.erb index efb69241..8f93627f 100644 --- a/lib/outboxer/web/views/publisher.erb +++ b/lib/outboxer/web/views/publisher.erb @@ -1,7 +1,7 @@
-

Publisher::<%= publisher[:id] %>

+

Publisher/<%= publisher[:id] %>

" method="post" style="display: inline;"> diff --git a/spec/bin/outboxer_publisher_spec.rb b/spec/bin/outboxer_publisher_spec.rb index 19f21896..5652ae79 100644 --- a/spec/bin/outboxer_publisher_spec.rb +++ b/spec/bin/outboxer_publisher_spec.rb @@ -1,57 +1,48 @@ require "rails_helper" -require_relative "../../app/models/application_record" -require_relative "../../app/models/event" -require_relative "../../app/models/outboxer_integration/test_started_event" -require_relative "../../app/models/outboxer_integration/test_completed_event" - RSpec.describe "bin/outboxer_publisher" do - let(:test_id) { 999 } - - it "performs event job handler async" do - Sidekiq::Testing.disable! - - OutboxerIntegration::TestStartedEvent.create!(body: { "test_id" => test_id }) - - env = { - "RAILS_ENV" => "test", - "REDIS_URL" => "redis://localhost:6379/0" - } + let(:env) { { "RAILS_ENV" => "test" } } + let(:publisher_cmd) { File.join(Dir.pwd, "bin", "outboxer_publisher") } - outboxer_publisher_cmd = File.join(Dir.pwd, "bin", "outboxer_publisher") - outboxer_publisher_pid = spawn(env, outboxer_publisher_cmd) + let(:attempt) { 1 } + let(:max_attempts) { 20 } + let(:delay) { 1 } - sidekiq_cmd = "bundle exec sidekiq -r ./config/sidekiq.rb" - sidekiq_pid = spawn(env, sidekiq_cmd) + let(:messageable) { double("Event", id: 123, class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } - max_attempts = 10 + it "publishes message" do + read_io, write_io = IO.pipe + publisher_pid = spawn(env, "ruby", publisher_cmd, out: write_io, err: write_io) + write_io.close - test_completed_event = nil + output = +"" + attempt = 1 - max_attempts.times do |attempt| - test_completed_event = OutboxerIntegration::TestCompletedEvent.last - break if test_completed_event + while attempt <= max_attempts + begin + partial = read_io.read_nonblock(1024) + output << partial if partial + rescue IO::WaitReadable, EOFError + # no output yet + end - sleep 1 + break if output.include?("Outboxer publishing message") - Sidekiq.logger.warn "OutboxerIntegration::TestCompletedEvent not found. " \ - "Retrying (attempt #{attempt + 1}/#{max_attempts})..." + sleep delay + warn "Outboxer publishing message not found. Retrying (attempt #{attempt}/#{max_attempts})..." + attempt += 1 end - expect(test_completed_event.type).not_to be_nil - expect(test_completed_event.body).to eql({ "test_id" => test_id }) - expect(test_completed_event.created_at).not_to be_nil - ensure - if sidekiq_pid - Process.kill("TERM", sidekiq_pid) - Process.wait(sidekiq_pid) - end - - if outboxer_publisher_pid - Process.kill("TERM", outboxer_publisher_pid) - Process.wait(outboxer_publisher_pid) - end + Process.kill("TERM", publisher_pid) + Process.wait(publisher_pid) + read_io.close - Sidekiq::Testing.fake! + expect(output).to include( + "Outboxer publishing message " \ + "id=#{message[:id]} " \ + "messageable_id=#{message[:messageable_id]} " \ + "messageable_type=#{message[:messageable_type]}" + ) end end diff --git a/spec/jobs/event_created_job_spec.rb b/spec/jobs/event_created_job_spec.rb deleted file mode 100644 index 1565277a..00000000 --- a/spec/jobs/event_created_job_spec.rb +++ /dev/null @@ -1,288 +0,0 @@ -require "rails_helper" -require "sidekiq/testing" - -require_relative "../../app/jobs/event_created_job" - -Sidekiq::Testing.fake! - -RSpec.describe EventCreatedJob, type: :job do - before { Sidekiq::Worker.clear_all } - - describe "#perform" do - it "enqueues ContactCreatedJob" do - stub_const("ContactCreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.new.perform(1, "ContactCreatedEvent") - - expect(ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "ContactCreatedJob", - "args" => [1, "ContactCreatedEvent"]) - ]) - end - - it "enqueues Accountify::ContactCreatedJob" do - stub_const("Accountify", Module.new) - stub_const("Accountify::ContactCreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.new.perform(2, "Accountify::ContactCreatedEvent") - - expect(Accountify::ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "Accountify::ContactCreatedJob", - "args" => [2, "Accountify::ContactCreatedEvent"]) - ]) - end - - it "enqueues Accountify::InvoiceUpdatedJob" do - stub_const("Accountify", Module.new) unless defined?(Accountify) - stub_const("Accountify::InvoiceUpdatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.new.perform(3, "Accountify::InvoiceUpdatedEvent") - - expect(Accountify::InvoiceUpdatedJob.jobs).to match([ - hash_including( - "class" => "Accountify::InvoiceUpdatedJob", - "args" => [3, "Accountify::InvoiceUpdatedEvent"]) - ]) - end - - it "enqueues Accountify::Invoice::CreatedJob" do - stub_const("Accountify", Module.new) - stub_const("Accountify::Invoice", Module.new) - stub_const("Accountify::Invoice::CreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.new.perform(4, "Accountify::Invoice::CreatedEvent") - - expect(Accountify::Invoice::CreatedJob.jobs).to match([ - hash_including( - "class" => "Accountify::Invoice::CreatedJob", - "args" => [4, "Accountify::Invoice::CreatedEvent"]) - ]) - end - - it "enqueues MyApp::Domain::Event::UserSignedUpJob" do - stub_const("MyApp", Module.new) - stub_const("MyApp::Domain", Module.new) - stub_const("MyApp::Domain::Event", Module.new) - stub_const("MyApp::Domain::Event::UserSignedUpJob", - Class.new { include Sidekiq::Job }) - - EventCreatedJob.new.perform( - 5, - "MyApp::Domain::Event::UserSignedUpEvent") - - expect(MyApp::Domain::Event::UserSignedUpJob.jobs).to match([ - hash_including( - "class" => "MyApp::Domain::Event::UserSignedUpJob", - "args" => [5, "MyApp::Domain::Event::UserSignedUpEvent"]) - ]) - end - - it "handles leading :: in type" do - stub_const("ContactCreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.new.perform(6, "::ContactCreatedEvent") - - expect(ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "ContactCreatedJob", - "args" => [6, "::ContactCreatedEvent"]) - ]) - end - - it "does not enqueue for invalid type format" do - EventCreatedJob.new.perform(7, "contact_created_event") - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "does not enqueue for empty string" do - EventCreatedJob.new.perform(8, "") - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "does not enqueue if type does not end in Event" do - EventCreatedJob.new.perform(9, "SomethingCreated") - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "does not enqueue for missing job class" do - EventCreatedJob.new.perform(10, "ImaginaryThingEvent") - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "does not enqueue for invalid type constant path" do - EventCreatedJob.new.perform(11, "123::@@@Invalid") - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "does not enqueue if type is exactly 'Event'" do - EventCreatedJob.new.perform(12, "Event") - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "logs debug message when type is invalid" do - expect(Sidekiq.logger).to receive(:debug).with( - "Could not get job class name from event type: bad_type") - - EventCreatedJob.new.perform(13, "bad_type") - end - - it "logs debug message when job class name is not constantizable" do - expect(Sidekiq.logger).to receive(:debug).with( - "Could not constantize job class name: ImaginaryThingJob") - - EventCreatedJob.new.perform(14, "ImaginaryThingEvent") - end - end - - describe ".perform_async" do - before { Sidekiq::Worker.clear_all } - - it "enqueues ContactCreatedJob through perform_async" do - stub_const("ContactCreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.perform_async(1, "ContactCreatedEvent") - EventCreatedJob.drain - - expect(ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "ContactCreatedJob", - "args" => [1, "ContactCreatedEvent"]) - ]) - end - - it "enqueues Accountify::ContactCreatedJob through perform_async" do - stub_const("Accountify", Module.new) - stub_const("Accountify::ContactCreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.perform_async(2, "Accountify::ContactCreatedEvent") - EventCreatedJob.drain - - expect(Accountify::ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "Accountify::ContactCreatedJob", - "args" => [2, "Accountify::ContactCreatedEvent"]) - ]) - end - - it "enqueues Accountify::InvoiceUpdatedJob through perform_async" do - stub_const("Accountify", Module.new) unless defined?(Accountify) - stub_const("Accountify::InvoiceUpdatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.perform_async(3, "Accountify::InvoiceUpdatedEvent") - EventCreatedJob.drain - - expect(Accountify::InvoiceUpdatedJob.jobs).to match([ - hash_including( - "class" => "Accountify::InvoiceUpdatedJob", - "args" => [3, "Accountify::InvoiceUpdatedEvent"]) - ]) - end - - it "enqueues Accountify::Invoice::CreatedJob through perform_async" do - stub_const("Accountify", Module.new) - stub_const("Accountify::Invoice", Module.new) - stub_const("Accountify::Invoice::CreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.perform_async(4, "Accountify::Invoice::CreatedEvent") - EventCreatedJob.drain - - expect(Accountify::Invoice::CreatedJob.jobs).to match([ - hash_including( - "class" => "Accountify::Invoice::CreatedJob", - "args" => [4, "Accountify::Invoice::CreatedEvent"]) - ]) - end - - it "enqueues MyApp::Domain::Event::UserSignedUpJob through perform_async" do - stub_const("MyApp", Module.new) - stub_const("MyApp::Domain", Module.new) - stub_const("MyApp::Domain::Event", Module.new) - stub_const("MyApp::Domain::Event::UserSignedUpJob", - Class.new { include Sidekiq::Job }) - - EventCreatedJob.perform_async( - 5, - "MyApp::Domain::Event::UserSignedUpEvent") - EventCreatedJob.drain - - expect(MyApp::Domain::Event::UserSignedUpJob.jobs).to match([ - hash_including( - "class" => "MyApp::Domain::Event::UserSignedUpJob", - "args" => [5, "MyApp::Domain::Event::UserSignedUpEvent"]) - ]) - end - - it "handles leading :: in type through perform_async" do - stub_const("ContactCreatedJob", Class.new { include Sidekiq::Job }) - - EventCreatedJob.perform_async(6, "::ContactCreatedEvent") - EventCreatedJob.drain - - expect(ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "ContactCreatedJob", - "args" => [6, "::ContactCreatedEvent"]) - ]) - end - - it "does not enqueue job for invalid type format" do - expect do - EventCreatedJob.perform_async(7, "contact_created_event") - end.not_to change(EventCreatedJob.jobs, :size) - end - - it "does not enqueue job for empty string" do - expect do - EventCreatedJob.perform_async(8, "") - end.not_to change(EventCreatedJob.jobs, :size) - end - - it "does not enqueue job if type does not end in Event" do - expect do - EventCreatedJob.perform_async(9, "SomethingCreated") - end.not_to change(EventCreatedJob.jobs, :size) - end - - it "skips perform_async for missing job class" do - EventCreatedJob.perform_async(10, "ImaginaryThingEvent") - EventCreatedJob.drain - - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "skips perform_async for invalid constant path" do - EventCreatedJob.perform_async(11, "123::@@@Invalid") - EventCreatedJob.drain - - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "skips perform_async if type is exactly 'Event'" do - EventCreatedJob.perform_async(12, "Event") - EventCreatedJob.drain - - expect(Sidekiq::Worker.jobs.size).to eq(0) - end - - it "returns nil for invalid type" do - result = EventCreatedJob.perform_async(13, "bad_type") - expect(result).to be_nil - end - - it "returns job ID when enqueued" do - stub_const("ContactCreatedJob", Class.new { include Sidekiq::Job }) - - result = EventCreatedJob.perform_async(14, "ContactCreatedEvent") - EventCreatedJob.drain - - expect(result).to be_a(String) - expect(ContactCreatedJob.jobs).to match([ - hash_including( - "class" => "ContactCreatedJob", - "args" => [14, "ContactCreatedEvent"]) - ]) - end - end -end diff --git a/spec/lib/outboxer/message/queue_spec.rb b/spec/lib/outboxer/message/queue_spec.rb index 13798717..e5431cc2 100644 --- a/spec/lib/outboxer/message/queue_spec.rb +++ b/spec/lib/outboxer/message/queue_spec.rb @@ -15,9 +15,8 @@ module Outboxer end context "when messageable_type and messageable_id arguments provided" do - let!(:queued_message) do - Message.queue(messageable_type: "Event", messageable_id: "1") - end + let(:messageable) { double("Event", id: "1", class: double(name: "Event")) } + let!(:queued_message) { Outboxer::Message.queue(messageable: messageable) } it "creates model with queued status" do expect(queued_message[:id]).to eq( diff --git a/spec/lib/outboxer/web/message/delete_spec.rb b/spec/lib/outboxer/web/message/delete_spec.rb index 4e5ca6ca..21e5e5c1 100644 --- a/spec/lib/outboxer/web/message/delete_spec.rb +++ b/spec/lib/outboxer/web/message/delete_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /message/:id/delete", type: :request do @@ -12,21 +9,19 @@ def app Outboxer::Web end - let!(:event) { Event.create!(id: 1, type: "Event") } - let!(:message) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event.id) - end + let(:messageable) { double("Event", id: 123, class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } before do header "Host", "localhost" - post "/message/#{message.id}/delete" + post "/message/#{message[:id]}/delete" follow_redirect! end it "deletes message" do - expect(Outboxer::Models::Message.exists?(message.id)).to be false + expect(Outboxer::Models::Message.exists?(message[:id])).to be false end it "redirects with flash" do diff --git a/spec/lib/outboxer/web/message/messageable_spec.rb b/spec/lib/outboxer/web/message/messageable_spec.rb index 15a7e2bb..590e4103 100644 --- a/spec/lib/outboxer/web/message/messageable_spec.rb +++ b/spec/lib/outboxer/web/message/messageable_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "GET /message/:id/messageable", type: :request do @@ -12,15 +9,13 @@ def app Outboxer::Web end - let(:event) { Event.create!(type: "Event") } - let!(:message) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event.id) - end + let(:messageable) { double("Event", id: 123, class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } before do header "Host", "localhost" - get "/message/#{message.id}/messageable" + get "/message/#{message[:id]}/messageable" end it "loads the associated messageable object for a message" do diff --git a/spec/lib/outboxer/web/message/requeue_spec.rb b/spec/lib/outboxer/web/message/requeue_spec.rb index 0ca27d35..611f6509 100644 --- a/spec/lib/outboxer/web/message/requeue_spec.rb +++ b/spec/lib/outboxer/web/message/requeue_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /message/:id/requeue", type: :request do @@ -12,23 +9,19 @@ def app Outboxer::Web end - let!(:event) { Event.create!(id: 1, type: "Event") } - let!(:message) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event.id) - end + let(:messageable) { double("Event", id: 123, class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } before do header "Host", "localhost" - post "/message/#{message.id}/requeue" + post "/message/#{message[:id]}/requeue" follow_redirect! - - message.reload end it "requeues a message" do - expect(message.status).to eql("queued") + expect(Outboxer::Models::Message.find(message[:id]).status).to eql("queued") end it "redirects with flash" do diff --git a/spec/lib/outboxer/web/message/show_spec.rb b/spec/lib/outboxer/web/message/show_spec.rb index 4241ed54..bf37a6ab 100644 --- a/spec/lib/outboxer/web/message/show_spec.rb +++ b/spec/lib/outboxer/web/message/show_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "GET /message/:id", type: :request do @@ -12,19 +9,17 @@ def app Outboxer::Web end - let(:event) { Event.create!(type: "Event") } - let!(:message) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event.id) - end + let(:messageable) { double("Event", id: "1", class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } before do header "Host", "localhost" - get "/message/#{message.id}" + get "/message/#{message[:id]}" end it "loads message" do expect(last_response).to be_ok - expect(last_response.body).to include(message.id.to_s) + expect(last_response.body).to include(message[:id].to_s) end end diff --git a/spec/lib/outboxer/web/messages/delete_all_spec.rb b/spec/lib/outboxer/web/messages/delete_all_spec.rb index 1317d917..9cfb1629 100644 --- a/spec/lib/outboxer/web/messages/delete_all_spec.rb +++ b/spec/lib/outboxer/web/messages/delete_all_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /messages/delete_all", type: :request do @@ -12,20 +9,17 @@ def app Outboxer::Web end - let!(:event_1) { Event.create!(id: 1, type: "Event") } - let!(:message_1) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_1.id) - end + let(:messageable_1) { double("Event", id: 1, class: double(name: "Event")) } + let(:message_1_id) { Outboxer::Message.queue(messageable: messageable_1)[:id] } + let!(:message_1) { Outboxer::Models::Message.find(message_1_id) } - let!(:event_2) { Event.create!(id: 2, type: "Event") } - let!(:message_2) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_2.id) - end + let(:messageable_2) { double("Event", id: 2, class: double(name: "Event")) } + let(:message_2_id) { Outboxer::Message.queue(messageable: messageable_2)[:id] } + let!(:message_2) { Outboxer::Models::Message.find(message_2_id) } - let!(:event_3) { Event.create!(id: 3, type: "Event") } - let!(:message_3) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_3.id) - end + let(:messageable_3) { double("Event", id: 3, class: double(name: "Event")) } + let(:message_3_id) { Outboxer::Message.queue(messageable: messageable_3)[:id] } + let!(:message_3) { Outboxer::Models::Message.find(message_3_id) } context "when no status provided" do before do @@ -46,10 +40,6 @@ def app expect(Outboxer::Models::Message.count).to eq(0) end - it "does not delete events" do - expect(Event.count).to eq(3) - end - it "redirects to /messages" do expect(last_response).to be_ok expect(last_request.url).to include( diff --git a/spec/lib/outboxer/web/messages/list_spec.rb b/spec/lib/outboxer/web/messages/list_spec.rb index 6b5d3c43..5110dbf0 100644 --- a/spec/lib/outboxer/web/messages/list_spec.rb +++ b/spec/lib/outboxer/web/messages/list_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "GET /messages", type: :request do @@ -13,15 +10,13 @@ def app end context "when no status provided" do - let!(:event_1) { Event.create!(id: 1, type: "Event") } - let!(:message_1) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_1.id) - end + let(:messageable_1) { double("Event", id: 1, class: double(name: "Event")) } + let(:message_1_id) { Outboxer::Message.queue(messageable: messageable_1)[:id] } + let!(:message_1) { Outboxer::Models::Message.find(message_1_id) } - let!(:event_2) { Event.create!(id: 2, type: "Event") } - let!(:message_2) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_2.id) - end + let(:messageable_2) { double("Event", id: 2, class: double(name: "Event")) } + let(:message_2_id) { Outboxer::Message.queue(messageable: messageable_2)[:id] } + let!(:message_2) { Outboxer::Models::Message.find(message_2_id) } before do header "Host", "localhost" @@ -37,15 +32,13 @@ def app end context "when publishing status provided" do - let!(:event_1) { Event.create!(id: 1, type: "Event") } - let!(:message_1) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_1.id) - end + let(:messageable_1) { double("Event", id: 1, class: double(name: "Event")) } + let(:message_1_id) { Outboxer::Message.queue(messageable: messageable_1)[:id] } + let!(:message_1) { Outboxer::Models::Message.find(message_1_id) } - let!(:event_2) { Event.create!(id: 2, type: "Event") } - let!(:message_2) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_2.id) - end + let(:messageable_2) { double("Event", id: 2, class: double(name: "Event")) } + let(:message_2_id) { Outboxer::Message.queue(messageable: messageable_2)[:id] } + let!(:message_2) { Outboxer::Models::Message.find(message_2_id) } before do message_2.update!(status: Outboxer::Message::Status::PUBLISHING) diff --git a/spec/lib/outboxer/web/messages/requeue_all_spec.rb b/spec/lib/outboxer/web/messages/requeue_all_spec.rb index fedae46e..0b5d9b53 100644 --- a/spec/lib/outboxer/web/messages/requeue_all_spec.rb +++ b/spec/lib/outboxer/web/messages/requeue_all_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /messages/requeue_all", type: :request do @@ -12,20 +9,17 @@ def app Outboxer::Web end - let!(:event_1) { Event.create!(id: 1, type: "Event") } - let!(:message_1) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_1) - end + let(:messageable_1) { double("Event", id: 1, class: double(name: "Event")) } + let(:message_1_id) { Outboxer::Message.queue(messageable: messageable_1)[:id] } + let!(:message_1) { Outboxer::Models::Message.find(message_1_id) } - let!(:event_2) { Event.create!(id: 2, type: "Event") } - let!(:message_2) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_2) - end + let(:messageable_2) { double("Event", id: 2, class: double(name: "Event")) } + let(:message_2_id) { Outboxer::Message.queue(messageable: messageable_2)[:id] } + let!(:message_2) { Outboxer::Models::Message.find(message_2_id) } - let!(:event_3) { Event.create!(id: 3, type: "Event") } - let!(:message_3) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_3) - end + let(:messageable_3) { double("Event", id: 3, class: double(name: "Event")) } + let(:message_3_id) { Outboxer::Message.queue(messageable: messageable_3)[:id] } + let!(:message_3) { Outboxer::Models::Message.find(message_3_id) } context "when no status provided" do before do diff --git a/spec/lib/outboxer/web/messages/update_per_page_spec.rb b/spec/lib/outboxer/web/messages/update_per_page_spec.rb index 2edc0418..f1ef3e35 100644 --- a/spec/lib/outboxer/web/messages/update_per_page_spec.rb +++ b/spec/lib/outboxer/web/messages/update_per_page_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /messages/update_per_page", type: :request do diff --git a/spec/lib/outboxer/web/messages/update_spec.rb b/spec/lib/outboxer/web/messages/update_spec.rb index 7239b92d..715bc669 100644 --- a/spec/lib/outboxer/web/messages/update_spec.rb +++ b/spec/lib/outboxer/web/messages/update_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /messages/update", type: :request do @@ -12,20 +9,17 @@ def app Outboxer::Web end - let!(:event_1) { Event.create!(id: 1, type: "Event") } - let!(:message_1) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_1.id) - end + let(:messageable_1) { double("Event", id: 1, class: double(name: "Event")) } + let(:message_1_id) { Outboxer::Message.queue(messageable: messageable_1)[:id] } + let!(:message_1) { Outboxer::Models::Message.find(message_1_id) } - let!(:event_2) { Event.create!(id: 2, type: "Event") } - let!(:message_2) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_2.id) - end + let(:messageable_2) { double("Event", id: 2, class: double(name: "Event")) } + let(:message_2_id) { Outboxer::Message.queue(messageable: messageable_2)[:id] } + let!(:message_2) { Outboxer::Models::Message.find(message_2_id) } - let!(:event_3) { Event.create!(id: 3, type: "Event") } - let!(:message_3) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event_3.id) - end + let(:messageable_3) { double("Event", id: 3, class: double(name: "Event")) } + let(:message_3_id) { Outboxer::Message.queue(messageable: messageable_3)[:id] } + let!(:message_3) { Outboxer::Models::Message.find(message_3_id) } before do message_2.update!(status: Outboxer::Message::Status::PUBLISHING) diff --git a/spec/lib/outboxer/web/publisher/create_signal_spec.rb b/spec/lib/outboxer/web/publisher/create_signal_spec.rb index cb94fe13..f3ce9890 100644 --- a/spec/lib/outboxer/web/publisher/create_signal_spec.rb +++ b/spec/lib/outboxer/web/publisher/create_signal_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /publisher/:id/signals", type: :request do @@ -12,10 +9,9 @@ def app Outboxer::Web end - let(:event) { Event.create!(type: "Event") } - let!(:message) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event.id) - end + let(:messageable) { double("Event", id: 123, class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } + let(:publisher) { create(:outboxer_publisher, :publishing, name: "Test Publisher") } before do diff --git a/spec/lib/outboxer/web/publisher/delete_spec.rb b/spec/lib/outboxer/web/publisher/delete_spec.rb index 4d625ddf..62e7cdc5 100644 --- a/spec/lib/outboxer/web/publisher/delete_spec.rb +++ b/spec/lib/outboxer/web/publisher/delete_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /publisher/:id/delete", type: :request do @@ -12,10 +9,9 @@ def app Outboxer::Web end - let(:event) { Event.create!(type: "Event") } - let!(:message) do - Outboxer::Models::Message.find_by!(messageable_type: "Event", messageable_id: event.id) - end + let(:messageable) { double("Event", id: 123, class: double(name: "Event")) } + let!(:message) { Outboxer::Message.queue(messageable: messageable) } + let(:publisher) { create(:outboxer_publisher, :publishing, name: "Test Publisher") } before do diff --git a/spec/lib/outboxer/web/publisher/show_spec.rb b/spec/lib/outboxer/web/publisher/show_spec.rb index ffec1884..5dc1e9fa 100644 --- a/spec/lib/outboxer/web/publisher/show_spec.rb +++ b/spec/lib/outboxer/web/publisher/show_spec.rb @@ -1,8 +1,5 @@ require "rails_helper" -require_relative "../../../../../app/models/application_record" -require_relative "../../../../../app/models/event" - require_relative "../../../../../lib/outboxer/web" RSpec.describe "POST /publisher/:id/signals", type: :request do @@ -22,6 +19,6 @@ def app it "returns publisher details" do expect(last_response).to be_ok - expect(last_response.body).to include("Publisher::#{publisher.id}") + expect(last_response.body).to include("Publisher/#{publisher.id}") end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index d267b521..33543587 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -9,8 +9,6 @@ require "rack/test" require "database_cleaner" require "factory_bot" -require "sidekiq" -require "sidekiq/testing" require_relative "../lib/outboxer" Dir[File.join(__dir__, "factories/**/*.rb")].each { |f| require f } diff --git a/tasks/database.rake b/tasks/database.rake index 442c9d25..0969709c 100644 --- a/tasks/database.rake +++ b/tasks/database.rake @@ -6,7 +6,7 @@ require "pry-byebug" namespace :outboxer do namespace :db do task :drop do - environment = ENV["RAILS_ENV"] || "development" + environment = ENV["APP_ENV"] || ENV["RAILS_ENV"] || "development" db_config = Outboxer::Database.config(environment: environment, concurrency: 1) ActiveRecord::Base.establish_connection(db_config.merge(database: "postgres")) @@ -15,7 +15,7 @@ namespace :outboxer do end task :create do - environment = ENV["RAILS_ENV"] || "development" + environment = ENV["APP_ENV"] || ENV["RAILS_ENV"] || "development" db_config = Outboxer::Database.config(environment: environment, concurrency: 1) ActiveRecord::Base.establish_connection(db_config.merge(database: "postgres")) @@ -24,16 +24,10 @@ namespace :outboxer do end task :migrate do - environment = ENV["RAILS_ENV"] || "development" + environment = ENV["APP_ENV"] || ENV["RAILS_ENV"] || "development" db_config = Outboxer::Database.config(environment: environment, concurrency: 1) ActiveRecord::Base.establish_connection(db_config) - require_relative "../db/migrate/create_outboxer_integration_tests" - CreateOutboxerIntegrationTests.new.up - - require_relative "../db/migrate/create_events" - CreateEvents.new.up - require_relative "../db/migrate/create_outboxer_settings" CreateOutboxerSettings.new.up @@ -56,7 +50,7 @@ namespace :outboxer do end task :seed do - environment = ENV["RAILS_ENV"] || "development" + environment = ENV["APP_ENV"] || ENV["RAILS_ENV"] || "development" db_config = Outboxer::Database.config(environment: environment, concurrency: 1) ActiveRecord::Base.establish_connection(db_config)