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