114 lines
3.9 KiB
Ruby
114 lines
3.9 KiB
Ruby
require 'helper'
|
|
|
|
describe MLB::Team, '.all' do
|
|
before do
|
|
stub_request(:get, 'https://www.googleapis.com/freebase/v1/mqlread').with(:query => {:query => described_class.mql_query}).to_return(:body => fixture('teams.json'))
|
|
end
|
|
after do
|
|
described_class.reset
|
|
end
|
|
subject do
|
|
described_class.all
|
|
end
|
|
it 'there are thirty teams' do
|
|
expect(subject.size).to eq 30
|
|
end
|
|
it 'teams are sorted alphabetically, by name' do
|
|
# Arizona Diamondbacks..Washington Nationals
|
|
expect(subject).to eq subject.sort_by(&:name)
|
|
end
|
|
it 'every team belongs to a league' do
|
|
subject.each do |team|
|
|
expect(team.league).to match(/^(American|National|Major) League( Baseball)?$/)
|
|
end
|
|
end
|
|
it 'every team belongs to a division' do
|
|
subject.each do |team|
|
|
expect(team.division).to match(/^(American|National) League (East|Central|West)$/)
|
|
end
|
|
end
|
|
it 'every team has win and loss statistics' do
|
|
subject.each do |team|
|
|
expect(team.wins).to be_between(0, 162), "got: #{team.wins} for #{team.name}"
|
|
expect(team.losses).to be_between(0, 162), "got: #{team.losses} for #{team.name}"
|
|
games = team.wins + team.losses
|
|
# Allow up to 163 total games, since there may be a tie-breaking game
|
|
expect(games).to be <= 163, "got: #{games} for #{team.name}"
|
|
end
|
|
end
|
|
it 'every team has a founding year' do
|
|
subject.each do |team|
|
|
# Chicago Cubs..Washington Nationals
|
|
expect(team.founded).to be_between(1870, 2005), "got: #{team.founded} for #{team.name}"
|
|
end
|
|
end
|
|
it 'every team has a ballpark' do
|
|
subject.each do |team|
|
|
expect(team.ballpark).to match(/(Ballpark|Centre|Coliseum|Field|Park|Stadium)( (at|in|of) .+)?$/)
|
|
end
|
|
end
|
|
it 'every team has a 25-player roster' do
|
|
subject.each do |team|
|
|
expect(team.players.size).to be >= 25, "got: #{team.players.size} for #{team.name}"
|
|
end
|
|
end
|
|
it 'every player has a first and last name' do
|
|
subject.each do |team|
|
|
team.players.each do |player|
|
|
expect(player.name.size).to be >= 7, "got: #{player.name.size} for #{player.name}"
|
|
expect(player.name.split.size).to be >= 2, "got: #{player.name.split.size} for #{player.name}"
|
|
end
|
|
end
|
|
end
|
|
it 'every player has a one- or two-digit number' do
|
|
subject.each do |team|
|
|
team.players.each do |player|
|
|
expect(player.number).to be_between(0, 99), "got: #{player.number} for #{player.name}"
|
|
# Jackie Robinson
|
|
expect(player.number).not_to eq(42), "got: #{player.number} for #{player.name}"
|
|
end
|
|
end
|
|
end
|
|
it 'every player has at least one position' do
|
|
subject.each do |team|
|
|
team.players.each do |player|
|
|
pending 'Some players do not have a position'
|
|
expect(player.positions.size).to be >= 1, "got: #{player.positions.size} for #{player.name}"
|
|
end
|
|
end
|
|
end
|
|
it 'every player has a starting year' do
|
|
subject.each do |team|
|
|
team.players.each do |player|
|
|
pending 'Some players do not have a starting year'
|
|
expect(player.from).to be >= 1995, "got: #{player.from} for #{player.name}"
|
|
end
|
|
end
|
|
end
|
|
it 'every player is active' do
|
|
subject.each do |team|
|
|
team.players.each do |player|
|
|
expect(player.to).to eq('Present'), "got: #{player.to} for #{player.name}"
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'with timeout' do
|
|
before do
|
|
stub_request(:get, 'https://www.googleapis.com/freebase/v1/mqlread').with(:query => {:query => described_class.mql_query}).to_timeout
|
|
end
|
|
it 'does not raise an exception' do
|
|
expect { subject }.not_to raise_exception
|
|
end
|
|
end
|
|
|
|
context 'without connection' do
|
|
before do
|
|
stub_request(:get, 'https://www.googleapis.com/freebase/v1/mqlread').with(:query => {:query => described_class.mql_query}).to_raise(SocketError)
|
|
end
|
|
it 'does not raise an exception' do
|
|
expect { subject }.not_to raise_exception
|
|
end
|
|
end
|
|
end
|