diff options
| author | Luc Donnet | 2018-02-19 11:04:29 +0100 | 
|---|---|---|
| committer | Luc Donnet | 2018-02-19 11:04:29 +0100 | 
| commit | 7b17deff51545358009cb417cbb9d796565e7540 (patch) | |
| tree | a43a5586ad39d838dd607e600dbc15ff18a58ab3 /spec/controllers | |
| parent | 89428163fc93a7e09ebb0ca47939f8558afeb5eb (diff) | |
| parent | 5f6008d165df4499319a2121a71842657d6ac3c9 (diff) | |
| download | chouette-core-7b17deff51545358009cb417cbb9d796565e7540.tar.bz2 | |
Merge branch 'master' into 0000-docker
Diffstat (limited to 'spec/controllers')
15 files changed, 506 insertions, 5 deletions
| diff --git a/spec/controllers/api/v1/stop_area_controller_spec.rb b/spec/controllers/api/v1/stop_area_controller_spec.rb index eb0c87661..1ad71a95a 100644 --- a/spec/controllers/api/v1/stop_area_controller_spec.rb +++ b/spec/controllers/api/v1/stop_area_controller_spec.rb @@ -18,16 +18,15 @@ describe Api::V1::StopAreasController, :type => :controller do      end    end    describe "GET #index, :q => { :name_cont => 'aa'}" do -    let!(:sa1) { create(:stop_area, :name => "aaa") } -    let!(:sa2) { create(:stop_area, :name => "aab") } -    let!(:sa3) { create(:stop_area, :name => "abb") } +    let!(:sa1) { create(:stop_area, :name => "aaa", stop_area_referential: referential.stop_area_referential) } +    let!(:sa2) { create(:stop_area, :name => "aab", stop_area_referential: referential.stop_area_referential) } +    let!(:sa3) { create(:stop_area, :name => "abb", stop_area_referential: referential.stop_area_referential) }      before :each do        config_formatted_request_with_authorization( "application/json") -      get :index, :q => { :name_cont => "aa"}  +      get :index, :q => { :name_cont => "aa"}      end      it "should assign expected stop_areas" do        expect(assigns[:stop_areas].map(&:name).sort).to eq([ sa1.name, sa2.name])      end    end  end - diff --git a/spec/controllers/autocomplete_purchase_windows_controller_spec.rb b/spec/controllers/autocomplete_purchase_windows_controller_spec.rb new file mode 100644 index 000000000..cea600ea8 --- /dev/null +++ b/spec/controllers/autocomplete_purchase_windows_controller_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +RSpec.describe AutocompletePurchaseWindowsController, type: :controller do +  login_user + +  let(:referential) { Referential.first } +  let!(:window) { create :purchase_window, referential: referential, name: 'écolà militaire' } + +  describe 'GET #index' do +    it 'should be unauthorized' do +      expect { get(:index, referential_id: referential.id) }.to raise_error(FeatureChecker::NotAuthorizedError) +    end + +    with_feature "purchase_windows" do +      let(:request){ get(:index, referential_id: referential.id) } +      before do +        request +      end + +      it 'should be successful' do +        expect(response).to be_success +      end + +      context 'search by name' do +        let(:request){ get :index, referential_id: referential.id, q: {name_or_objectid_cont_any: 'écolà'}, :format => :json } +        it 'should be successful' do +          expect(response).to be_success +          expect(assigns(:purchase_windows)).to eq([window]) +        end +      end +    end +  end +end diff --git a/spec/controllers/autocomplete_stop_areas_controller_spec.rb b/spec/controllers/autocomplete_stop_areas_controller_spec.rb new file mode 100644 index 000000000..e0d1cd714 --- /dev/null +++ b/spec/controllers/autocomplete_stop_areas_controller_spec.rb @@ -0,0 +1,61 @@ +require 'rails_helper' + +RSpec.describe AutocompleteStopAreasController, type: :controller do +  login_user + +  let(:referential) { Referential.first } +  let(:other_referential) { create :referential } +  let!(:stop_area) { create :stop_area, name: 'écolà militaire', referential: referential } +  let!(:other_referential_stop_area) { create :stop_area, name: 'écolà militaire', referential: other_referential } +  let!(:zdep_stop_area) { create :stop_area, area_type: "zdep", referential: referential } +  let!(:not_zdep_stop_area) { create :stop_area, area_type: "lda", referential: referential } + +  describe 'GET #index' do +    it 'should be successful' do +      get :index, referential_id: referential.id +      expect(response).to be_success +    end + +    it "should filter stop areas based on referential" do +      get :index, referential_id: referential.id +      expect(assigns(:stop_areas)).to include(stop_area) +      expect(assigns(:stop_areas)).to_not include(other_referential_stop_area) +    end + +    context 'search by name' do +      it 'should be successful' do +        get :index, referential_id: referential.id, q: 'écolà', :format => :json +        expect(response).to be_success +        expect(assigns(:stop_areas)).to eq([stop_area]) +      end + +      it 'should be accent insensitive' do +        get :index, referential_id: referential.id, q: 'ecola', :format => :json +        expect(response).to be_success +        expect(assigns(:stop_areas)).to eq([stop_area]) +      end +    end +  end + +  context "when searching from the route editor" do +    let(:scope) { :route_editor } +    let(:request){ +      get :index, referential_id: referential.id, scope: scope +    } +    it "should filter stop areas based on type" do +      request +      expect(assigns(:stop_areas)).to include(zdep_stop_area) +      expect(assigns(:stop_areas)).to_not include(not_zdep_stop_area) +    end + +    with_feature :route_stop_areas_all_types do +      it "should not filter stop areas based on type" do +        request +        expect(assigns(:stop_areas)).to include(zdep_stop_area) +        expect(assigns(:stop_areas)).to include(not_zdep_stop_area) +      end +    end +  end + + +end diff --git a/spec/controllers/concerns/feature_checker_spec.rb b/spec/controllers/concerns/feature_checker_spec.rb new file mode 100644 index 000000000..1d289bb15 --- /dev/null +++ b/spec/controllers/concerns/feature_checker_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +RSpec.describe "FeatureChecker", type: :controller do +  login_user + +  controller do +    include FeatureChecker +    requires_feature :test, only: :protected + +    def protected; render text: "protected"; end +    def not_protected; render text: "not protected"; end + +    def current_organisation +      @organisation ||= Organisation.new +    end +  end + +  before do +    routes.draw do +      get "protected" => "anonymous#protected" +      get "not_protected" => "anonymous#not_protected" +    end +  end + +  it "refuse access when organisation does not have the feature" do +    expect{ get(:protected) }.to raise_error(FeatureChecker::NotAuthorizedError) +  end + +  it "accept access on unprotected action" do +    get :not_protected +  end + +  it 'accept access when organisation has feature' do +    controller.current_organisation.features << "test" +    get :protected +  end +end diff --git a/spec/controllers/imports_controller_spec.rb b/spec/controllers/imports_controller_spec.rb index 22be9f6ed..08495ff47 100644 --- a/spec/controllers/imports_controller_spec.rb +++ b/spec/controllers/imports_controller_spec.rb @@ -17,6 +17,20 @@ RSpec.describe ImportsController, :type => :controller do      end    end +  describe "POST #create" do +    it "displays a flash message" do +      post :create, workbench_id: workbench.id, +        import: { +          name: 'Offre', +          file: fixture_file_upload('nozip.zip') +        } + +      expect(controller).to set_flash[:notice].to( +        I18n.t('flash.imports.create.notice') +      ) +    end +  end +    describe 'GET #download' do      it 'should be successful' do        get :download, workbench_id: workbench.id, id: import.id, token: import.token_download diff --git a/spec/controllers/journey_patterns_collections_controller_spec.rb b/spec/controllers/journey_patterns_collections_controller_spec.rb index 7015bfe98..e2adc59f4 100644 --- a/spec/controllers/journey_patterns_collections_controller_spec.rb +++ b/spec/controllers/journey_patterns_collections_controller_spec.rb @@ -10,6 +10,7 @@ RSpec.describe JourneyPatternsCollectionsController, :type => :controller do      before do        allow(controller).to receive(:pundit_user).and_return(user_context) +      allow(controller).to receive(:current_organisation).and_return(@user.organisation)      end      it 'computes them correctly if not authorized' do @@ -24,4 +25,20 @@ RSpec.describe JourneyPatternsCollectionsController, :type => :controller do                                                     'journey_patterns.update'  => true }.to_json)      end    end + +  context "get show" do +    login_user + +    let( :referential ){ Referential.first } +    let( :line ){ create(:line) } +    let( :route ){ create(:route, line: line) } + +    let(:request){ +      get :show, referential_id: referential.id, line_id: line.id, route_id: route.id, format: :json +    } +    it 'should be successful' do +      request +      expect(response).to be_success +    end +  end  end diff --git a/spec/controllers/line_referentials_controller_spec.rb b/spec/controllers/line_referentials_controller_spec.rb index aee24b0fa..17ffb670d 100644 --- a/spec/controllers/line_referentials_controller_spec.rb +++ b/spec/controllers/line_referentials_controller_spec.rb @@ -1,3 +1,19 @@  RSpec.describe LineReferentialsController, :type => :controller do +  login_user +  let(:line_referential) { create :line_referential } + +  describe 'PUT sync' do +    let(:request){ put :sync, id: line_referential.id } + +    it 'should redirect to 403' do +       expect(request).to redirect_to "/403" +    end + +    with_permission "line_referentials.synchronize" do +      it 'returns HTTP success' do +        expect(request).to redirect_to [line_referential] +      end +    end +  end  end diff --git a/spec/controllers/lines_controller_spec.rb b/spec/controllers/lines_controller_spec.rb new file mode 100644 index 000000000..65fe88b96 --- /dev/null +++ b/spec/controllers/lines_controller_spec.rb @@ -0,0 +1,38 @@ +RSpec.describe LinesController, :type => :controller do +  login_user + +  let(:line_referential) { create :line_referential, member: @user.organisation } +  let(:line) { create :line, line_referential: line_referential } + +  describe 'PUT deactivate' do +    let(:request){ put :deactivate, id: line.id, line_referential_id: line_referential.id } + +    it 'should redirect to 403' do +      expect(request).to redirect_to "/403" +    end + +    with_permission "lines.change_status" do +      it 'returns HTTP success' do +        expect(request).to redirect_to [line_referential, line] +        expect(line.reload).to be_deactivated +      end +    end +  end + +  describe 'PUT activate' do +    let(:request){ put :activate, id: line.id, line_referential_id: line_referential.id } +    before(:each){ +      line.deactivate! +    } +    it 'should redirect to 403' do +       expect(request).to redirect_to "/403" +    end + +    with_permission "lines.change_status" do +      it 'returns HTTP success' do +        expect(request).to redirect_to [line_referential, line] +        expect(line.reload).to be_activated +      end +    end +  end +end diff --git a/spec/controllers/referential_vehicle_journeys_controller_spec.rb b/spec/controllers/referential_vehicle_journeys_controller_spec.rb new file mode 100644 index 000000000..cc6b44b9d --- /dev/null +++ b/spec/controllers/referential_vehicle_journeys_controller_spec.rb @@ -0,0 +1,98 @@ +require "rails_helper" + +RSpec.describe ReferentialVehicleJourneysController, type: :controller do +  login_user + +  before do +    @user.organisation.update features: %w{referential_vehicle_journeys} +  end + +  describe 'GET #index' do +    it 'should be successful' do +      get :index, referential_id: referential +      expect(response).to be_success +    end + +    it "refuse access when organisation does not have the feature 'referential_vehicle_journeys'" do +      @user.organisation.update features: [] + +      expect do +        get :index, referential_id: referential +      end.to raise_error(FeatureChecker::NotAuthorizedError) +    end + +    it 'define Ransack search (alias @q)' do +      get :index, referential_id: referential +      expect(assigns[:q]).to be_an_instance_of(Ransack::Search) +    end + +    it 'define @vehicle_journeys collection' do +      vehicle_journey = FactoryGirl.create :vehicle_journey +      get :index, referential_id: referential +      expect(assigns[:vehicle_journeys]).to include(vehicle_journey) +    end + +    it 'paginage @vehicle_journeys collection' do +      FactoryGirl.create :vehicle_journey + +      get :index, referential_id: referential +      expect(assigns[:vehicle_journeys].total_entries).to be(1) +    end + +    context "when filtered on stop areas" do +      let!(:request){ +        get :index, referential_id: referential, q: q +      } + +      let(:stop_area_ids){ [] } + +      def create_journey_pattern_with_stop_areas(*stop_areas) +        j = create(:journey_pattern) +        stop_areas.each do |area| +          sp = create(:stop_point, stop_area: area) +          j.stop_points << sp +        end +        j.save +        j +      end + +      let(:q){ {stop_area_ids: stop_area_ids}} +      let(:stop_area_1){ create :stop_area } +      let(:stop_area_2){ create :stop_area } +      let!(:journey_1){ create_journey_pattern_with_stop_areas(stop_area_1)} +      let!(:journey_2){ create_journey_pattern_with_stop_areas(stop_area_2)} +      let!(:journey_1_and_2){ create_journey_pattern_with_stop_areas(stop_area_1, stop_area_2)} +      let!(:vehicle_journey_1){ create(:vehicle_journey, journey_pattern: journey_1)} +      let!(:vehicle_journey_2){ create(:vehicle_journey, journey_pattern: journey_2)} +      let!(:vehicle_journey_1_and_2){ create(:vehicle_journey, journey_pattern: journey_1_and_2)} + +      context "with one stop" do +        let(:stop_area_ids){[stop_area_1.id]} +        it "should apply filters" do +          expect(vehicle_journey_1.stop_areas).to include stop_area_1 +          expect(vehicle_journey_2.stop_areas).to_not include stop_area_1 +          expect(vehicle_journey_1_and_2.stop_areas).to include stop_area_1 +          expect(assigns[:vehicle_journeys]).to include(vehicle_journey_1) +          expect(assigns[:vehicle_journeys]).to_not include(vehicle_journey_2) +          expect(assigns[:vehicle_journeys]).to include(vehicle_journey_1_and_2) +        end +      end + +      context "with 2 stops" do +        let(:stop_area_ids){[stop_area_1.id, stop_area_2.id]} +        it "should apply filters" do +          expect(vehicle_journey_1.stop_areas).to include stop_area_1 +          expect(vehicle_journey_1.stop_areas).to_not include stop_area_2 +          expect(vehicle_journey_2.stop_areas).to include stop_area_2 +          expect(vehicle_journey_2.stop_areas).to_not include stop_area_1 +          expect(vehicle_journey_1_and_2.stop_areas).to include stop_area_1 +          expect(vehicle_journey_1_and_2.stop_areas).to include stop_area_2 +          expect(assigns[:vehicle_journeys]).to_not include(vehicle_journey_1) +          expect(assigns[:vehicle_journeys]).to_not include(vehicle_journey_2) +          expect(assigns[:vehicle_journeys]).to include(vehicle_journey_1_and_2) +        end +      end +    end +  end + +end diff --git a/spec/controllers/referentials_controller_spec.rb b/spec/controllers/referentials_controller_spec.rb index fba063085..f97480600 100644 --- a/spec/controllers/referentials_controller_spec.rb +++ b/spec/controllers/referentials_controller_spec.rb @@ -30,4 +30,33 @@ describe ReferentialsController, :type => :controller do        expect(assigns[:compliance_control_sets]).to eq([compliance_control_set])      end    end + +  describe "POST #validate" do +    it "displays a flash message" do +      post :validate, id: referential.id, params: { +        compliance_control_set: create(:compliance_control_set).id +      } + +      expect(controller).to set_flash[:notice].to( +        I18n.t('notice.referentials.validate') +      ) +    end +  end + +  describe "POST #create" do +    context "when duplicating" do +      it "displays a flash message", pending: 'requires more params to create a valid Referential' do +        post :create, +          from: referential.id, +          current_workbench_id: referential.workbench_id, +          referential: { +            name: 'Duplicated' +          } + +        expect(controller).to set_flash[:notice].to( +          I18n.t('notice.referentials.duplicate') +        ) +      end +    end +  end  end diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb new file mode 100644 index 000000000..8a6db8e28 --- /dev/null +++ b/spec/controllers/statuses_controller_spec.rb @@ -0,0 +1,50 @@ +RSpec.describe StatusesController, :type => :controller do + +  describe "GET index" do +    login_user +    render_views + + +    let(:request){ get :index} +    let(:parsed_response){ JSON.parse response.body } +    it "should be ok" do +      request +      expect(response).to have_http_status 200 +      expect(parsed_response["status"]).to eq "ok" +    end +    context "without blocked object" do +      before do +        create :referential +        create :import +        create :compliance_check_set +        request +      end + +      it "should be ok" do +        expect(response).to have_http_status 200 +        expect(parsed_response["status"]).to eq "ok" +        expect(parsed_response["referentials_blocked"]).to eq 0 +        expect(parsed_response["imports_blocked"]).to eq 0 +        expect(parsed_response["imports_blocked"]).to eq 0 +      end +    end + +    context "with a blocked object" do +      before do +        create :referential, created_at: 5.hours.ago, ready: false +        create :import +        create :compliance_check_set +        request +      end + +      it "should be ko" do +        expect(Referential.blocked.count).to eq 1 +        expect(response).to have_http_status 200 +        expect(parsed_response["status"]).to eq "ko" +        expect(parsed_response["referentials_blocked"]).to eq 1 +        expect(parsed_response["imports_blocked"]).to eq 0 +        expect(parsed_response["imports_blocked"]).to eq 0 +      end +    end +  end +end diff --git a/spec/controllers/stop_area_referentials_controller_spec.rb b/spec/controllers/stop_area_referentials_controller_spec.rb new file mode 100644 index 000000000..384323334 --- /dev/null +++ b/spec/controllers/stop_area_referentials_controller_spec.rb @@ -0,0 +1,17 @@ +RSpec.describe StopAreaReferentialsController, :type => :controller do +  login_user + +  let(:stop_area_referential) { create :stop_area_referential } + +  describe 'PUT sync' do +    let(:request){ put :sync, id: stop_area_referential.id } + +    it { expect(request).to redirect_to "/403" } + +    with_permission "stop_area_referentials.synchronize" do +      it 'returns HTTP success' do +        expect(request).to redirect_to [stop_area_referential] +      end +    end +  end +end diff --git a/spec/controllers/stop_areas_controller_spec.rb b/spec/controllers/stop_areas_controller_spec.rb new file mode 100644 index 000000000..23bca3c36 --- /dev/null +++ b/spec/controllers/stop_areas_controller_spec.rb @@ -0,0 +1,38 @@ +RSpec.describe StopAreasController, :type => :controller do +  login_user + +  let(:stop_area_referential) { create :stop_area_referential, member: @user.organisation } +  let(:stop_area) { create :stop_area, stop_area_referential: stop_area_referential } + +  describe 'PUT deactivate' do +    let(:request){ put :deactivate, id: stop_area.id, stop_area_referential_id: stop_area_referential.id } + +    it 'should redirect to 403' do +       expect(request).to redirect_to "/403" +    end + +    with_permission "stop_areas.change_status" do +      it 'returns HTTP success' do +        expect(request).to redirect_to [stop_area_referential, stop_area] +        expect(stop_area.reload).to be_deactivated +      end +    end +  end + +  describe 'PUT activate' do +    let(:request){ put :activate, id: stop_area.id, stop_area_referential_id: stop_area_referential.id } +    before(:each){ +      stop_area.deactivate! +    } +    it 'should redirect to 403' do +       expect(request).to redirect_to "/403" +    end + +    with_permission "stop_areas.change_status" do +      it 'returns HTTP success' do +        expect(request).to redirect_to [stop_area_referential, stop_area] +        expect(stop_area.reload).to be_activated +      end +    end +  end +end diff --git a/spec/controllers/time_tables_controller_spec.rb b/spec/controllers/time_tables_controller_spec.rb new file mode 100644 index 000000000..85f2c10e4 --- /dev/null +++ b/spec/controllers/time_tables_controller_spec.rb @@ -0,0 +1,29 @@ +RSpec.describe TimeTablesController, :type => :controller do +  login_user + +  describe 'POST create' do +    let(:request){ post :create, referential_id: referential.id, time_table: time_table_params } +    let(:time_table_params){{comment: "test"}} + +    it "should create a timetable" do +      expect{request}.to change{ Chouette::TimeTable.count }.by 1 +      expect(Chouette::TimeTable.last.comment).to eq "test" +      %i(monday tuesday wednesday thursday friday saturday sunday).each do |d| +        expect(Chouette::TimeTable.last.send(d)).to be_falsy +      end +    end + +    context "when given a calendar" do +      let(:calendar){ create :calendar, int_day_types: Calendar::MONDAY | Calendar::SUNDAY } +      let(:time_table_params){{comment: "test", calendar_id: calendar.id}} +      it "should create a timetable" do +        expect{request}.to change{ Chouette::TimeTable.count }.by 1 +        expect(Chouette::TimeTable.last.comment).to eq "test" +        expect(Chouette::TimeTable.last.calendar).to eq calendar +        %i(monday tuesday wednesday thursday friday saturday sunday).each do |d| +          expect(Chouette::TimeTable.last.send(d)).to eq calendar.send(d) +        end +      end +    end +  end +end diff --git a/spec/controllers/vehicle_journeys_controller_spec.rb b/spec/controllers/vehicle_journeys_controller_spec.rb index c9356fffa..300684532 100644 --- a/spec/controllers/vehicle_journeys_controller_spec.rb +++ b/spec/controllers/vehicle_journeys_controller_spec.rb @@ -10,6 +10,7 @@ RSpec.describe VehicleJourneysController, :type => :controller do      before do        allow(controller).to receive(:pundit_user).and_return(user_context) +      allow(controller).to receive(:current_organisation).and_return(@user.organisation)      end      it 'computes them correctly if not authorized' do @@ -25,4 +26,28 @@ RSpec.describe VehicleJourneysController, :type => :controller do      end    end +  describe "GET index" do +    login_user +    render_views + +    context "in JSON" do +      let(:vehicle_journey){ create :vehicle_journey } +      let(:route){ vehicle_journey.route } +      let(:line){ route.line } +      let!(:request){ get :index, referential_id: referential.id, line_id: line.id, route_id: route.id, format: :json} +      let(:parsed_response){ JSON.parse response.body } +      it "should have all the attributes" do +        expect(response).to have_http_status 200 +        vehicle_journey = parsed_response["vehicle_journeys"].first +        vehicle_journey_at_stops_matrix = vehicle_journey["vehicle_journey_at_stops"] +        vehicle_journey_at_stops_matrix.each do |received_vjas| +          expect(received_vjas).to have_key("id") +          vjas = Chouette::VehicleJourneyAtStop.find received_vjas["id"] +          [:connecting_service_id, :boarding_alighting_possibility].each do |att| +            expect(received_vjas[att]).to eq vjas.send(att) +          end +        end +      end +    end +  end  end | 
