Browse Source

Merge branch 'main' into CLDC-776/TextAreaQuestionType

pull/156/head
Matthew Phelan 3 years ago
parent
commit
14374f1407
  1. 2
      app/admin/admin_users.rb
  2. 2
      app/admin/users.rb
  3. 6
      app/controllers/auth/passwords_controller.rb
  4. 31
      app/views/users/reset_password.html.erb
  5. 2
      app/views/users/show.html.erb
  6. 2
      config/environments/production.rb
  7. 2
      config/environments/sandbox.rb
  8. 7
      spec/features/user_spec.rb
  9. 31
      spec/requests/auth/passwords_controller_spec.rb
  10. 8
      spec/requests/user_controller_spec.rb

2
app/admin/admin_users.rb

@ -3,7 +3,7 @@ ActiveAdmin.register AdminUser do
controller do
def update_resource(object, attributes)
update_method = attributes.first[:password].present? ? :update_attributes : :update_without_password
update_method = attributes.first[:password].present? ? :update : :update_without_password
object.send(update_method, *attributes)
end
end

2
app/admin/users.rb

@ -3,7 +3,7 @@ ActiveAdmin.register User do
controller do
def update_resource(object, attributes)
update_method = attributes.first[:password].present? ? :update_attributes : :update_without_password
update_method = attributes.first[:password].present? ? :update : :update_without_password
object.send(update_method, *attributes)
end
end

6
app/controllers/auth/passwords_controller.rb

@ -11,7 +11,6 @@ class Auth::PasswordsController < Devise::PasswordsController
resource.errors.add :email, "Enter an email address in the correct format, like name@example.com"
render "devise/passwords/new", status: :unprocessable_entity
else
flash[:notice] = "Reset password instructions have been sent to #{@email}"
render "devise/confirmations/reset"
end
end
@ -23,6 +22,11 @@ class Auth::PasswordsController < Devise::PasswordsController
respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name))
end
def edit
super
render "users/reset_password"
end
protected
def after_sending_reset_password_instructions_path_for(_resource)

31
app/views/users/reset_password.html.erb

@ -0,0 +1,31 @@
<% content_for :title, "Reset your password" %>
<% content_for :before_content do %>
<%= govuk_back_link(
text: 'Back',
href: :back,
) %>
<% end %>
<%= form_for(@user, as: :user, url: password_path(User), html: { method: :put }) do |f| %>
<%= f.hidden_field :reset_password_token %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<h1 class="govuk-heading-l">
<%= content_for(:title) %>
</h1>
<%= f.govuk_password_field :password,
label: { text: "New password" },
hint: @minimum_password_length ? { text: "Your password must be at least #{@minimum_password_length} characters and hard to guess." } : nil,
autocomplete: "new-password"
%>
<%= f.govuk_password_field :password_confirmation,
label: { text: "Confirm new password" }
%>
<%= f.govuk_submit "Update" %>
</div>
</div>
<% end %>

2
app/views/users/show.html.erb

@ -31,7 +31,7 @@
<%= summary_list.row do |row|
row.key { 'Organisation' }
row.value { current_user.organisation }
row.value { current_user.organisation.name }
row.action()
end %>

2
config/environments/production.rb

@ -58,7 +58,7 @@ Rails.application.configure do
config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = { host: ENV["APP_HOST"], port: 3000 }
config.action_mailer.default_url_options = { host: ENV["APP_HOST"] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",

2
config/environments/sandbox.rb

@ -58,7 +58,7 @@ Rails.application.configure do
config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = { host: ENV["APP_HOST"], port: 3000 }
config.action_mailer.default_url_options = { host: ENV["APP_HOST"] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",

7
spec/features/user_spec.rb

@ -72,13 +72,6 @@ RSpec.describe "User Features" do
fill_in("user[email]", with: user.email)
expect { click_button("Send email") }.to change { ActionMailer::Base.deliveries.count }.by(1)
end
it " is shown the password reset confirmation page and successful flash message shows" do
visit("/users/password/new")
fill_in("user[email]", with: user.email)
click_button("Send email")
expect(page).to have_css ".govuk-notification-banner.govuk-notification-banner--success"
end
end
context "If user not logged in" do

31
spec/requests/auth/passwords_controller_spec.rb

@ -3,12 +3,13 @@ require_relative "../../support/devise"
RSpec.describe Auth::PasswordsController, type: :request do
let(:params) { { user: { email: email } } }
let(:page) { Capybara::Node::Simple.new(response.body) }
context "when a password reset is requested for a valid email" do
let(:user) { FactoryBot.create(:user) }
let(:email) { user.email }
it "redirects to the email sent page anyway" do
it "redirects to the email sent page" do
post "/users/password", params: params
expect(response).to have_http_status(:redirect)
follow_redirect!
@ -43,4 +44,32 @@ RSpec.describe Auth::PasswordsController, type: :request do
expect(email_content).to match(email)
end
end
context "#Update - reset password" do
let(:user) { FactoryBot.create(:user) }
let(:token) { user.send(:set_reset_password_token) }
let(:updated_password) { "updated_password_280" }
let(:update_password_params) do
{
user:
{
reset_password_token: token,
password: updated_password,
password_confirmation: updated_password,
},
}
end
let(:message) { "Your password has been changed successfully. You are now signed in" }
it "changes the password" do
expect { put "/users/password", params: update_password_params }
.to(change { user.reload.encrypted_password })
end
it "signs in" do
put "/users/password", params: update_password_params
follow_redirect!
expect(page).to have_css("div", class: "govuk-notification-banner__heading", text: message)
end
end
end

8
spec/requests/user_controller_spec.rb

@ -37,6 +37,14 @@ RSpec.describe UsersController, type: :request do
expect(response).to redirect_to("/users/sign-in")
end
end
describe "reset password" do
it "renders the user edit password view" do
_raw, enc = Devise.token_generator.generate(User, :reset_password_token)
get "/users/password/edit?reset_password_token=#{enc}"
expect(page).to have_css("h1", class: "govuk-heading-l", text: "Reset your password")
end
end
end
describe "#show" do

Loading…
Cancel
Save