diff --git a/app/controllers/cars_controller.rb b/app/controllers/cars_controller.rb
index 1d0fbbe..077b18a 100644
--- a/app/controllers/cars_controller.rb
+++ b/app/controllers/cars_controller.rb
@@ -1,4 +1,9 @@
class CarsController < ApplicationController
+
+ def index
+ @cars = Car.all
+ end
+
def new
@car = Car.new
@car_models = CarModel.all
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index 8538ef2..6820db2 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -1,6 +1,8 @@
class HomeController < ApplicationController
+
def index
- @cars = Car.all
+ @available_cars = Car.last_available_cars
@cars_on_maintenance = Car.where(status: :on_maintenance).first(10)
+ @all_cars = Car.all - @available_cars - @cars_on_maintenance
end
end
diff --git a/app/models/car.rb b/app/models/car.rb
index a586859..68abbdd 100644
--- a/app/models/car.rb
+++ b/app/models/car.rb
@@ -21,6 +21,10 @@ def current_maintenance
maintenances.last if on_maintenance?
end
+ def self.last_available_cars
+ where(status: :available).order(:updated_at).last(10)
+ end
+
def car_km_can_not_be_less_than_actual
if car_km < car_km_was
errors.add(:car_km, 'Quilometragem não pode ser menor que a atual')
diff --git a/app/views/cars/_car.html.erb b/app/views/cars/_car.html.erb
index 95f9b44..e882aac 100644
--- a/app/views/cars/_car.html.erb
+++ b/app/views/cars/_car.html.erb
@@ -1,13 +1,7 @@
-
Detalhes do Veículo
-
- - Modelo do Veículo
- - <%= car.car_model.name %>
- - Placa
- - <%= car.license_plate %>
- - Ano
- - <%= car.car_model.year%>
- - Cor
- - <%= car.color %>
-
- Informaçōes complementares sobre o veículo
- - <%= car.car_model.car_options %>
-
\ No newline at end of file
+
+
+ Modelo do Veículo
+
<%= link_to car.car_identification, car %>
+ <%= link_to "Ver detalhes", car %>
+
+
diff --git a/app/views/cars/index.html.erb b/app/views/cars/index.html.erb
new file mode 100644
index 0000000..d8ba298
--- /dev/null
+++ b/app/views/cars/index.html.erb
@@ -0,0 +1 @@
+ <%= render @cars %>
\ No newline at end of file
diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb
index 830031e..0e99708 100644
--- a/app/views/home/index.html.erb
+++ b/app/views/home/index.html.erb
@@ -1,7 +1,10 @@
-<% @cars.each do |car|%>
- <%= link_to "#{car.car_model.name} - #{car.license_plate}", car %>
-<% end %>
-
+Últimos carros disponíveis
+
+ <%= render @available_cars %>
+
+ <%= link_to 'Ver todos disponíveis', cars_path, class: "btn btn-info float-right" %>
+Todos os carros
+<%= render @all_cars %>
Carros em manutenção
@@ -14,4 +17,3 @@
<% end %>
<%= link_to "Ver todos os carros em manutenção", maintenances_path %>
-
diff --git a/config/routes.rb b/config/routes.rb
index f6eca58..6002c9e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -10,7 +10,7 @@
end
end
resources :subsidiary_car_models, only: %i[show new create]
- resources :cars, only: %i[show new create] do
+ resources :cars, only: %i[index show new create] do
resources :fines, only: %i[show new create]
resources :maintenances, only: %i[show new create edit update]
resources :inspections, only: %i[ new create]
diff --git a/db/schema.rb b/db/schema.rb
index a324278..f7a1607 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -42,8 +42,8 @@
t.datetime "updated_at", null: false
t.string "license_plate"
t.string "color"
- t.integer "subsidiary_id"
t.integer "status", default: 0
+ t.integer "subsidiary_id"
t.index ["car_model_id"], name: "index_cars_on_car_model_id"
t.index ["subsidiary_id"], name: "index_cars_on_subsidiary_id"
end
@@ -110,9 +110,8 @@
t.integer "customer_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.datetime "start_at"
- t.datetime "finish_at"
t.datetime "finished_at"
+ t.datetime "start_at"
t.index ["car_id"], name: "index_rentals_on_car_id"
t.index ["customer_id"], name: "index_rentals_on_customer_id"
t.index ["user_id"], name: "index_rentals_on_user_id"
diff --git a/spec/factories/car_models.rb b/spec/factories/car_models.rb
index 836daff..3a6276f 100644
--- a/spec/factories/car_models.rb
+++ b/spec/factories/car_models.rb
@@ -1,8 +1,8 @@
FactoryBot.define do
factory :car_model do
name { Faker::Vehicle.make_and_model }
- year { "2008" }
+ year { Faker::Vehicle.year }
manufacture
- car_options { "3 portas" }
+ car_options { Faker::Color.color_name }
end
end
diff --git a/spec/factories/manufactures.rb b/spec/factories/manufactures.rb
index 19ed1ef..1023f2a 100644
--- a/spec/factories/manufactures.rb
+++ b/spec/factories/manufactures.rb
@@ -1,5 +1,5 @@
FactoryBot.define do
factory :manufacture do
- name { Faker::Vehicle.manufacture }
+ name { Faker::Company.name }
end
end
diff --git a/spec/features/admin/admin_view_cars_in_home_spec.rb b/spec/features/admin/admin_view_cars_in_home_spec.rb
new file mode 100644
index 0000000..87fe055
--- /dev/null
+++ b/spec/features/admin/admin_view_cars_in_home_spec.rb
@@ -0,0 +1,43 @@
+require 'rails_helper'
+
+feature 'List available cars in home' do
+
+ scenario 'successfully' do
+
+ #arrange
+ user = create(:user)
+ login_as(user)
+
+ create_list(:car, 10, status: :available, car_model: create(:car_model, name: 'Palio'))
+ create_list(:car, 5, status: :available, car_model: create(:car_model, name: 'X1'))
+
+ #act
+ visit root_path
+
+ #assert
+ within("div.last-available-cars") do
+ expect(page).to have_content('X1', count: 5)
+ expect(page).to have_content('Palio', count: 5)
+ expect(page).not_to have_content('Palio', count: 10)
+ end
+
+
+ end
+
+ scenario 'has an option to view all cars' do
+
+ user = create(:user)
+ login_as(user)
+
+ create_list(:car, 10, car_model: create(:car_model, name: 'Palio'))
+ create_list(:car, 5, car_model: create(:car_model, name: 'X1'))
+
+ visit root_path
+ click_on "Ver todos disponíveis"
+
+ expect(current_path).to eq cars_path
+ expect(page).to have_content('X1', count: 5)
+ expect(page).to have_content('Palio', count: 10)
+
+ end
+end
\ No newline at end of file
diff --git a/spec/models/car_spec.rb b/spec/models/car_spec.rb
new file mode 100644
index 0000000..ae7d514
--- /dev/null
+++ b/spec/models/car_spec.rb
@@ -0,0 +1,16 @@
+require 'rails_helper'
+
+RSpec.describe Car, type: :model do
+
+ describe "#last_available_cars" do
+
+ it "should list only available cars" do
+
+ create_list(:car, 5, status: :available, car_model: create(:car_model, name: 'Palio'))
+ create_list(:car, 5, status: :on_maintenance, car_model: create(:car_model, name: 'Palio'))
+
+ cars = Car.last_available_cars
+ expect(cars.select{|car| car[:status] == 'available' }.size).to eq 5
+ end
+ end
+end