spec/lib/team_spec.rb (93 lines of code) (raw):
require 'team'
RSpec.describe Team do
let(:teams) do
{
'Plan' => {
'label' => 'plan',
'project' => 'plan',
'owner' => 'smcgivern',
'mention_team' => false,
'mention_team_on_creation' => false,
'create_discussions' => false,
'create_individual_discussions' => true
},
'Growth' => {
'label' => 'devops::growth',
'project' => 'growth',
'owner' => %w{pcalder jayswain},
'template' => 'growth',
'mention_team' => false,
'mention_team_on_creation' => false,
'create_discussions' => false,
'create_individual_discussions' => true
}
}
end
before do
described_class.reset!
end
describe '.find' do
before do
allow(YAML).to receive(:load_file).and_return(teams)
end
context 'when the team name does not exist' do
it 'raises a KeyError' do
expect { described_class.find('Foo') }.to raise_error(KeyError)
end
end
context 'when the team name exists' do
it 'returns a TeamInfo struct with the team details' do
expect(described_class.find('Plan'))
.to have_attributes(label: 'plan',
project: 'plan',
template: 'default',
owner: 'smcgivern',
mention_team: false,
mention_team_on_creation: false,
create_discussions: false,
create_individual_discussions: true)
end
end
end
describe '.all' do
before do
allow(YAML).to receive(:load_file).and_return(teams)
end
it 'returns TeamInfo structs for all teams' do
expect(described_class.all).to all(be_a(described_class::TeamInfo))
expect(described_class.all.last)
.to have_attributes(label: 'devops::growth',
project: 'growth',
template: 'growth',
owner: %w{pcalder jayswain},
mention_team: false,
mention_team_on_creation: false,
create_discussions: false,
create_individual_discussions: true)
end
end
describe 'the TeamInfo struct' do
before do
allow(YAML).to receive(:load_file).and_return(teams)
end
describe '#confidential' do
let(:team_info) { described_class.find('Plan') }
it 'returns false when confidential is not specified' do
expect(team_info.confidential?).to be(false)
end
end
end
describe 'the teams in teams.yml' do
it 'loads all teams successfully' do
expected_attributes = described_class::FIELDS.zip { anything }.to_h
expect(described_class.all).to all(have_attributes(expected_attributes))
end
it 'does not have teams where create_individual_discussions is set with create_discussions or mention_team' do
invalid_teams = described_class.all.select do |team|
team.create_individual_discussions &&
(team.create_discussions || team.mention_team)
end.map(&:name)
expect(invalid_teams).to be_empty
end
end
end