box-o-sand/rails/map-mash/spec/lib/mash_tournament_builder_spec.rb

65 lines
1.7 KiB
Ruby

require 'spec_helper'
describe MashTournamentBuilder do
let(ENV['MOCK'].nil? ? :subject : :real_subject) do
MashTournamentBuilder.new(
MashTournament.make(:requester => Requester.make),
MashTournament, MashTournamentRound, Map, Mash
)
end
let(ENV['MOCK'].nil? ? :mock_subject : :subject) do
@tournament = mock(Object)
@tournament_model = mock(Object)
@round_model = mock(Object)
@map_model = mock(Object)
@mash_model = mock(Object)
MashTournamentBuilder.new(
@tournament, @tournament_model,
@round_model, @map_model, @mash_model
)
end
before(:all) do
subject.map_model.destroy_all
40.times do
subject.map_model.make.save
end
end
context 'creating rounds' do
it 'should reject invalid numbers of contenders' do
[11, 24, 40].each do |n|
expect do
subject.create_rounds_for_contenders(n)
end.to raise_error
end
end
[[8, 3], [16, 4], [32, 5]].each do |n_contenders,n_rounds|
context "for #{n_contenders} total contenders" do
it "should create #{n_rounds} rounds" do
subject.create_rounds_for_contenders(n_contenders)
subject.tournament.total_rounds.should == n_rounds
end
end
end
end
context 'filling in rounds' do
before(:each) do
subject.tournament.id.should_not be_nil
subject.create_rounds_for_contenders(8)
end
it 'should fill in every map for every mash in a given round' do
subject.fill_in_next_round
subject.tournament.round(1).mashes.each do |mash|
mash.map_a.should_not be_nil
mash.map_b.should_not be_nil
end
end
end
end