spec/retrospective_spec.rb (94 lines of code) (raw):
require_relative '../retrospective'
require 'timecop'
describe RetrospectiveCommand do
let(:read_token) { 'read-token' }
let(:write_token) { 'write-token' }
let(:options) do
{
'--read-token' => read_token,
'--write-token' => write_token,
'--dry-run' => false,
'--force' => false,
'--all-teams' => false,
'--team' => 'TeamA',
'create' => false,
'update' => false
}
end
let(:read_client) { instance_double(GitlabApi) }
let(:write_client) { instance_double(GitlabApi) }
let(:retrospective) { instance_double(Retrospective) }
subject(:command) { described_class.new }
before do
allow(Docopt).to receive(:docopt).and_return(options)
allow(GitlabApi).to receive(:new).with(token: read_token).and_return(read_client)
allow(GitlabApi).to receive(:new).with(token: write_token).and_return(write_client)
allow(Retrospective).to receive(:new).with(read_client: read_client, write_client: write_client).and_return(retrospective)
end
describe "#run_for_all_teams" do
let(:team_a) { instance_double(Team::TeamInfo, name: 'TeamA') }
let(:team_b) { instance_double(Team::TeamInfo, name: 'TeamB') }
let(:teams) { [team_a, team_b] }
before do
allow(Team).to receive(:all).and_return(teams)
# Allow puts to prevent test output pollution
allow(command).to receive(:puts)
end
context "with error" do
before do
allow(command).to receive(:run_for_team).with(team_a).and_raise(StandardError)
allow(command).to receive(:run_for_team).with(team_b).and_return(0)
end
it 'returns a 1 exit code' do
expect(command.send(:run_for_all_teams)).to eq(1)
end
end
context "with no errors" do
before do
allow(command).to receive(:run_for_team).with(team_a).and_return(0)
allow(command).to receive(:run_for_team).with(team_b).and_return(0)
end
it 'returns a 0 exit code' do
expect(command.send(:run_for_all_teams)).to eq(0)
end
end
end
describe "#correct_date?" do
let(:milestone) do
{
'start_date' => '2023-08-18',
'due_date' => '2023-09-17',
'title' => '16.4'
}
end
before { Timecop.freeze(current_time) }
after { Timecop.return }
context 'when action is create' do
context 'when it is 9 days since the start of the milestone' do
let(:current_time) { Date.parse('2023-08-27') }
it 'is expected to be true' do
expect(command.send(:correct_date?, 'create', milestone)).to be true
end
end
context 'when it is any date other than 9 days since the start of milestone' do
let(:current_time) { Date.parse('2023-08-26') }
it 'is expected to be false' do
expect(command.send(:correct_date?, 'create', milestone)).to be false
end
end
end
context 'when action is update' do
context 'when it is 4 days since the end of the last milestone' do
let(:current_time) { Date.parse('2023-09-21') }
it 'is expected to be true' do
expect(command.send(:correct_date?, 'update', milestone)).to be true
end
end
context 'when it is any date other than 4 days since the end of the last milestone' do
let(:current_time) { Date.parse('2023-09-22') }
it 'is expected to be false' do
expect(command.send(:correct_date?, 'update', milestone)).to be false
end
end
end
end
end