Improve controller tests

This commit is contained in:
Matt-Yorkley
2022-01-21 20:37:49 +00:00
parent 794e0e0326
commit 8b59ef20db
4 changed files with 49 additions and 32 deletions

View File

@@ -26,7 +26,7 @@ class UserPasswordsController < Spree::UserPasswordsController
private
def render_unconfirmed_response
render status: :unauthorized, operations: cable_car.inner_html(
render status: :unprocessable_entity, operations: cable_car.inner_html(
"#forgot-feedback",
partial("layouts/alert",
locals: { type: "alert", message: t(:email_unconfirmed), unconfirmed: true })

View File

@@ -10,12 +10,13 @@ describe Spree::UserSessionsController, type: :controller do
end
describe "create" do
context "succeed" do
context "success" do
context "when referer is not '/checkout'" do
it "redirects to root" do
spree_post :create, spree_user: { email: user.email, password: user.password },
use_route: :spree
expect(response).to redirect_to root_path
spree_post :create, spree_user: { email: user.email, password: user.password }
expect(response).to have_http_status(:ok)
expect(response.body).to match(root_path).and match("redirect")
end
end
@@ -23,12 +24,24 @@ describe Spree::UserSessionsController, type: :controller do
before { @request.env['HTTP_REFERER'] = 'http://test.com/checkout' }
it "redirects to checkout" do
spree_post :create, spree_user: { email: user.email, password: user.password },
use_route: :spree
expect(response).to redirect_to checkout_path
spree_post :create, spree_user: { email: user.email, password: user.password }
expect(response).to have_http_status(:ok)
expect(response.body).to match(checkout_path).and match("redirect")
end
end
end
context "failing to log in" do
render_views
it "returns an error" do
spree_post :create, spree_user: { email: user.email, password: "wrong" }
expect(response).to have_http_status(:unauthorized)
expect(response.body).to include "Invalid email or password"
end
end
end
describe "destroy" do

View File

@@ -3,7 +3,7 @@
require 'spec_helper'
describe UserPasswordsController, type: :controller do
include OpenFoodNetwork::EmailHelper
render_views
let(:user) { create(:user) }
let(:unconfirmed_user) { create(:user, confirmed_at: nil) }
@@ -13,15 +13,22 @@ describe UserPasswordsController, type: :controller do
end
describe "create" do
it "returns errors" do
spree_post :create, spree_user: {}
expect(response.status).to eq 200
expect(response).to render_template "spree/user_passwords/new"
it "returns 404 if user is not found" do
spree_post :create, spree_user: { email: "xxxxxxxxxx@example.com" }
expect(response.status).to eq 404
expect(response.body).to match I18n.t(:email_not_found)
end
it "redirects to login when data is valid" do
it "returns 422 if user is registered but not confirmed" do
spree_post :create, spree_user: { email: unconfirmed_user.email }
expect(response.status).to eq 422
expect(response.body).to match I18n.t(:email_unconfirmed)
end
it "returns 200 when password reset was successful" do
spree_post :create, spree_user: { email: user.email }
expect(response).to be_redirect
expect(response.status).to eq 200
expect(response.body).to match I18n.t(:password_reset_sent)
end
end
@@ -35,8 +42,6 @@ describe UserPasswordsController, type: :controller do
end
it "renders Darkswarm" do
setup_email
user.send_reset_password_instructions
user.reload
@@ -44,19 +49,4 @@ describe UserPasswordsController, type: :controller do
expect(response).to render_template "user_passwords/edit"
end
describe "via ajax" do
it "returns error when email not found" do
post :create, xhr: true, params: { spree_user: {}, use_route: :spree }
expect(response.status).to eq 404
expect(json_response).to eq 'error' => I18n.t('email_not_found')
end
it "returns error when user is unconfirmed" do
post :create, xhr: true,
params: { spree_user: { email: unconfirmed_user.email }, use_route: :spree }
expect(response.status).to eq 401
expect(json_response).to eq 'error' => I18n.t('email_unconfirmed')
end
end
end

View File

@@ -29,6 +29,20 @@ describe "User password confirm/reset page" do
expect(page).to have_no_text "Reset password token has expired"
expect(page).to be_logged_in_as user
end
it "shows an error if password is empty" do
visit spree.spree_user_confirmation_path(confirmation_token: user.confirmation_token)
expect(user.reload.confirmed?).to be true
expect(page).to have_text I18n.t(:change_my_password)
fill_in "Password", with: ""
fill_in "Password Confirmation", with: ""
click_button
expect(page).to have_text "User password cannot be blank. Please enter a password."
expect(page).to_not be_logged_in_as user
end
end
describe "can reset its own password" do