@@ -534,9 +534,111 @@ def assert_show(opts={}, &block)
534534 proposal = assigns ( :proposal )
535535 proposal . presenter . should == user . fullname
536536 end
537+
538+ describe "when event has tracks" do
539+ describe "when there are no tracks" do
540+ it "should display new event form for admin user" do
541+ event = Factory ( :event , :tracks => [ ] )
542+ user = Factory ( :admin )
543+ login_as ( user )
544+
545+ get :new , :event_id => event . slug
546+
547+ flash [ :failure ] . should =~ /no tracks/i
548+ response . should redirect_to ( new_event_track_path ( event ) )
549+ end
550+
551+ it "should display error for non-admin user" do
552+ event = Factory ( :event , :tracks => [ ] )
553+ user = Factory ( :user )
554+ login_as ( user )
555+
556+ get :new , :event_id => event . slug
557+
558+ flash [ :failure ] . should =~ /no tracks/i
559+ response . should redirect_to ( event_proposals_path ( event ) )
560+ end
561+ end
562+
563+ it "should assign a track if there's only one" do
564+ event = Factory ( :event , :tracks => [ ] )
565+ track = Factory ( :track , :event => event )
566+ user = Factory ( :user )
567+ login_as ( user )
568+
569+ get :new , :event_id => event . slug
570+
571+ flash [ :failure ] . should be_nil
572+ assigns [ :proposal ] . track . should == track
573+ end
574+
575+ it "should not assign a track if there's more than one" do
576+ event = Factory ( :event , :tracks => [ ] )
577+ track1 = Factory ( :track , :event => event )
578+ track2 = Factory ( :track , :event => event )
579+ user = Factory ( :user )
580+ login_as ( user )
581+
582+ get :new , :event_id => event . slug
583+
584+ flash [ :failure ] . should be_nil
585+ assigns [ :proposal ] . track . should be_nil
586+ end
587+ end
588+
589+ describe "when event has session types" do
590+ describe "when there are no session types" do
591+ it "should display new event form for admin user" do
592+ event = Factory ( :event , :session_types => [ ] )
593+ user = Factory ( :admin )
594+ login_as ( user )
595+
596+ get :new , :event_id => event . slug
597+
598+ response . should redirect_to ( new_event_session_type_path ( event ) )
599+ flash [ :failure ] . should =~ /no session types/i
600+ end
601+
602+ it "should display error for non-admin user" do
603+ event = Factory ( :event , :session_types => [ ] )
604+ user = Factory ( :user )
605+ login_as ( user )
606+
607+ get :new , :event_id => event . slug
608+
609+ response . should redirect_to ( event_proposals_path ( event ) )
610+ flash [ :failure ] . should =~ /no session types/i
611+ end
612+ end
613+
614+ it "should assign a session type if there's only one" do
615+ event = Factory ( :event , :session_types => [ ] )
616+ session_type = Factory ( :session_type , :event => event )
617+ user = Factory ( :user )
618+ login_as ( user )
619+
620+ get :new , :event_id => event . slug
621+
622+ assigns [ :proposal ] . session_type . should == session_type
623+ end
624+
625+ it "should not assign a session type if there's more than one" do
626+ event = Factory ( :event , :session_types => [ ] )
627+ session_type1 = Factory ( :session_type , :event => event )
628+ session_type2 = Factory ( :session_type , :event => event )
629+ user = Factory ( :user )
630+ login_as ( user )
631+
632+ get :new , :event_id => event . slug
633+
634+ assigns [ :proposal ] . session_type . should be_nil
635+ end
636+ end
537637 end
638+ end
538639
539- it "should not display form for closed events" do
640+ describe "with closed event" do
641+ it "should not display form" do
540642 login_as ( users ( :quentin ) )
541643 event = events ( :closed )
542644 get :new , :event_id => event . slug
0 commit comments