discourse/migrations/spec/lib/converters/base/serial_job_spec.rb
Gerhard Schlager 7c3a29c9d6
DEV: Add converter framework for migrations-tooling (#28540)
* Updates GitHub Actions
* Switches from `bundler/inline` to an optional group in the `Gemfile` because the previous solution didn't work well with rspec
* Adds the converter framework and tests
* Allows loading private converters (see README)
* Switches from multiple CLI tools to a single CLI
* Makes DB connections reusable and adds a new abstraction for the `IntermediateDB`
* `IntermediateDB` acts as an interface for IPC calls when a converter steps runs in parallel (forks). Only the main process writes to the DB.
* Includes a simple example implementation of a converter for now.
2024-09-09 17:14:39 +02:00

43 lines
1.2 KiB
Ruby

# frozen_string_literal: true
RSpec.describe ::Migrations::Converters::Base::SerialJob do
subject(:job) { described_class.new(step) }
let(:step) { instance_double(::Migrations::Converters::Base::ProgressStep) }
let(:item) { "Item" }
let(:stats) do
instance_double(::Migrations::Converters::Base::ProgressStats, reset!: nil, log_error: nil)
end
before { allow(::Migrations::Converters::Base::ProgressStats).to receive(:new).and_return(stats) }
describe "#run" do
it "resets stats and processes item" do
allow(step).to receive(:process_item).and_return(stats)
job.run(item)
expect(stats).to have_received(:reset!)
expect(step).to have_received(:process_item).with(item, stats)
end
it "logs error if processing item raises an exception" do
allow(step).to receive(:process_item).and_raise(StandardError)
job.run(item)
expect(stats).to have_received(:log_error).with(
"Failed to process item",
exception: an_instance_of(StandardError),
details: item,
)
end
end
describe "#cleanup" do
it "can be called without errors" do
expect { job.cleanup }.not_to raise_error
end
end
end