diff options
| -rw-r--r-- | app/services/route_way_cost_calculator.rb | 2 | ||||
| -rw-r--r-- | lib/tom_tom/matrix.rb | 8 | ||||
| -rw-r--r-- | spec/services/route_way_cost_calculator_spec.rb | 25 | 
3 files changed, 31 insertions, 4 deletions
| diff --git a/app/services/route_way_cost_calculator.rb b/app/services/route_way_cost_calculator.rb index d41a2e59a..58f9ad1d0 100644 --- a/app/services/route_way_cost_calculator.rb +++ b/app/services/route_way_cost_calculator.rb @@ -8,5 +8,7 @@ class RouteWayCostCalculator      way_costs = TomTom.matrix(way_costs)      way_costs = WayCostCollectionJSONSerializer.dump(way_costs)      @route.update(costs: way_costs) +  rescue TomTom::Matrix::RemoteError => e +    Rails.logger.error "TomTom::Matrix server error: #{e}"    end  end diff --git a/lib/tom_tom/matrix.rb b/lib/tom_tom/matrix.rb index b57495f3f..75c2cc02b 100644 --- a/lib/tom_tom/matrix.rb +++ b/lib/tom_tom/matrix.rb @@ -4,6 +4,10 @@ module TomTom        @connection = connection      end +    # Exceptions: +    # +    # * This raises a `TomTom::Matrix::RemoteError` when the API responds with +    #   an error.      def matrix(way_costs)        points_with_ids = points_from_way_costs(way_costs)        points = points_as_params(points_with_ids) @@ -29,10 +33,6 @@ module TomTom          points_with_ids,          matrix_json        ) -    rescue RemoteError => e -      Rails.logger.error "TomTom::Matrix server error: #{e}" - -      []      end      def points_from_way_costs(way_costs) diff --git a/spec/services/route_way_cost_calculator_spec.rb b/spec/services/route_way_cost_calculator_spec.rb index 79b81e34d..593ba29ef 100644 --- a/spec/services/route_way_cost_calculator_spec.rb +++ b/spec/services/route_way_cost_calculator_spec.rb @@ -29,5 +29,30 @@ RSpec.describe RouteWayCostCalculator do        expect(route.costs).not_to be_nil        expect { JSON.parse(JSON.dump(route.costs)) }.not_to raise_error      end + +    it "doesn't update route costs when there is a server error" do +      route = create(:route) + +      stub_request( +        :post, +        "https://api.tomtom.com/routing/1/matrix/json?key&routeType=shortest&travelMode=bus" +      ) +        .with( +          headers: { +            'Accept'=>'*/*', +            'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', +            'Content-Type'=>'application/json', +            'User-Agent'=>'Faraday v0.9.2' +          }) +        .to_return( +          status: 200, +          body: "{\"formatVersion\":\"0.0.1\",\"error\":{\"description\":\"Outputformat:csvisunsupported.\"}}", +          headers: {} +        ) + +      RouteWayCostCalculator.new(route).calculate! + +      expect(route.costs).to be_nil +    end    end  end | 
