diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 6559b9e..bc47fff 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -1,7 +1,7 @@ class PeopleController < ApplicationController def index - @people = Person.all + @people = Person.includes(:company) end def new @@ -9,17 +9,18 @@ def new end def create - if Person.create(person_attributes) + @person = Person.new(person_attributes) + if @person.save redirect_to people_path, notice: 'Successfully created entry' else - render :create, alert: 'Unsuccessfully created entry' + render :new, alert: 'Unsuccessfully created entry', status: :unprocessable_entity end end private def person_attributes - params.require(:person).permit(:name, :email, :phone) + params.require(:person).permit(:name, :email, :phone_number) end end diff --git a/app/models/person.rb b/app/models/person.rb index f935e46..cea424c 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -14,4 +14,8 @@ class Person < ApplicationRecord belongs_to :company, optional: true + + validates :name, presence: true + validates :phone_number, presence: true + validates :email, presence: true end diff --git a/app/views/people/index.html.slim b/app/views/people/index.html.slim index ddbf52f..5afea0f 100644 --- a/app/views/people/index.html.slim +++ b/app/views/people/index.html.slim @@ -13,7 +13,7 @@ table.table tr th[scope="row"]= person&.id td= person.try(:name) - td= person.try(:phone) + td= person.try(:phone_number) td= person.try(:email) td= person.try(:company).try(:name) diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb index 82220e8..00a4536 100644 --- a/spec/controllers/people_controller_spec.rb +++ b/spec/controllers/people_controller_spec.rb @@ -22,5 +22,9 @@ it 'has status found' do expect(post :create, params: { person: { name: 'foo', phone_number: '123', email: 'foo' } }).to have_http_status(:found) end + + it 'doesn\'t create a user when is missing phone_number' do + expect(post :create, params: { person: { name: 'foo', email: 'foo' } }).to have_http_status(:unprocessable_entity) + end end end diff --git a/spec/factories/companies.rb b/spec/factories/companies.rb new file mode 100644 index 0000000..0752e24 --- /dev/null +++ b/spec/factories/companies.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :company do + name { "Company default" } + end +end diff --git a/spec/factories/people.rb b/spec/factories/people.rb new file mode 100644 index 0000000..4683afa --- /dev/null +++ b/spec/factories/people.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :person do + name { "John Doe" } + email { "john@doe.com" } + phone_number { "9770607060" } + end +end diff --git a/spec/features/people/index_spec.rb b/spec/features/people/index_spec.rb index d9936a9..563ec64 100644 --- a/spec/features/people/index_spec.rb +++ b/spec/features/people/index_spec.rb @@ -2,7 +2,8 @@ RSpec.describe 'Listing people', type: :feature do before do - Person.create( + FactoryBot.create( + :person, name: 'Foo Bar', phone_number: 'Biz', email: 'Baz' diff --git a/spec/views/people/index.html.slim_spec.rb b/spec/views/people/index.html.slim_spec.rb index 7e2d362..82c6015 100644 --- a/spec/views/people/index.html.slim_spec.rb +++ b/spec/views/people/index.html.slim_spec.rb @@ -1,5 +1,17 @@ require "rails_helper" describe "people/index.html.slim" do - it "Displays the users" + let(:company) { FactoryBot.create(:company, name: "Default Company") } + let(:first_person) { FactoryBot.create(:person, phone_number: "Foo", company: company) } + let(:second_person) { FactoryBot.create(:person, name: "Jane Doe", email: "jane@doe.com.br", phone_number: "Bar", company: company) } + it "Displays the users" do + assign(:people, [first_person, second_person]) + render + + expect(rendered).to match(/John/) # name (John) + expect(rendered).to match(/Foo/) # phone number + expect(rendered).to match(/Jane/) # name (Jane) + expect(rendered).to match(/Bar/) # phone number + expect(rendered).to match(/Default Company/) # company name + end end