Files
importer-issue-ops/spec/models/command_spec.rb
2022-01-07 19:45:53 +00:00

110 lines
2.4 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Command do
let(:command) { described_class.new(comment_body) }
describe "#command" do
subject { command.command }
context "when no command is present" do
let(:comment_body) do
<<~COMMENT
This is just a comment.
COMMENT
end
it { is_expected.to be_nil }
end
context "when an unsupported comment is present" do
let(:comment_body) do
<<~COMMENT
/do-something-unsupported
COMMENT
end
it { is_expected.to be_nil }
end
described_class::VALID_COMMANDS.each do |c|
context "when a supported command is present" do
let(:comment_body) do
<<~COMMENT
/#{c}
COMMENT
end
it { is_expected.to eq(c) }
end
end
end
describe "#options" do
subject { command.options }
context "when the command is not valid" do
let(:comment_body) { "/do-something-unsupported --option-one value" }
it { is_expected.to be_nil }
end
context "when no options are present" do
let(:comment_body) { "/dry-run" }
it { is_expected.to be_blank }
end
context "when options are present" do
let(:comment_body) { "/dry-run --option-one value-one --option-two value-two" }
it { is_expected.to eq({ "option-one" => "value-one", "option-two" => "value-two" }) }
end
end
describe "#valid?" do
subject { command.valid? }
context "when the command is supported" do
let(:comment_body) { "/dry-run" }
it { is_expected.to be_truthy }
end
context "when the command is not supported" do
let(:comment_body) { "/run-something-else" }
it { is_expected.to be_falsey }
end
end
describe "#classify" do
subject { command.classify }
[%w[audit Audit], %w[dry-run DryRun], %w[migrate Migrate]].each do |command, klass|
context "when the command is #{command}" do
let(:comment_body) { "/#{command}" }
it { is_expected.to eq(klass) }
end
end
context "when the command is invalid" do
let(:comment_body) { "/do-something-unsupported" }
it { is_expected.to be_nil }
end
end
describe "to_output" do
subject { command.to_output }
let(:comment_body) do
<<~COMMENT
/audit
COMMENT
end
it { expect { subject }.to output(/::set-output name=command::audit/).to_stdout }
end
end