9 changed files with 124 additions and 25 deletions
@ -0,0 +1,49 @@ |
|||||||
|
class DeviseNotifyMailer < Devise::Mailer |
||||||
|
require "notifications/client" |
||||||
|
|
||||||
|
RESET_PASSWORD_TEMPLATE_ID = "4593417c-500f-452c-8111-0f9d311aad0e".freeze |
||||||
|
SET_PASSWORD_TEMPLATE_ID = "00cd7163-4213-4596-b4f9-9e72796e0d76".freeze |
||||||
|
|
||||||
|
def notify_client |
||||||
|
@notify_client ||= ::Notifications::Client.new(ENV["GOVUK_NOTIFY_API_KEY"]) |
||||||
|
end |
||||||
|
|
||||||
|
def host |
||||||
|
@host ||= ENV["APP_HOST"] |
||||||
|
end |
||||||
|
|
||||||
|
def send_email(email, template_id, personalisation) |
||||||
|
notify_client.send_email( |
||||||
|
email_address: email, |
||||||
|
template_id: template_id, |
||||||
|
personalisation: personalisation, |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def reset_password_instructions(record, token, _opts = {}) |
||||||
|
template_id = record.last_sign_in_at ? RESET_PASSWORD_TEMPLATE_ID : SET_PASSWORD_TEMPLATE_ID |
||||||
|
personalisation = { |
||||||
|
name: record.name, |
||||||
|
email: record.email, |
||||||
|
organisation: record.organisation.name, |
||||||
|
link: "https://#{host}/users/password/edit?reset_password_token=#{token}", |
||||||
|
} |
||||||
|
send_email(record.email, template_id, personalisation) |
||||||
|
end |
||||||
|
|
||||||
|
# def confirmation_instructions(record, token, _opts = {}) |
||||||
|
# super |
||||||
|
# end |
||||||
|
# |
||||||
|
# def unlock_instructions(record, token, opts = {}) |
||||||
|
# super |
||||||
|
# end |
||||||
|
# |
||||||
|
# def email_changed(record, opts = {}) |
||||||
|
# super |
||||||
|
# end |
||||||
|
# |
||||||
|
# def password_change(record, opts = {}) |
||||||
|
# super |
||||||
|
# end |
||||||
|
end |
@ -1,12 +1,18 @@ |
|||||||
require "rails_helper" |
require "rails_helper" |
||||||
|
|
||||||
RSpec.describe "password_reset", type: :request do |
RSpec.describe UsersController, type: :request do |
||||||
let(:user) { FactoryBot.create(:user) } |
let(:user) { FactoryBot.create(:user) } |
||||||
let(:unauthorised_user) { FactoryBot.create(:user) } |
let(:unauthorised_user) { FactoryBot.create(:user) } |
||||||
let(:headers) { { "Accept" => "text/html" } } |
let(:headers) { { "Accept" => "text/html" } } |
||||||
let(:page) { Capybara::Node::Simple.new(response.body) } |
let(:page) { Capybara::Node::Simple.new(response.body) } |
||||||
let(:new_value) { "new test name" } |
let(:new_value) { "new test name" } |
||||||
let(:params) { { id: user.id, user: { name: new_value } } } |
let(:params) { { id: user.id, user: { name: new_value } } } |
||||||
|
let(:notify_client) { double(Notifications::Client) } |
||||||
|
|
||||||
|
before do |
||||||
|
allow_any_instance_of(DeviseNotifyMailer).to receive(:notify_client).and_return(notify_client) |
||||||
|
allow(notify_client).to receive(:send_email).and_return(true) |
||||||
|
end |
||||||
|
|
||||||
context "a not signed in user" do |
context "a not signed in user" do |
||||||
describe "#show" do |
describe "#show" do |
Loading…
Reference in new issue