diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 6559b9e..47525ab 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -9,17 +9,22 @@ 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' + respond_to do |format| + format.turbo_stream { render turbo_stream: turbo_stream.replace(@person, partial: 'people/form', locals: { person: @person }) } + format.html { render :new } + end 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..019e482 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -14,4 +14,6 @@ class Person < ApplicationRecord belongs_to :company, optional: true + + validates :name, presence: true end diff --git a/app/views/people/_form.html.slim b/app/views/people/_form.html.slim new file mode 100644 index 0000000..67770e1 --- /dev/null +++ b/app/views/people/_form.html.slim @@ -0,0 +1,17 @@ += form_for @person, class: 'row' do |f| + - if @person.errors.any? + .errors.alert-danger.mt-3 + ul + - @person.errors.full_messages.each do |message| + li= message + .col-auto + = f.label :name, class: 'form-label' + = f.text_field :name, class: 'form-control' + .col-auto + = f.label :phone_number, class: 'form-label' + = f.text_field :phone_number, class: 'form-control' + .col-auto + = f.label :email, class: 'form-label' + = f.text_field :email, class: 'form-control' + .col-auto.mt-4 + = f.submit class: 'btn btn-primary' diff --git a/app/views/people/new.html.slim b/app/views/people/new.html.slim index 40bc446..81803b1 100644 --- a/app/views/people/new.html.slim +++ b/app/views/people/new.html.slim @@ -1,14 +1,3 @@ h2 Creating an entry -= form_for @person, class: 'row' do |f| - .col-auto - = f.label :name, class: 'form-label' - = f.text_field :name, class: 'form-control' - .col-auto - = f.label :phone_number, class: 'form-label' - = f.text_field :phone_number, class: 'form-control' - .col-auto - = f.label :email, class: 'form-label' - = f.text_field :email, class: 'form-control' - .col-auto.mt-4 - = f.submit class: 'btn btn-primary' += render 'form', person: @person diff --git a/spec/features/people/new_spec.rb b/spec/features/people/new_spec.rb new file mode 100644 index 0000000..33aed32 --- /dev/null +++ b/spec/features/people/new_spec.rb @@ -0,0 +1,25 @@ +require "rails_helper" + +RSpec.feature "Create Person", type: :feature do + scenario "User creates a person successfully" do + visit new_person_path + + fill_in "Name", with: "Esteban" + fill_in "Phone number", with: "1234567890" + fill_in "Email", with: "esteban@example.com" + + click_button "Create Person" + expect(page).to have_content("Esteban") + end + + scenario "User fails to create a person" do + visit new_person_path + + fill_in "Name", with: "" + fill_in "Phone number", with: "" + fill_in "Email", with: "" + click_button "Create Person" + + expect(page).to have_content("Name can't be blank") + end +end