Skip to content

Commit

Permalink
Add email templates for init deletion profile (#74)
Browse files Browse the repository at this point in the history
* Add email templates for init deletion profile

* composer fix

---------

Co-authored-by: Tomasz Smolarek <tomasz.smolarek@escolasoft.com>
  • Loading branch information
dyfero and dyfero committed Jul 7, 2023
1 parent 8f3761e commit 4c941e3
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 1 deletion.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"qferr/mjml-php": "^1.1"
},
"require-dev": {
"escolalms/auth": "^0.1.54",
"escolalms/auth": "^0.2",
"escolalms/courses": "^0.4",
"escolalms/course-access": "^0",
"escolalms/topic-types": "^0",
Expand Down
57 changes: 57 additions & 0 deletions src/Auth/AccountDeletionRequestedVariables.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace EscolaLms\TemplatesEmail\Auth;

use EscolaLms\Templates\Events\EventWrapper;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\URL;

class AccountDeletionRequestedVariables extends CommonAuthVariables
{
public static function getActionLink(EventWrapper $event): string
{
$notifiable = $event->getUser();

try {
$url = $event->getReturnUrl();
} catch (\Throwable $th) {
$url = null;
}

if (!empty($url)) {
return $url .
'?id=' . $notifiable->getKey() .
'&token=' . $event->getToken();
}

return URL::temporarySignedRoute(
'profile.delete.confirmation',
Carbon::now()->addMinutes(config('auth.verification.expire', 60)),
[
'userId' => $notifiable->getKey(),
'token' => $event->getToken(),
]
);
}

public static function defaultSectionsContent(): array
{
return [
'title' => Lang::get('Confirmation of account deletion'),
'content' => self::wrapWithMjml(
'<mj-text>'
. '<p>'
. Lang::get('Please click the button below to delete account.')
. '</p>'
. '</mj-text>'
. '<mj-button href="' . self::VAR_ACTION_LINK . '">' . Lang::get('Confirm account deletion') . '</mj-button>'
. '<mj-text>'
. '<p>'
. Lang::get('If you did not delete an account, no further action is required.')
. '</p>'
. '</mj-text>'
)
];
}
}
3 changes: 3 additions & 0 deletions src/Providers/AuthTemplatesServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace EscolaLms\TemplatesEmail\Providers;

use EscolaLms\Auth\Events\AccountConfirmed;
use EscolaLms\Auth\Events\AccountDeletionRequested;
use EscolaLms\Auth\Events\AccountMustBeEnableByAdmin;
use EscolaLms\Auth\Events\AccountRegistered;
use EscolaLms\Auth\Events\ForgotPassword;
Expand All @@ -11,6 +12,7 @@
use EscolaLms\Auth\Events\UserRemovedFromGroup;
use EscolaLms\Templates\Facades\Template;
use EscolaLms\TemplatesEmail\Auth\AccountConfirmedVariables;
use EscolaLms\TemplatesEmail\Auth\AccountDeletionRequestedVariables;
use EscolaLms\TemplatesEmail\Auth\PasswordChangedVariables;
use EscolaLms\Auth\Events\AccountBlocked;
use EscolaLms\Auth\Events\AccountDeleted;
Expand Down Expand Up @@ -38,5 +40,6 @@ public function boot()
Template::register(AccountRegistered::class, EmailChannel::class, VerifyEmailVariables::class);
Template::register(AccountDeleted::class, EmailChannel::class, AccountDeletedVariables::class);
Template::register(AccountBlocked::class, EmailChannel::class, AccountBlockedVariables::class);
Template::register(AccountDeletionRequested::class, EmailChannel::class, AccountDeletionRequestedVariables::class);
}
}
29 changes: 29 additions & 0 deletions tests/Api/AuthTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use EscolaLms\Auth\Database\Seeders\AuthPermissionSeeder;
use EscolaLms\Auth\Enums\SettingStatusEnum;
use EscolaLms\Auth\EscolaLmsAuthServiceProvider;
use EscolaLms\Auth\Events\AccountDeletionRequested;
use EscolaLms\Auth\Events\AccountMustBeEnableByAdmin;
use EscolaLms\Auth\Events\AccountRegistered;
use EscolaLms\Auth\Events\ForgotPassword;
Expand Down Expand Up @@ -149,4 +150,32 @@ public function testAccountMustBeEnableByAdmin(): void
return true;
});
}

public function testInitProfileDeletion(): void
{
$this->seed(AuthPermissionSeeder::class);

Mail::fake();
Event::fake();
Notification::fake();

$user = $this->makeStudent();

$this
->actingAs($user, 'api')
->postJson('/api/profile/delete/init', ['return_url' => 'https://escolalms.com/delete-account'])
->assertOk();

Event::assertDispatched(AccountDeletionRequested::class);
Notification::assertNotSentTo($user, VerifyEmail::class);

$listener = app(TemplateEventListener::class);
$listener->handle(new AccountDeletionRequested($user, 'https://escolalms.com/delete-account'));

Mail::assertSent(EmailMailable::class, function (EmailMailable $mailable) use ($user) {
$this->assertEquals('Confirmation of account deletion', $mailable->subject);
$this->assertTrue($mailable->hasTo($user->email));
return true;
});
}
}

0 comments on commit 4c941e3

Please sign in to comment.