From 8c88f6634af5a5cb1cf8f4351e87d6d7e2209a6d Mon Sep 17 00:00:00 2001 From: Catherina Date: Mon, 24 Feb 2020 17:12:22 -0800 Subject: [PATCH 01/17] Added time.parse to the method and tested it --- Gemfile | 2 +- lib/trip.rb | 8 ++++++-- test/trip_test.rb | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 63ffa5acd..769f5f038 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'http://rubygems.org' -ruby '2.5.5' +ruby '2.6.5' gem 'rake' diff --git a/lib/trip.rb b/lib/trip.rb index 87ce496e9..a932f1b49 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -28,6 +28,10 @@ def initialize( raise ArgumentError, 'Passenger or passenger_id is required' end + if end_time < start_time + raise ArgumentError.new("End time cannot be less than the Start time") + end + @start_time = start_time @end_time = end_time @cost = cost @@ -57,8 +61,8 @@ def self.from_csv(record) return self.new( id: record[:id], passenger_id: record[:passenger_id], - start_time: record[:start_time], - end_time: record[:end_time], + start_time: Time.parse(record[:start_time]), + end_time: Time.parse(record[:end_time]), cost: record[:cost], rating: record[:rating] ) diff --git a/test/trip_test.rb b/test/trip_test.rb index 2063e28a7..33509c83a 100644 --- a/test/trip_test.rb +++ b/test/trip_test.rb @@ -41,5 +41,27 @@ end.must_raise ArgumentError end end + + it "raises an error for end_time greater than start_time" do + + + @trip_data = { + id: 8, + passenger: RideShare::Passenger.new( + id: 1, + name: "Ada", + phone_number: "412-432-7640" + ), + start_time: Time.parse("2018-12-20 16:09:21 -0800"), + end_time: Time.parse("2018-12-17 16:09:21 -0800"), + cost: 23.45, + rating: 3 + } + + expect{RideShare::Trip.new(@trip_data)}.must_raise ArgumentError + end + + + end end From e2fac080ae43684ef61f3997cd9752c527119bc2 Mon Sep 17 00:00:00 2001 From: Catherina Date: Tue, 25 Feb 2020 14:34:37 -0800 Subject: [PATCH 02/17] Added calculate_duration method to the Trip class and test. --- lib/trip.rb | 7 ++++++- test/trip_test.rb | 28 +++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/trip.rb b/lib/trip.rb index a932f1b49..48e5a4181 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -1,4 +1,5 @@ require 'csv' +require 'time' require_relative 'csv_record' @@ -55,6 +56,10 @@ def connect(passenger) passenger.add_trip(self) end + def calculate_duration + return end_time - start_time + end + private def self.from_csv(record) @@ -65,7 +70,7 @@ def self.from_csv(record) end_time: Time.parse(record[:end_time]), cost: record[:cost], rating: record[:rating] - ) + ) end end end diff --git a/test/trip_test.rb b/test/trip_test.rb index 33509c83a..85b8c6eb8 100644 --- a/test/trip_test.rb +++ b/test/trip_test.rb @@ -60,8 +60,34 @@ expect{RideShare::Trip.new(@trip_data)}.must_raise ArgumentError end - + end + + describe "calculate_duration" do + before do + @trip_data = { + id: 8, + passenger: RideShare::Passenger.new( + id: 1, + name: "Ada", + phone_number: "412-432-7640" + ), + start_time: Time.parse("12:00"), + end_time: Time.parse("14:00"), + cost: 23.45, + rating: 3 + } + @trip = RideShare::Trip.new(@trip_data) + end + + it "wil calculate and return the time in seconds" do + + expect(@trip.calculate_duration).must_equal 7200.0 + end end + + + + end From 661f27528de4ada7b66b1d98751d8dd5431a2491 Mon Sep 17 00:00:00 2001 From: Catherina Date: Tue, 25 Feb 2020 15:01:57 -0800 Subject: [PATCH 03/17] added net_expenditures to Passenger.rb and testing. --- lib/passenger.rb | 14 ++++++++++++ test/passenger_test.rb | 51 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/lib/passenger.rb b/lib/passenger.rb index afd13d73b..30e835987 100644 --- a/lib/passenger.rb +++ b/lib/passenger.rb @@ -16,6 +16,20 @@ def add_trip(trip) @trips << trip end + def net_expenditures + sum = 0 + + @trips.each do |trip| + sum += trip.cost + end + + return sum + end + + + def total_time_spent + end + private def self.from_csv(record) diff --git a/test/passenger_test.rb b/test/passenger_test.rb index eb3a631df..d64035ae1 100644 --- a/test/passenger_test.rb +++ b/test/passenger_test.rb @@ -69,6 +69,55 @@ end describe "net_expenditures" do - # You add tests for the net_expenditures method + before do + @passenger = RideShare::Passenger.new( + id: 9, + name: "Merl Glover III", + phone_number: "1-602-620-2330 x3723", + trips: [] + ) + trip = RideShare::Trip.new( + id: 8, + passenger: @passenger, + start_time: Time.new(2016, 8, 8), + end_time: Time.new(2016, 8, 9), + cost: 10, + rating: 5 + ) + + @passenger.add_trip(trip) + @passenger.add_trip(trip) + @passenger.add_trip(trip) + end + + it "totals to $30 dollars for all trips" do + expect(@passenger.net_expenditures).must_equal 30 + end + + it "totals to $55.50 dollars for all trips" do + next_trip = RideShare::Trip.new( + id: 8, + passenger: @passenger, + start_time: Time.new(2016, 8, 8), + end_time: Time.new(2016, 8, 9), + cost: 25.50, + rating: 5 + ) + @passenger.add_trip(next_trip) + + expect(@passenger.net_expenditures).must_equal 55.5 + end + + it "returns $0 if no trips have been taken" do + @passenger_two = RideShare::Passenger.new( + id: 9, + name: "Merl Glover III", + phone_number: "1-602-620-2330 x3723", + trips: [] + ) + + expect(@passenger_two.net_expenditures).must_equal 0 + end + end end From 21ed8974618d8e6ce3a5bd7e1a353ab8de93b359 Mon Sep 17 00:00:00 2001 From: Catherina Date: Tue, 25 Feb 2020 15:30:19 -0800 Subject: [PATCH 04/17] added total_time_spent method to Passenger.rb and testing. --- lib/passenger.rb | 7 ++++ lib/trip.rb | 2 +- test/passenger_test.rb | 85 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/lib/passenger.rb b/lib/passenger.rb index 30e835987..49d86f35d 100644 --- a/lib/passenger.rb +++ b/lib/passenger.rb @@ -28,6 +28,13 @@ def net_expenditures def total_time_spent + time_spent = 0 + + @trips.each do |trip| + time_spent += trip.calculate_duration + end + + return time_spent end private diff --git a/lib/trip.rb b/lib/trip.rb index 48e5a4181..dad44fa96 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -57,7 +57,7 @@ def connect(passenger) end def calculate_duration - return end_time - start_time + return (end_time - start_time) end private diff --git a/test/passenger_test.rb b/test/passenger_test.rb index d64035ae1..8a4121b92 100644 --- a/test/passenger_test.rb +++ b/test/passenger_test.rb @@ -118,6 +118,91 @@ expect(@passenger_two.net_expenditures).must_equal 0 end + end + + describe "total_time_spent" do + before do + @passenger = RideShare::Passenger.new( + id: 9, + name: "Merl Glover III", + phone_number: "1-602-620-2330 x3723", + trips: [] + ) + trip = RideShare::Trip.new( + id: 8, + passenger: @passenger, + start_time: Time.parse("2020-02-25 15:00:00 -0800"), + end_time: Time.parse("2020-02-25 16:00:00 -0800"), + cost: 10, + rating: 5 + ) + + trip_two = RideShare::Trip.new( + id: 9, + passenger: @passenger, + start_time: Time.parse("2020-02-25 15:00:00 -0800"), + end_time: Time.parse("2020-02-25 17:00:00 -0800"), + cost: 10, + rating: 5 + ) + @passenger.add_trip(trip) + @passenger.add_trip(trip_two) + end + + it "totals time spent 10800.0" do + expect(@passenger.total_time_spent).must_equal 10800.0 + end + + it "totals time spent 21600.0" do + trip_three = RideShare::Trip.new( + id: 10, + passenger: @passenger, + start_time: Time.parse("2020-02-25 15:00:00 -0800"), + end_time: Time.parse("2020-02-25 18:00:00 -0800"), + cost: 10, + rating: 5 + ) + + @passenger.add_trip(trip_three) + + expect(@passenger.total_time_spent).must_equal 21600.0 + end + + it "totals time spent 21900.0" do + trip_three = RideShare::Trip.new( + id: 10, + passenger: @passenger, + start_time: Time.parse("2020-02-25 15:00:00 -0800"), + end_time: Time.parse("2020-02-25 18:00:00 -0800"), + cost: 10, + rating: 5 + ) + + @passenger.add_trip(trip_three) + + trip_four = RideShare::Trip.new( + id: 11, + passenger: @passenger, + start_time: Time.parse("2020-02-25 15:00:00 -0800"), + end_time: Time.parse("2020-02-25 15:05:00 -0800"), + cost: 10, + rating: 5 + ) + + @passenger.add_trip(trip_four) + + expect(@passenger.total_time_spent).must_equal 21900.0 + end + + it "totals 0 time spent if no trips are taken" do + @passenger_two = RideShare::Passenger.new( + id: 9, + name: "Merl Glover III", + phone_number: "1-602-620-2330 x3723", + trips: [] + ) + expect(@passenger_two.total_time_spent).must_equal 0 + end end end From 8033c12978de28fbe5da9d1cad6b3ee3355ec029 Mon Sep 17 00:00:00 2001 From: Catherina Date: Tue, 25 Feb 2020 16:05:57 -0800 Subject: [PATCH 05/17] Created class Driver. --- lib/driver.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 lib/driver.rb diff --git a/lib/driver.rb b/lib/driver.rb new file mode 100644 index 000000000..23e763166 --- /dev/null +++ b/lib/driver.rb @@ -0,0 +1,29 @@ +require_relative 'csv_record' + +module RideShare + class Driver < CsvRecord + + attr_reader :id, :name, :vin, :status, :trips + + def initialize(id:, name:, vin:, status:, trips: nil) + super(id) + + @name = name + @vin = vin + + if @vin.to_s.length != 17 + raise ArgumentError.new("Wrong length of vin!") + end + + @status = status + + statuses = [:AVAILABLE, :UNAVAILABLE] + if !statuses.include?@status.upcase.to_sym + raise ArgumentError.new("Invalid status.") + end + + + @trips = [] || trips + end + end +end From 74e7ba74261b047756c4131aeec39b359bbed8d5 Mon Sep 17 00:00:00 2001 From: Catherina Date: Tue, 25 Feb 2020 16:48:28 -0800 Subject: [PATCH 06/17] Updated all files to include driver or driver_id. --- Gemfile.lock | 34 ++++++++++++++++++++++++++++++++++ lib/driver.rb | 20 ++++++++++++++++---- lib/trip.rb | 20 +++++++++++++++++--- lib/trip_dispatcher.rb | 2 ++ test/driver_test.rb | 8 ++++---- test/passenger_test.rb | 24 ++++++++++++++++-------- test/test_helper.rb | 2 +- test/trip_test.rb | 13 ++++++------- 8 files changed, 96 insertions(+), 27 deletions(-) create mode 100644 Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..a029ef031 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,34 @@ +GEM + remote: http://rubygems.org/ + specs: + ansi (1.5.0) + awesome_print (1.8.0) + builder (3.2.4) + csv (3.1.2) + minitest (5.14.0) + minitest-reporters (1.4.2) + ansi + builder + minitest (>= 5.0) + ruby-progressbar + minitest-skip (0.0.1) + minitest (~> 5.0) + rake (13.0.1) + ruby-progressbar (1.10.1) + +PLATFORMS + ruby + +DEPENDENCIES + awesome_print + csv + minitest + minitest-reporters + minitest-skip + rake + +RUBY VERSION + ruby 2.6.5p114 + +BUNDLED WITH + 2.1.4 diff --git a/lib/driver.rb b/lib/driver.rb index 23e763166..1dd98a27a 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -5,7 +5,7 @@ class Driver < CsvRecord attr_reader :id, :name, :vin, :status, :trips - def initialize(id:, name:, vin:, status:, trips: nil) + def initialize(id:, name:, vin:, status: :AVAILABLE, trips: nil) super(id) @name = name @@ -17,13 +17,25 @@ def initialize(id:, name:, vin:, status:, trips: nil) @status = status - statuses = [:AVAILABLE, :UNAVAILABLE] - if !statuses.include?@status.upcase.to_sym + if ![:AVAILABLE, :UNAVAILABLE].include?@status.upcase.to_sym raise ArgumentError.new("Invalid status.") end - @trips = [] || trips end + + def self.from_csv(record) + return new( + id: record[:id], + name: record[:name], + vin: record[:vin], + status: record[:status] + ) + end + + def add_trip + + end + end end diff --git a/lib/trip.rb b/lib/trip.rb index dad44fa96..30df5aa16 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -5,7 +5,7 @@ module RideShare class Trip < CsvRecord - attr_reader :id, :passenger, :passenger_id, :start_time, :end_time, :cost, :rating + attr_reader :id, :passenger, :passenger_id, :start_time, :end_time, :cost, :rating, :driver_id, :driver def initialize( id:, @@ -14,7 +14,9 @@ def initialize( start_time:, end_time:, cost: nil, - rating: + rating:, + driver_id: nil, + driver: nil ) super(id) @@ -29,6 +31,17 @@ def initialize( raise ArgumentError, 'Passenger or passenger_id is required' end + if driver + @driver = driver + @driver_id = driver.id + + elsif driver_id + @driver_id = driver_id + + else + raise ArgumentError, 'Driver or driver_id is required' + end + if end_time < start_time raise ArgumentError.new("End time cannot be less than the Start time") end @@ -69,7 +82,8 @@ def self.from_csv(record) start_time: Time.parse(record[:start_time]), end_time: Time.parse(record[:end_time]), cost: record[:cost], - rating: record[:rating] + rating: record[:rating], + driver_id: record[:driver_id] ) end end diff --git a/lib/trip_dispatcher.rb b/lib/trip_dispatcher.rb index 5130849f8..f9845cd0a 100644 --- a/lib/trip_dispatcher.rb +++ b/lib/trip_dispatcher.rb @@ -3,6 +3,7 @@ require_relative 'passenger' require_relative 'trip' +require_relative 'driver' module RideShare class TripDispatcher @@ -11,6 +12,7 @@ class TripDispatcher def initialize(directory: './support') @passengers = Passenger.load_all(directory: directory) @trips = Trip.load_all(directory: directory) + @drivers = Driver.load_all(directory: directory) connect_trips end diff --git a/test/driver_test.rb b/test/driver_test.rb index 4e6076ec2..cc641da72 100644 --- a/test/driver_test.rb +++ b/test/driver_test.rb @@ -1,6 +1,6 @@ require_relative 'test_helper' -xdescribe "Driver class" do +describe "Driver class" do describe "Driver instantiation" do before do @driver = RideShare::Driver.new( @@ -45,7 +45,7 @@ end end - describe "add_trip method" do + xdescribe "add_trip method" do before do pass = RideShare::Passenger.new( id: 1, @@ -78,7 +78,7 @@ end end - describe "average_rating method" do + xdescribe "average_rating method" do before do @driver = RideShare::Driver.new( id: 54, @@ -130,7 +130,7 @@ end end - describe "total_revenue" do + xdescribe "total_revenue" do # You add tests for the total_revenue method end end diff --git a/test/passenger_test.rb b/test/passenger_test.rb index 8a4121b92..441525c8f 100644 --- a/test/passenger_test.rb +++ b/test/passenger_test.rb @@ -49,7 +49,8 @@ passenger: @passenger, start_time: Time.new(2016, 8, 8), end_time: Time.new(2016, 8, 9), - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(trip) @@ -82,7 +83,8 @@ start_time: Time.new(2016, 8, 8), end_time: Time.new(2016, 8, 9), cost: 10, - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(trip) @@ -101,7 +103,8 @@ start_time: Time.new(2016, 8, 8), end_time: Time.new(2016, 8, 9), cost: 25.50, - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(next_trip) @@ -134,7 +137,8 @@ start_time: Time.parse("2020-02-25 15:00:00 -0800"), end_time: Time.parse("2020-02-25 16:00:00 -0800"), cost: 10, - rating: 5 + rating: 5, + driver_id: 2 ) trip_two = RideShare::Trip.new( @@ -143,7 +147,8 @@ start_time: Time.parse("2020-02-25 15:00:00 -0800"), end_time: Time.parse("2020-02-25 17:00:00 -0800"), cost: 10, - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(trip) @@ -161,7 +166,8 @@ start_time: Time.parse("2020-02-25 15:00:00 -0800"), end_time: Time.parse("2020-02-25 18:00:00 -0800"), cost: 10, - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(trip_three) @@ -176,7 +182,8 @@ start_time: Time.parse("2020-02-25 15:00:00 -0800"), end_time: Time.parse("2020-02-25 18:00:00 -0800"), cost: 10, - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(trip_three) @@ -187,7 +194,8 @@ start_time: Time.parse("2020-02-25 15:00:00 -0800"), end_time: Time.parse("2020-02-25 15:05:00 -0800"), cost: 10, - rating: 5 + rating: 5, + driver_id: 2 ) @passenger.add_trip(trip_four) diff --git a/test/test_helper.rb b/test/test_helper.rb index bdb9bf352..b1ec3fc78 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -12,4 +12,4 @@ require_relative '../lib/passenger' require_relative '../lib/trip' require_relative '../lib/trip_dispatcher' -# require_relative '../lib/driver' +require_relative '../lib/driver' \ No newline at end of file diff --git a/test/trip_test.rb b/test/trip_test.rb index 85b8c6eb8..d09570ec2 100644 --- a/test/trip_test.rb +++ b/test/trip_test.rb @@ -15,7 +15,8 @@ start_time: start_time, end_time: end_time, cost: 23.45, - rating: 3 + rating: 3, + driver_id: 2 } @trip = RideShare::Trip.new(@trip_data) end @@ -55,7 +56,8 @@ start_time: Time.parse("2018-12-20 16:09:21 -0800"), end_time: Time.parse("2018-12-17 16:09:21 -0800"), cost: 23.45, - rating: 3 + rating: 3, + driver_id: 2 } expect{RideShare::Trip.new(@trip_data)}.must_raise ArgumentError @@ -75,19 +77,16 @@ start_time: Time.parse("12:00"), end_time: Time.parse("14:00"), cost: 23.45, - rating: 3 + rating: 3, + driver_id: 2 } @trip = RideShare::Trip.new(@trip_data) end it "wil calculate and return the time in seconds" do - expect(@trip.calculate_duration).must_equal 7200.0 end end - - - end From df6e4389f8863e6d8432bd5e967225b4e3d3fbaf Mon Sep 17 00:00:00 2001 From: Catherina Date: Tue, 25 Feb 2020 16:56:18 -0800 Subject: [PATCH 07/17] added add_trip to driver.rb --- lib/driver.rb | 4 ++-- lib/trip.rb | 3 +++ test/driver_test.rb | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index 1dd98a27a..b96253358 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -33,8 +33,8 @@ def self.from_csv(record) ) end - def add_trip - + def add_trip(trip) + @trips << trip end end diff --git a/lib/trip.rb b/lib/trip.rb index 30df5aa16..4083e7da1 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -67,6 +67,9 @@ def inspect def connect(passenger) @passenger = passenger passenger.add_trip(self) + + # @driver = driver + # driver.add_trip(self) end def calculate_duration diff --git a/test/driver_test.rb b/test/driver_test.rb index cc641da72..d37fe2b7f 100644 --- a/test/driver_test.rb +++ b/test/driver_test.rb @@ -45,7 +45,7 @@ end end - xdescribe "add_trip method" do + describe "add_trip method" do before do pass = RideShare::Passenger.new( id: 1, From d334974238ab4d6231e3b11a54a06a3eeb483c46 Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 12:18:37 -0800 Subject: [PATCH 08/17] wrote add_trip method for Driver.rb and connected all trips --- lib/driver.rb | 10 ++++++++++ lib/trip.rb | 6 +++--- lib/trip_dispatcher.rb | 10 ++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index b96253358..3a7e002ad 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -37,5 +37,15 @@ def add_trip(trip) @trips << trip end + def average_rating + # sum_of_ratings = 0 + + # @trips.length.each do |trip| + # sum_of_ratings += trip.rating + # end + + # return (sum_of_ratings / @trips.length) + end + end end diff --git a/lib/trip.rb b/lib/trip.rb index 4083e7da1..e3dcdde27 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -64,12 +64,12 @@ def inspect "PassengerID=#{passenger&.id.inspect}>" end - def connect(passenger) + def connect(passenger, driver) @passenger = passenger passenger.add_trip(self) - # @driver = driver - # driver.add_trip(self) + @driver = driver + driver.add_trip(self) end def calculate_duration diff --git a/lib/trip_dispatcher.rb b/lib/trip_dispatcher.rb index f9845cd0a..b81804870 100644 --- a/lib/trip_dispatcher.rb +++ b/lib/trip_dispatcher.rb @@ -21,6 +21,11 @@ def find_passenger(id) return @passengers.find { |passenger| passenger.id == id } end + def find_driver(id) + Driver.validate_id(id) + return @drivers.find { |driver| driver.id == id } + end + def inspect # Make puts output more useful return "#<#{self.class.name}:0x#{object_id.to_s(16)} \ @@ -30,11 +35,12 @@ def inspect end private - +5 def connect_trips @trips.each do |trip| passenger = find_passenger(trip.passenger_id) - trip.connect(passenger) + driver = find_driver(trip.driver_id) + trip.connect(passenger, driver) end return trips From 7ccc2d627caa043064a347d0acf128bf82e9ffad Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 12:22:12 -0800 Subject: [PATCH 09/17] wrote average_rating method for Driver.rb --- lib/driver.rb | 12 +++++++----- test/driver_test.rb | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index 3a7e002ad..b567ee660 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -38,13 +38,15 @@ def add_trip(trip) end def average_rating - # sum_of_ratings = 0 + sum_of_ratings = 0.0 - # @trips.length.each do |trip| - # sum_of_ratings += trip.rating - # end + return 0 if @trips.length == 0 - # return (sum_of_ratings / @trips.length) + @trips.each do |trip| + sum_of_ratings += trip.rating + end + + return (sum_of_ratings / @trips.length) end end diff --git a/test/driver_test.rb b/test/driver_test.rb index d37fe2b7f..0895b9fff 100644 --- a/test/driver_test.rb +++ b/test/driver_test.rb @@ -78,7 +78,7 @@ end end - xdescribe "average_rating method" do + describe "average_rating method" do before do @driver = RideShare::Driver.new( id: 54, From 01cf6372ef424f08a30a4fa364d0bd6cac629073 Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 12:45:42 -0800 Subject: [PATCH 10/17] added total_revenue method to Driver.rb and testing --- lib/driver.rb | 18 +++++++++++ test/driver_test.rb | 77 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index b567ee660..19ccc3c69 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -49,5 +49,23 @@ def average_rating return (sum_of_ratings / @trips.length) end + def total_revenue + return 0.0 if @trips.length == 0 + + sum_of_trip_costs = 0.0 + + @trips.each do |trip| + if trip.cost < 1.65 + net_trip = trip.cost + else + net_trip = trip.cost - 1.65 + end + + sum_of_trip_costs += net_trip + end + + return (sum_of_trip_costs * 0.80) + end + end end diff --git a/test/driver_test.rb b/test/driver_test.rb index 0895b9fff..192755dca 100644 --- a/test/driver_test.rb +++ b/test/driver_test.rb @@ -130,7 +130,80 @@ end end - xdescribe "total_revenue" do - # You add tests for the total_revenue method + describe "total_revenue" do + before do + @driver_one = RideShare::Driver.new( + id: 54, + name: "Rogers Bartell IV", + vin: "1C9EVBRM0YBC564DZ" + ) + @driver_two = RideShare::Driver.new( + id: 55, + name: "Rogers IV", + vin: "1C9EVBRM0YBC564DZ", + trips: [] + ) + trip_one = RideShare::Trip.new( + id: 8, + driver: @driver_one, + passenger_id: 3, + start_time: Time.new(2016, 8, 8), + end_time: Time.new(2016, 8, 8), + cost: 12, + rating: 5 + ) + trip_two = RideShare::Trip.new( + id: 8, + driver: @driver_one, + passenger_id: 3, + start_time: Time.new(2016, 8, 8), + end_time: Time.new(2016, 8, 8), + cost: 10, + rating: 5 + ) + @driver_one.add_trip(trip_one) + @driver_one.add_trip(trip_two) + end + + it "return original total if cost of trip was less than 1.65" do + trip_three = RideShare::Trip.new( + id: 8, + driver: @driver_two, + passenger_id: 3, + start_time: Time.new(2016, 8, 8), + end_time: Time.new(2016, 8, 8), + cost: 1, + rating: 5 + ) + + @driver_two.add_trip(trip_three) + + expect(@driver_two.total_revenue).must_equal 0.8 + end + + it "return 0 if there are no trips" do + expect(@driver_two.total_revenue).must_equal 0.0 + end + + it "returns 0 if the cost of one trip is 1.65" do + trip_three = RideShare::Trip.new( + id: 8, + driver: @driver_two, + passenger_id: 3, + start_time: Time.new(2016, 8, 8), + end_time: Time.new(2016, 8, 8), + cost: 1.65, + rating: 5 + ) + + @driver_two.add_trip(trip_three) + + expect(@driver_two.total_revenue).must_equal 0.0 + end + + it "returns 14.96 for total trips" do + expect(@driver_one.total_revenue).must_equal 14.96 + end + end end From 166a6422c1ca03c452190ac85d05b540f6d8ed63 Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 14:03:39 -0800 Subject: [PATCH 11/17] Updated Driver class --- lib/driver.rb | 2 +- test/trip_dispatch_test.rb | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index 19ccc3c69..3e54a3566 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -15,7 +15,7 @@ def initialize(id:, name:, vin:, status: :AVAILABLE, trips: nil) raise ArgumentError.new("Wrong length of vin!") end - @status = status + @status = status.to_sym if ![:AVAILABLE, :UNAVAILABLE].include?@status.upcase.to_sym raise ArgumentError.new("Invalid status.") diff --git a/test/trip_dispatch_test.rb b/test/trip_dispatch_test.rb index 21f4457b7..d6618bbee 100644 --- a/test/trip_dispatch_test.rb +++ b/test/trip_dispatch_test.rb @@ -78,8 +78,7 @@ def build_test_dispatcher end end - # TODO: un-skip for Wave 2 - xdescribe "drivers" do + describe "drivers" do describe "find_driver method" do before do @dispatcher = build_test_dispatcher From 115eb12ac54db23483e163366fecdc8e98a877fa Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 15:06:32 -0800 Subject: [PATCH 12/17] added request_trip method to TripDispatch.rb --- lib/driver.rb | 5 +++++ lib/trip_dispatcher.rb | 27 ++++++++++++++++++++++++++- test/trip_test.rb | 10 ++++++++-- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index 3e54a3566..2d1022c9c 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -67,5 +67,10 @@ def total_revenue return (sum_of_trip_costs * 0.80) end + def update_status(trip) + self.add_trip(trip) + @status = :UNAVAILABLE + end + end end diff --git a/lib/trip_dispatcher.rb b/lib/trip_dispatcher.rb index b81804870..06fb4104a 100644 --- a/lib/trip_dispatcher.rb +++ b/lib/trip_dispatcher.rb @@ -26,6 +26,31 @@ def find_driver(id) return @drivers.find { |driver| driver.id == id } end + def request_trip(passenger_id) + available_driver = @drivers.find do + |driver| driver.status == :AVAILABLE + end + + current_passenger = find_passenger(passenger_id) + + id = trips.length + 1 + new_trip = RideShare::Trip.new( + id: id, + passenger_id: passenger_id, + start_time: Time.now, + end_time: nil, + cost: nil, + rating: nil, + driver: available_driver + ) + + available_driver.update_status(new_trip) + current_passenger.add_trip(new_trip) + @trips << new_trip + + return new_trip + end + def inspect # Make puts output more useful return "#<#{self.class.name}:0x#{object_id.to_s(16)} \ @@ -35,7 +60,7 @@ def inspect end private -5 + def connect_trips @trips.each do |trip| passenger = find_passenger(trip.passenger_id) diff --git a/test/trip_test.rb b/test/trip_test.rb index d09570ec2..2dc0f3f73 100644 --- a/test/trip_test.rb +++ b/test/trip_test.rb @@ -16,7 +16,13 @@ end_time: end_time, cost: 23.45, rating: 3, - driver_id: 2 + driver: RideShare::Driver.new( + id: 1, + name: "Paul Klee", + vin: "WBS76FYD47DJF7206", + status: :AVAILABLE + ), + driver_id: 1 } @trip = RideShare::Trip.new(@trip_data) end @@ -30,7 +36,7 @@ end it "stores an instance of driver" do - skip # Unskip after wave 2 + # Unskip after wave 2 expect(@trip.driver).must_be_kind_of RideShare::Driver end From 7bd3bf8160aa084f92cb5eaea8be56fe8807c945 Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 15:19:16 -0800 Subject: [PATCH 13/17] Added test for valid passenger_id in request_trip. --- lib/trip_dispatcher.rb | 1 + test/trip_dispatch_test.rb | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/trip_dispatcher.rb b/lib/trip_dispatcher.rb index 06fb4104a..92fd8552e 100644 --- a/lib/trip_dispatcher.rb +++ b/lib/trip_dispatcher.rb @@ -34,6 +34,7 @@ def request_trip(passenger_id) current_passenger = find_passenger(passenger_id) id = trips.length + 1 + new_trip = RideShare::Trip.new( id: id, passenger_id: passenger_id, diff --git a/test/trip_dispatch_test.rb b/test/trip_dispatch_test.rb index d6618bbee..147afcdef 100644 --- a/test/trip_dispatch_test.rb +++ b/test/trip_dispatch_test.rb @@ -121,4 +121,24 @@ def build_test_dispatcher end end end + + describe "request_trip method" do + before do + @td = RideShare::TripDispatcher.new + end + + it "passenger_id must be kind of integer" do + passenger_id = @td.passengers[0].id + expect(passenger_id).must_be_kind_of Integer + end + + # it "assigns the first driver who's status is available" do + # new_trip = @td.request_trip(1) + + # expect(new_trip.driver.id).must_equal 1 + # expect(new_trip.driver.status).must_equal :AVAILABLE + # end + + end + end From 9e020b165f1e1c28acefd92c90b4fc76dcdc241e Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 16:00:29 -0800 Subject: [PATCH 14/17] added more testing (green) for request_trip --- lib/driver.rb | 2 +- lib/trip.rb | 12 ++++++--- test/trip_dispatch_test.rb | 51 ++++++++++++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index 2d1022c9c..314f2108a 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -68,7 +68,7 @@ def total_revenue end def update_status(trip) - self.add_trip(trip) + add_trip(trip) @status = :UNAVAILABLE end diff --git a/lib/trip.rb b/lib/trip.rb index e3dcdde27..9f1bd56c1 100644 --- a/lib/trip.rb +++ b/lib/trip.rb @@ -42,8 +42,10 @@ def initialize( raise ArgumentError, 'Driver or driver_id is required' end - if end_time < start_time - raise ArgumentError.new("End time cannot be less than the Start time") + if end_time != nil + if end_time < start_time + raise ArgumentError.new("End time cannot be less than the Start time") + end end @start_time = start_time @@ -51,8 +53,10 @@ def initialize( @cost = cost @rating = rating - if @rating > 5 || @rating < 1 - raise ArgumentError.new("Invalid rating #{@rating}") + if @rating != nil + if @rating > 5 || @rating < 1 + raise ArgumentError.new("Invalid rating #{@rating}") + end end end diff --git a/test/trip_dispatch_test.rb b/test/trip_dispatch_test.rb index 147afcdef..39bf065f9 100644 --- a/test/trip_dispatch_test.rb +++ b/test/trip_dispatch_test.rb @@ -132,13 +132,54 @@ def build_test_dispatcher expect(passenger_id).must_be_kind_of Integer end - # it "assigns the first driver who's status is available" do - # new_trip = @td.request_trip(1) + it "assigns the first driver who's status is available" do + before_new_trip_status = @td.drivers[0].status - # expect(new_trip.driver.id).must_equal 1 - # expect(new_trip.driver.status).must_equal :AVAILABLE - # end + new_trip = @td.request_trip(1) + expect(new_trip.driver.id).must_equal 1 + expect(before_new_trip_status).must_equal :AVAILABLE + expect(new_trip.driver.status).must_equal :UNAVAILABLE + end + + it "should use the current time for start time" do + new_trip = @td.request_trip(2) + + expect(new_trip.start_time).must_be_kind_of Time + end + + it "should be nil for end_date, cost and rating for the new trip" do + new_trip = @td.request_trip(2) + + expect(new_trip.end_time).must_be_nil + expect(new_trip.cost).must_be_nil + expect(new_trip.rating).must_be_nil + end + + it "creates an instance of a trip" do + expect(@td.request_trip(1)).must_be_kind_of RideShare::Trip + end + + it "checks if the trip was added to driver's trips" do + before_new_trip = @td.drivers[0].trips.length + + new_trip = @td.request_trip(1) + expect(@td.drivers[0].trips.length).must_equal before_new_trip + 1 + end + + it "checks if the trip was added to passenger's trips" do + before_new_trip = @td.passengers[0].trips.length + + new_trip = @td.request_trip(1) + expect(@td.passengers[0].trips.length).must_equal before_new_trip + 1 + end + + it "checks if the trip was added to the whole trips list" do + before_new_trip = @td.trips.length + + new_trip = @td.request_trip(1) + expect(@td.trips.length).must_equal before_new_trip + 1 + end end end From 76f0f786fffd77aa582c4e6695dce44295a181ab Mon Sep 17 00:00:00 2001 From: Catherina Date: Wed, 26 Feb 2020 17:31:38 -0800 Subject: [PATCH 15/17] more testing for in-progress trips. --- lib/driver.rb | 24 +++++++++++++++--------- lib/passenger.rb | 8 ++++++-- test/driver_test.rb | 29 +++++++++++++++++++++++++++++ test/passenger_test.rb | 33 +++++++++++++++++++++++++++++++++ test/trip_dispatch_test.rb | 19 +++++++++++++++++++ 5 files changed, 102 insertions(+), 11 deletions(-) diff --git a/lib/driver.rb b/lib/driver.rb index 314f2108a..ec93750ec 100644 --- a/lib/driver.rb +++ b/lib/driver.rb @@ -39,14 +39,18 @@ def add_trip(trip) def average_rating sum_of_ratings = 0.0 - + trips_in_progress = 0 return 0 if @trips.length == 0 @trips.each do |trip| - sum_of_ratings += trip.rating + if trip.end_time != nil + sum_of_ratings += trip.rating + else + trips_in_progress += 1 + end end - return (sum_of_ratings / @trips.length) + return (sum_of_ratings / (@trips.length - trips_in_progress)) end def total_revenue @@ -55,13 +59,15 @@ def total_revenue sum_of_trip_costs = 0.0 @trips.each do |trip| - if trip.cost < 1.65 - net_trip = trip.cost - else - net_trip = trip.cost - 1.65 + if trip.end_time != nil + if trip.cost < 1.65 + net_trip = trip.cost + else + net_trip = trip.cost - 1.65 + end + + sum_of_trip_costs += net_trip end - - sum_of_trip_costs += net_trip end return (sum_of_trip_costs * 0.80) diff --git a/lib/passenger.rb b/lib/passenger.rb index 49d86f35d..6f3a013a8 100644 --- a/lib/passenger.rb +++ b/lib/passenger.rb @@ -20,7 +20,9 @@ def net_expenditures sum = 0 @trips.each do |trip| - sum += trip.cost + if trip.end_time != nil + sum += trip.cost + end end return sum @@ -31,7 +33,9 @@ def total_time_spent time_spent = 0 @trips.each do |trip| - time_spent += trip.calculate_duration + if trip.end_time != nil + time_spent += trip.calculate_duration + end end return time_spent diff --git a/test/driver_test.rb b/test/driver_test.rb index 192755dca..ccaa4b395 100644 --- a/test/driver_test.rb +++ b/test/driver_test.rb @@ -128,6 +128,20 @@ expect(@driver.average_rating).must_be_close_to (5.0 + 1.0) / 2.0, 0.01 end + + it "returns average rating of 5 even with a trip in-progress" do + progress_trip = RideShare::Trip.new( + id: 8, + driver: @driver, + passenger_id: 3, + start_time: Time.new(2016, 8, 8), + end_time: nil, + rating: nil + ) + @driver.add_trip(progress_trip) + + expect(@driver.average_rating).must_be_close_to 5.0, 0.01 + end end describe "total_revenue" do @@ -205,5 +219,20 @@ expect(@driver_one.total_revenue).must_equal 14.96 end + it "returns 14.96 for total trips even if one trip is in-progress" do + trip_three = RideShare::Trip.new( + id: 8, + driver: @driver_one, + passenger_id: 3, + start_time: Time.new(2016, 8, 8), + end_time: nil, + cost: nil, + rating: nil + ) + + @driver_one.add_trip(trip_three) + expect(@driver_one.total_revenue).must_equal 14.96 + + end end end diff --git a/test/passenger_test.rb b/test/passenger_test.rb index 441525c8f..a06d4bc51 100644 --- a/test/passenger_test.rb +++ b/test/passenger_test.rb @@ -121,6 +121,21 @@ expect(@passenger_two.net_expenditures).must_equal 0 end + + it "returns $30 even though there is a trip in-progress" do + progress_trip = RideShare::Trip.new( + id: 8, + passenger: @passenger, + start_time: Time.new(2016, 8, 8), + end_time: nil, + cost: nil, + rating: nil, + driver_id: 2 + ) + + @passenger.add_trip(progress_trip) + expect(@passenger.net_expenditures).must_equal 30.0 + end end describe "total_time_spent" do @@ -212,5 +227,23 @@ ) expect(@passenger_two.total_time_spent).must_equal 0 end + + it "totals time spent 10800.0 even with a trip in-progress" do + expect(@passenger.total_time_spent).must_equal 10800.0 + + progress_trip = RideShare::Trip.new( + id: 11, + passenger: @passenger, + start_time: Time.parse("2020-02-25 15:00:00 -0800"), + end_time: nil, + cost: nil, + rating: nil, + driver_id: 2 + ) + + @passenger.add_trip(progress_trip) + + expect(@passenger.total_time_spent).must_equal 10800.0 + end end end diff --git a/test/trip_dispatch_test.rb b/test/trip_dispatch_test.rb index 39bf065f9..a24e6af7c 100644 --- a/test/trip_dispatch_test.rb +++ b/test/trip_dispatch_test.rb @@ -125,6 +125,8 @@ def build_test_dispatcher describe "request_trip method" do before do @td = RideShare::TripDispatcher.new + + # @td2 = RideShare::TripDispatcher.new(directory: './test/test_data/') end it "passenger_id must be kind of integer" do @@ -142,6 +144,14 @@ def build_test_dispatcher expect(new_trip.driver.status).must_equal :UNAVAILABLE end + # it "raises an error if no drivers are available" do + # all_test_drivers = Driver.load_all(directory: './test/test_data/') + # all_test_drivers.request_trip(1) + # all_test_drivers.request_trip(2) + + # expect + # end + it "should use the current time for start time" do new_trip = @td.request_trip(2) @@ -180,6 +190,15 @@ def build_test_dispatcher new_trip = @td.request_trip(1) expect(@td.trips.length).must_equal before_new_trip + 1 end + + # it "raises an error if there are no available drivers when you request one" do + # unavailable_drivers = [Driver.new()] + # @td.drivers = unavailable_drivers + + # expect{ + # @td.request_trip(1) + # }.must_raise ArgumentError + # end end end From c828095f212272afe5be731d5d45c5a0d8a805d9 Mon Sep 17 00:00:00 2001 From: Catherina Date: Thu, 27 Feb 2020 13:53:26 -0800 Subject: [PATCH 16/17] added test for if no available drivers are available --- lib/trip_dispatcher.rb | 4 ++++ test/trip_dispatch_test.rb | 28 +++++++++++++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lib/trip_dispatcher.rb b/lib/trip_dispatcher.rb index 92fd8552e..190bf3c04 100644 --- a/lib/trip_dispatcher.rb +++ b/lib/trip_dispatcher.rb @@ -31,6 +31,10 @@ def request_trip(passenger_id) |driver| driver.status == :AVAILABLE end + if available_driver == nil + raise ArgumentError.new("No available drivers!") + end + current_passenger = find_passenger(passenger_id) id = trips.length + 1 diff --git a/test/trip_dispatch_test.rb b/test/trip_dispatch_test.rb index a24e6af7c..eba780b37 100644 --- a/test/trip_dispatch_test.rb +++ b/test/trip_dispatch_test.rb @@ -126,7 +126,10 @@ def build_test_dispatcher before do @td = RideShare::TripDispatcher.new - # @td2 = RideShare::TripDispatcher.new(directory: './test/test_data/') + @td_2 = RideShare::TripDispatcher.new( + directory: TEST_DATA_DIRECTORY + ) + end it "passenger_id must be kind of integer" do @@ -144,13 +147,16 @@ def build_test_dispatcher expect(new_trip.driver.status).must_equal :UNAVAILABLE end - # it "raises an error if no drivers are available" do - # all_test_drivers = Driver.load_all(directory: './test/test_data/') - # all_test_drivers.request_trip(1) - # all_test_drivers.request_trip(2) + it "raises an error if no drivers are available" do + @td_2.request_trip(1) + @td_2.request_trip(2) + puts "drivers: #{@td_2.drivers}" + + expect{ + @td_2.request_trip(3) - # expect - # end + }.must_raise ArgumentError + end it "should use the current time for start time" do new_trip = @td.request_trip(2) @@ -191,14 +197,6 @@ def build_test_dispatcher expect(@td.trips.length).must_equal before_new_trip + 1 end - # it "raises an error if there are no available drivers when you request one" do - # unavailable_drivers = [Driver.new()] - # @td.drivers = unavailable_drivers - - # expect{ - # @td.request_trip(1) - # }.must_raise ArgumentError - # end end end From b946ffe60f73d7605e66c31e124c5d3c5600bf6a Mon Sep 17 00:00:00 2001 From: Catherina Date: Fri, 28 Feb 2020 14:17:07 -0800 Subject: [PATCH 17/17] Updated request_trip for wave 4 optional. --- lib/trip_dispatcher.rb | 45 ++++++++++++++++++++++++++++++++------ test/trip_dispatch_test.rb | 28 ++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/lib/trip_dispatcher.rb b/lib/trip_dispatcher.rb index 190bf3c04..64a51c0b2 100644 --- a/lib/trip_dispatcher.rb +++ b/lib/trip_dispatcher.rb @@ -25,16 +25,47 @@ def find_driver(id) Driver.validate_id(id) return @drivers.find { |driver| driver.id == id } end + + def find_available_drivers + available_drivers = @drivers.select do |driver| + driver.status == :AVAILABLE + end - def request_trip(passenger_id) - available_driver = @drivers.find do - |driver| driver.status == :AVAILABLE + return available_drivers + end + + def select_driver(available_drivers) + available_drivers.each do |driver| + if driver.trips.length == 0 + return driver + end + end + + available_drivers.each do |driver| + driver.trips.sort_by! do |trip| + trip.end_time + end end - if available_driver == nil + available_drivers.sort_by! do |driver| + driver.trips.last.end_time + end + + return available_drivers.first + end + + def request_trip(passenger_id) + # Find list of available drivers. + available_drivers = find_available_drivers + + # If no available drivers are found + if available_drivers.length == 0 raise ArgumentError.new("No available drivers!") end + # Find a driver with no trips ever or the oldest trip. + available_driver = select_driver(available_drivers) + current_passenger = find_passenger(passenger_id) id = trips.length + 1 @@ -49,9 +80,9 @@ def request_trip(passenger_id) driver: available_driver ) - available_driver.update_status(new_trip) - current_passenger.add_trip(new_trip) - @trips << new_trip + available_driver.update_status(new_trip) # Updates driver status to unavailable. + current_passenger.add_trip(new_trip) # Adds current trip to current passenger's list of trips. + @trips << new_trip # Adds current trip to list of all trips in system. return new_trip end diff --git a/test/trip_dispatch_test.rb b/test/trip_dispatch_test.rb index eba780b37..035880c8e 100644 --- a/test/trip_dispatch_test.rb +++ b/test/trip_dispatch_test.rb @@ -150,7 +150,6 @@ def build_test_dispatcher it "raises an error if no drivers are available" do @td_2.request_trip(1) @td_2.request_trip(2) - puts "drivers: #{@td_2.drivers}" expect{ @td_2.request_trip(3) @@ -197,6 +196,31 @@ def build_test_dispatcher expect(@td.trips.length).must_equal before_new_trip + 1 end - end + it "find_available_drivers method returns an array of all available drivers with no in-progress" do + expect(@td_2.find_available_drivers).must_be_kind_of Array + expect(@td_2.find_available_drivers.length).must_equal 2 + end + + it "select_drivers prioritizes drivers with no trips" do + available_drivers = @td_2.find_available_drivers + selected_driver = @td_2.select_driver(available_drivers) + expect(selected_driver.trips.length).must_equal 0 + end + it "select_drivers otherwise prioritizes the driver with the oldest trip" do + available_drivers = @td_2.find_available_drivers + available_drivers[1].trips << RideShare::Trip.new( + id: 6, + passenger_id: 5, + start_time: Time.parse("2018-06-10 12:00:00 -0700"), + end_time: Time.parse("2018-06-10 12:10:00 -0700"), + cost: 5, + rating: 1, + driver: available_drivers[1] + ) + + expect(@td_2.select_driver(available_drivers).id).must_equal 3 + expect(@td_2.select_driver(available_drivers).trips[0].end_time).must_equal Time.parse("2018-06-10 12:10:00 -0700") + end + end end