110 lines
2.5 KiB
Ruby
110 lines
2.5 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 change { File.readlines(ENV["GITHUB_OUTPUT"], chomp: true).last }.to("command=audit") }
|
|
end
|
|
end
|