diff --git a/spec/controllers/main_controller_spec.rb b/spec/controllers/main_controller_spec.rb deleted file mode 100644 --- a/spec/controllers/main_controller_spec.rb +++ /dev/null @@ -1,193 +0,0 @@ -require 'delorean' - -require File.dirname(__FILE__) + '/../spec_helper' -require File.dirname(__FILE__) + '/../config_spec_helper' - -describe MainController, "when a user comes to list page" do - - it "should redirect user to login page when unlogged-in user try to access main/list" do - get 'list' - response.should redirect_to(:action => 'login') - end - -end - -describe MainController, "when a logged in user comes to list page, with multicontests off" do - integrate_views - - include ConfigSpecHelperMethods - - fixtures :users - fixtures :problems - fixtures :contests - - before(:each) do - disable_multicontest - end - - it "should list available problems" do - john = users(:john) - get "list", {}, {:user_id => john.id} - - response.should render_template 'main/list' - response.should have_text(/add/) - response.should have_text(/easy_problem/) - response.should have_text(/hard_problem/) - end - -end - -describe MainController, "when a logged in user comes to list page, with multicontests on" do - integrate_views - - include ConfigSpecHelperMethods - - fixtures :users - fixtures :problems - fixtures :contests - - before(:each) do - enable_multicontest - end - - it "should list only available public problems to users with no contest assigned" do - john = users(:john) - get "list", {}, {:user_id => john.id} - - response.should render_template('main/list') - response.should have_text(/add/) - response.should_not have_text(/easy_problem/) - response.should_not have_text(/hard_problem/) - end - - it "should list available problems on a specific contest" do - james = users(:james) - get "list", {}, {:user_id => james.id} - - response.should render_template('main/list') - response.should have_text(/add/) - response.should have_text(/easy_problem/) - response.should_not have_text(/hard_problem/) - end - - it "should shows available problems by contests" do - james = users(:james) - get "list", {}, {:user_id => james.id} - - response.should render_template('main/list') - response.should have_text(Regexp.new('Contest A.*easy_problem', Regexp::MULTILINE)) - end - - it "should shows available problems by contests; problems belonging to more the one contest should appear many times" do - jack = users(:jack) - get "list", {}, {:user_id => jack.id} - - response.should render_template('main/list') - response.should have_text(Regexp.new('Contest A.*easy_problem.*Contest B.*easy_problem', Regexp::MULTILINE)) - response.should have_text(Regexp.new('Contest B.*hard_problem', Regexp::MULTILINE)) - end -end - -describe MainController, "when a user loads sources and compiler messages" do - - before(:each) do - @problem = mock(Problem, :name => 'test', :output_only => false) - @language = mock(Language, :name => 'cpp', :ext => 'cpp') - @submission = mock(Submission, - :id => 1, - :user_id => 1, - :problem => @problem, - :language => @language, - :source => 'sample source', - :compiler_message => 'none') - - @user = mock(User, :id => 1, :login => 'john') - @user.should_receive(:update_start_time).at_most(:once) - - @another_user = mock(User, :id => 2, :login => 'mary') - @another_user.should_receive(:update_start_time).at_most(:once) - - User.should_receive(:find). - with(1).any_number_of_times. - and_return(@user) - User.should_receive(:find). - with(2).any_number_of_times. - and_return(@another_user) - Submission.should_receive(:find). - any_number_of_times.with(@submission.id.to_s). - and_return(@submission) - end - - it "should let user sees her own source" do - @submission.should_receive(:download_filename).and_return("foo.c") - get 'source', {:id => @submission.id}, {:user_id => 1} - response.should be_success - end - - it "should let user sees her own compiler message" do - get 'compiler_msg', {:id => @submission.id}, {:user_id => 1} - response.should be_success - end - - it "should not let user sees other user's source" do - get 'source', {:id => @submission.id}, {:user_id => 2} - flash[:notice].should =~ /[Ee]rror/ - response.should redirect_to(:action => 'list') - end - - it "should not let user sees other user's compiler message" do - get 'compiler_msg', {:id => @submission.id}, {:user_id => 2} - flash[:notice].should =~ /[Ee]rror/ - response.should redirect_to(:action => 'list') - end - -end - - -describe MainController, "during individual contest mode" do - - integrate_views - - include ConfigSpecHelperMethods - - fixtures :users - fixtures :problems - fixtures :contests - - before(:each) do - set_contest_time_limit('3:00') # 3 hours - set_indv_contest_mode - end - - it "should allow newly login user to see problem list" do - john = users(:john) - get "list", {}, {:user_id => john.id} - - response.should render_template 'main/list' - response.should have_text(/add/) - response.should have_text(/easy_problem/) - response.should have_text(/hard_problem/) - end - - it "should not show 'contest over' sign before the contest ends" do - john = users(:john) - get "list", {}, {:user_id => john.id} - - Delorean.time_travel_to(179.minutes.since) do - get "list", {}, {:user_id => john.id} - response.should_not have_text(/OVER/) - end - end - - it "should show 'contest over' sign after the contest ends" do - john = users(:john) - get "list", {}, {:user_id => john.id} - - Delorean.time_travel_to(181.minutes.since) do - get "list", {}, {:user_id => john.id} - response.should have_text(/OVER/) - end - end - -end -