Skip to content

Commit

Permalink
set magic_link in email
Browse files Browse the repository at this point in the history
  • Loading branch information
alkesh committed Aug 5, 2024
1 parent 6619c25 commit 32ee695
Show file tree
Hide file tree
Showing 11 changed files with 47 additions and 32 deletions.
2 changes: 2 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
CANONICAL_HOSTNAME=localhost:3000

DFE_SIGN_IN_ISSUER=https://pp-oidc.signin.education.gov.uk:443
DFE_SIGN_IN_REDIRECT_BASE_URL=https://localhost:3000
DFE_SIGN_IN_IDENTIFIER=teacherpayments
Expand Down
2 changes: 2 additions & 0 deletions .env.test
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
CANONICAL_HOSTNAME=www.example.com

DFE_SIGN_IN_API_CLIENT_ID=teacherpayments
DFE_SIGN_IN_API_SECRET=secret
DFE_SIGN_IN_API_ENDPOINT=https://example.com
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/claims_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def check_page_is_in_sequence

def handle_magic_link
otp = OneTimePassword::Validator.new(params[:code], answers.sent_one_time_password_at)
if otp.valid?
if otp.valid? # && EligibleEyProvider.eligible_email?(journey_session.answers.email_address) # TODO eligible check once model merged: https://github.com/DFE-Digital/claim-additional-payments-for-teaching/pull/3050
journey_session.answers.assign_attributes(email_verified: true)
journey_session.save!
session[:slugs] << page_sequence.next_required_slug
Expand Down
11 changes: 7 additions & 4 deletions app/mailers/claim_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,9 @@ def email_verification(claim, one_time_password)
def early_years_payment_provider_email(claim, one_time_password)
unknown_policy_check(claim)
set_common_instance_variables(claim)
@subject = @claim_subject
@one_time_password = one_time_password
@magic_link = early_years_payment_provider_magic_link(one_time_password)
personalisation = {
email_subject: @subject,
one_time_password: @one_time_password
magic_link: @magic_link
}

send_mail(template_ids(claim)[:CLAIM_PROVIDER_EMAIL_TEMPLATE_ID], personalisation)
Expand Down Expand Up @@ -120,4 +118,9 @@ def unknown_policy_check(claim)
].include?(claim.policy)
raise ArgumentError, "Unknown claim policy: #{claim.policy}"
end

def early_years_payment_provider_magic_link(one_time_password)
slug = Journeys::PageSequence::EARLY_YEARS_PAYMENT_PROVIDER_EMAIL_SLUG
"https://#{ENV["CANONICAL_HOSTNAME"]}/#{Journeys::EarlyYearsPayment::Provider::ROUTING_NAME}/#{slug}?code=#{one_time_password}"
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ class SlugSequence
current-nursery
].freeze

MAGIC_LINK_SLUG = "consent"

def self.start_page_url
Rails.application.routes.url_helpers.landing_page_path("early-years-payment-provider")
end
Expand All @@ -24,6 +26,10 @@ def initialize(journey_session)
def slugs
SLUGS
end

def magic_link?(slug)
slug == MAGIC_LINK_SLUG
end
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions app/models/journeys/page_sequence.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ module Journeys
class PageSequence
attr_reader :current_slug

EARLY_YEARS_PAYMENT_PROVIDER_EMAIL_SLUG = "consent"
DEAD_END_SLUGS = %w[complete existing-session eligible-later future-eligibility ineligible]
OPTIONAL_SLUGS = %w[postcode-search select-home-address reset-claim]
MAGIC_LINK_SLUGS = %w[consent]

def initialize(slug_sequence, completed_slugs, current_slug, journey_session)
@current_slug = current_slug
Expand Down Expand Up @@ -63,7 +63,7 @@ def next_required_slug
end

def magic_link?
MAGIC_LINK_SLUGS.include?(current_slug)
@slug_sequence.respond_to?(:magic_link?) && @slug_sequence.magic_link?(current_slug)
end

private
Expand Down
6 changes: 3 additions & 3 deletions spec/features/early_years_payment/provider/happy_path_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
RSpec.feature "Early years payment provider" do
let(:journey_session) { Journeys::EarlyYearsPayment::Provider::Session.last }
let(:mail) { ActionMailer::Base.deliveries.last }
let(:otp) { mail[:personalisation].unparsed_value[:one_time_password] }
let(:magic_link) { mail[:personalisation].unparsed_value[:magic_link] }

scenario "happy path claim" do
when_early_years_payment_provider_journey_configuration_exists
Expand All @@ -24,9 +24,9 @@
expect(page).to have_content("We have sent an email to [email protected]")

expect(mail.to).to eq ["[email protected]"]
expect(otp).to match(/\A\d{6}\Z/)
expect(magic_link).to match(/\?code=\d{6}\Z/)

visit claim_path(Journeys::EarlyYearsPayment::Provider::ROUTING_NAME, :consent, code: otp)
visit magic_link
expect(journey_session.reload.answers.email_verified).to be true
expect(page).to have_content("Declaration of Employee Consent")
check "I confirm that I have obtained consent from my employee and have provided them with the relevant privacy notice."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@

let(:policy) { journey_session.answers.policy }
let(:claim_subject) { I18n.t("#{policy.locale_key}.claim_subject") }
let(:email_subject) { claim_subject }

it { should be_truthy }

Expand All @@ -47,8 +46,7 @@

expect(email_address).to have_received_email(
"e0b78a08-601b-40ba-a97f-61fb00a7c951",
email_subject: email_subject,
one_time_password: "111111"
magic_link: "https://www.example.com/early-years-payment-provider/consent?code=111111"
)
end

Expand Down
5 changes: 2 additions & 3 deletions spec/mailers/claim_mailer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -352,9 +352,8 @@ class SomePolicy; end

before { create(:journey_configuration, :early_years_payment_provider) }

it "has personalisation keys for: one time password" do
# TODO find correct email subject. Is subject used? or overriden on notify template?
expect(mail[:personalisation].decoded).to eq("{:email_subject=>\"Early Years Payment\", :one_time_password=>123124}")
it "has personalisation keys for: magic link" do
expect(mail[:personalisation].decoded).to eq("{:magic_link=>\"https://#{ENV["CANONICAL_HOSTNAME"]}/early-years-payment-provider/consent?code=123124\"}")
expect(mail.body).to be_empty
end
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require "rails_helper"

describe Journeys::EarlyYearsPayment::Provider::SlugSequence do
let(:journey_session) { create(:early_years_payment_provider_session) }

describe "#magic_link?" do
subject { described_class.new(journey_session).magic_link?(slug) }

context "when the current slug is not a magic link" do
let(:slug) { "whatever" }

it { is_expected.to be false }
end

context "when the current slug is not a magic link" do
let(:slug) { "consent" }

it { is_expected.to be true }
end
end
end
16 changes: 0 additions & 16 deletions spec/models/journeys/page_sequence_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -219,20 +219,4 @@
expect(page_sequence.next_required_slug).to eq("second-slug")
end
end

describe "#magic_link?" do
subject { page_sequence.magic_link? }

context "when the current slug is not a magic link" do
let(:current_slug) { "whatever" }

it { is_expected.to be false }
end

context "when the current slug is not a magic link" do
let(:current_slug) { "consent" }

it { is_expected.to be true }
end
end
end

0 comments on commit 32ee695

Please sign in to comment.