Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'rails_helper'
- RSpec.describe "UserPages", type: :request do
- subject { page }
- context "signup page" do
- before { visit signup_path }
- it { is_expected.to have_content('Sign up') }
- it { is_expected.to have_title('Sign up') }
- context "invalid registration" do
- before do
- click_button "new account"
- end
- it { expect{ page }.not_to change(User, :count) }
- it { is_expected.to have_content("4 errors") }
- end
- context "valid registration" do
- let!(:new_user) { User.new(email: "email@gmail.com", password: "ruby_lang", password_confirmation: "ruby_lang") }
- before do
- fill_in "Email", with: new_user.email
- fill_in "Password", with: new_user.password
- fill_in "Password confirmation", with: new_user.password_confirmation
- end
- it { expect{ click_button "new account" }.to change(User, :count).by(1) }
- context "after valid registration/sign_in" do
- before { click_button "new account" }
- it { is_expected.to have_title(new_user.email) }
- context "edit" do
- let!(:user) { create :user }
- let!(:user_email) { user.email }
- before do
- valid_signin(user)
- visit edit_user_path(user)
- end
- it { is_expected.to have_title("Edit #{user.email}") }
- it { is_expected.to have_button("Save changes") }
- xit { expect(page).to have_css("input", value: "#{user.email}") }
- it { is_expected.to have_selector("input[placeholder='Change email']") }
- it { is_expected.to have_selector("input[placeholder='Change password']") }
- it { is_expected.to have_selector("input[placeholder='Password confirmation']") }
- context "valid" do
- before do
- fill_in "Change email", with: "good_email@gmail.com"
- fill_in "Change password", with: "gendalf"
- fill_in "Password confirmation", with: "gendalf"
- click_button "Save changes"
- end
- it { is_expected.to have_title("Home") }
- it { is_expected.to have_content("User updated") }
- it { expect(User.exists?(email: "good_email@gmail.com")).to be(true) }
- it { expect(User.exists?(email: "#{user.email}")).to be(false) }
- end
- context "invalid" do
- before { click_button "Save changes" }
- it { is_expected.to have_selector(".alert-error") }
- it { is_expected.to have_title("Edit #{user.email}")}
- end
- end
- context "create project" do
- let!(:user) { User.create!(email: "shmendalf@gmail.com", password: "ruby_lang", password_confirmation: "ruby_lang") }
- before do
- valid_signin(user)
- visit user_path(user)
- end
- context "success" do
- before { fill_in "Create project", with: "my second project" }
- it { expect{ click_button "new project" }.to change(user.projects, :count).by(1) }
- it { expect{ click_button "new project" }.to change(Project, :count).by(1) }
- context "show success message" do
- before { click_button "new project" }
- it { is_expected.to have_content("project created") }
- end
- end
- context "show unsuccess message" do
- before { click_button "new project" }
- it { expect{ click_button "new project" }.to change(user.projects, :count).by(0) }
- it { expect{ click_button "new project" }.to change(Project, :count).by(0) }
- it { is_expected.to have_content("project not created") }
- end
- end
- end
- end
- end
- context "after sign in" do
- let!(:usr) { create :user }
- let!(:prj) { create :project, user: usr }
- before { valid_signin(usr) }
- context "update project" do
- before { visit user_path(usr) }
- context "valid" do
- before do
- fill_in "Update project", with: "Dance"
- click_button "Save"
- end
- it { is_expected.to have_content("Dance") }
- it { expect( usr.projects.find(prj.id).name).to eq("Dance") }
- it { expect( Project.find_by_name("My first project")).to be(nil) }
- end
- context "invalid" do
- before do
- fill_in "Update project", with: ""
- click_button "Save"
- end
- it { is_expected.to have_content("Project not updated") }
- end
- end
- context "delete" do
- before { visit user_path(usr) }
- it do
- expect{ click_link "delete" }.to change(usr.projects, :count).by(-1)
- is_expected.to have_content("Project deleted.")
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement