diff --git a/apps/lenra/lib/lenra/services/email_services.ex b/apps/lenra/lib/lenra/services/email_services.ex index c50b72f0..f4ce0155 100644 --- a/apps/lenra/lib/lenra/services/email_services.ex +++ b/apps/lenra/lib/lenra/services/email_services.ex @@ -2,21 +2,42 @@ defmodule Lenra.EmailService do @moduledoc false import Bamboo.Email + alias Bamboo.SendGridHelper - def welcome_text_email(email_address, code) do + @spec create_welcome_email(String.t(), String.t()) :: Bamboo.Email.t() + def create_welcome_email(email_address, code) do # base template ID : d-bd160809d9a04b07ac6925a823f8f61c new_email() |> to(email_address) - |> from("subscription@lenra.me") - |> subject("Bienvenue!") - |> text_body("Bienvenue chez Lenra " <> email_address <> " ! " <> "Votre code: " <> code) + |> from("no-reply@lenra.io") + |> SendGridHelper.with_template("d-bd160809d9a04b07ac6925a823f8f61c") + |> SendGridHelper.add_dynamic_field("subject", "Bienvenue !") + |> SendGridHelper.add_dynamic_field( + "body_hello", + "Bonjour " <> email_address <> ",
Merci pour votre inscription! Vous rejoignez une communauté incroyable" + ) + |> SendGridHelper.add_dynamic_field("code", code) + |> SendGridHelper.add_dynamic_field( + "body_help", + "Ce code vous permet de valider votre inscription.
Si vous rencontrez un problème contactez-nous à l'adresse mail suivante : contact@lenra.io" + ) end - def recovery_email(email_address, code) do + @spec create_recovery_email(String.t(), String.t()) :: Bamboo.Email.t() + def create_recovery_email(email_address, code) do new_email() |> to(email_address) - |> from("verification@lenra.me") - |> subject("Votre code de vérification!") - |> text_body("Bonjour " <> email_address <> " ! " <> "Votre code: " <> code) + |> from("no-reply@lenra.io") + |> SendGridHelper.with_template("d-bd160809d9a04b07ac6925a823f8f61c") + |> SendGridHelper.add_dynamic_field("subject", "Votre code de vérification") + |> SendGridHelper.add_dynamic_field( + "body_hello", + "Bonjour " <> email_address <> ",
Modifiez votre mot de passe à l'aide du code suivant" + ) + |> SendGridHelper.add_dynamic_field("code", code) + |> SendGridHelper.add_dynamic_field( + "body_help", + "Ce code vous permet de modifier votre mot de passe.
Si vous rencontrez un problème contactez-nous à l'adresse mail suivante : contact@lenra.io" + ) end end diff --git a/apps/lenra/lib/lenra/services/user_services.ex b/apps/lenra/lib/lenra/services/user_services.ex index b12a972a..585f3f9b 100644 --- a/apps/lenra/lib/lenra/services/user_services.ex +++ b/apps/lenra/lib/lenra/services/user_services.ex @@ -4,7 +4,7 @@ defmodule Lenra.UserServices do """ import Ecto.Query, only: [from: 2] - alias Lenra.{Repo, User, Password, DevCode, RegistrationCodeServices} + alias Lenra.{Repo, User, Password, DevCode, RegistrationCodeServices, EmailWorker} @doc """ Register a new user, save him to the database. The email must be unique. The password is hashed before inserted to the database. @@ -25,8 +25,7 @@ defmodule Lenra.UserServices do RegistrationCodeServices.registration_code_changeset(user) end ) - # send verification email disabled - # |> Ecto.Multi.run(:add_event, &add_registration_events/2) + |> Ecto.Multi.run(:add_event, &add_registration_events/2) |> Repo.transaction() end @@ -34,13 +33,12 @@ defmodule Lenra.UserServices do Repo.get(User, id) end - # send verification email disabled - # defp add_registration_events(_repo, %{ - # inserted_registration_code: registration_code, - # inserted_user: user - # }) do - # EmailWorker.add_email_verification_event(user, registration_code.code) - # end + defp add_registration_events(_repo, %{ + inserted_registration_code: registration_code, + inserted_user: user + }) do + EmailWorker.add_email_verification_event(user, registration_code.code) + end def update(user, params) do Ecto.Multi.new() diff --git a/apps/lenra/lib/lenra/workers/email_worker.ex b/apps/lenra/lib/lenra/workers/email_worker.ex index 0e3ff404..a2047a69 100644 --- a/apps/lenra/lib/lenra/workers/email_worker.ex +++ b/apps/lenra/lib/lenra/workers/email_worker.ex @@ -18,7 +18,7 @@ defmodule Lenra.EmailWorker do %User{} = user, code ) do - EmailService.welcome_text_email(user.email, code) + EmailService.create_welcome_email(user.email, code) |> Mailer.deliver_now() end @@ -26,7 +26,7 @@ defmodule Lenra.EmailWorker do %User{} = user, code ) do - EmailService.recovery_email(user.email, code) + EmailService.create_recovery_email(user.email, code) |> Mailer.deliver_now() end end diff --git a/apps/lenra/test/lenra/services/user_services_test.exs b/apps/lenra/test/lenra/services/user_services_test.exs index 18417013..a8518cb6 100644 --- a/apps/lenra/test/lenra/services/user_services_test.exs +++ b/apps/lenra/test/lenra/services/user_services_test.exs @@ -1,6 +1,7 @@ defmodule UserServicesTest do - use Lenra.RepoCase, async: true - alias Lenra.{User, DevCode, UserServices} + use Lenra.RepoCase, async: false + alias Lenra.{User, DevCode, UserServices, PasswordServices, EmailService, PasswordCode} + use Bamboo.Test, shared: true test "register user should succeed" do {:ok, %{inserted_user: user, inserted_registration_code: registration_code}} = register_john_doe() @@ -13,6 +14,21 @@ defmodule UserServicesTest do assert String.length(registration_code.code) == 8 end + test "send email after registration" do + {:ok, %{inserted_user: user, inserted_registration_code: registration_code}} = register_john_doe() + + email = EmailService.create_welcome_email(user.email, registration_code.code) + + assert_delivered_email(email) + end + + test "send email for a password recovery" do + {:ok, %{inserted_user: user}} = register_john_doe() + {:ok, %{password_code: %PasswordCode{} = password_code}} = PasswordServices.send_password_code(user) + email = EmailService.create_recovery_email(user.email, password_code.code) + assert_delivered_email(email) + end + test "register should fail if email already exists" do {:ok, _} = register_john_doe() diff --git a/config/config.exs b/config/config.exs index cb03df56..d1d43c2d 100644 --- a/config/config.exs +++ b/config/config.exs @@ -30,6 +30,7 @@ config :guardian, Guardian.DB, # Configure bamboo config :lenra, Lenra.Mailer, + adapter: Bamboo.SendGridAdapter, hackney_opts: [ recv_timeout: :timer.minutes(1), connect_timeout: :timer.minutes(1) diff --git a/config/prod.exs b/config/prod.exs index 267825dc..2143e7c8 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -26,5 +26,3 @@ config :lenra, # Edit to allow only wanted sources config :cors_plug, origin: [] - -config :lenra, Lenra.Mailer, adapter: Bamboo.SendGridAdapter