Skip to content

Commit 4f039bc

Browse files
committed
feat: update verification code generation
1 parent 177b1dd commit 4f039bc

7 files changed

Lines changed: 64 additions & 4 deletions

File tree

config/mobile-verification.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,5 +133,10 @@
133133
'register' => \Javaabu\MobileVerification\Notifications\RegisterVerificationTokenNotification::class,
134134
'verification_code' => \Javaabu\MobileVerification\Notifications\MobileNumberVerificationToken::class,
135135
'update' => \Javaabu\MobileVerification\Notifications\MobileNumberVerificationToken::class,
136-
]
136+
],
137+
138+
/*
139+
* Token generator class
140+
*/
141+
'verification_code_generator' => \Javaabu\MobileVerification\Support\VerificationCodeGenerator::class,
137142
];

lang/en/strings.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
'exists' => 'The :attribute has already been taken.',
1010
'doesnt-exist' => 'The :attribute does not exist.',
1111
'locked' => 'The number is locked due to too many attempts. You can try again in :time.',
12-
'recently_sent' => 'The code was recently sent to this number. You can try again in :time.'
12+
'recently_sent' => 'The code was recently sent to this number. You can try again in :time.',
13+
'soft_deleted' => 'The user associated with the :attribute is soft deleted.',
1314
],
1415
'country_code' => [
1516
'invalid' => 'The country code is invalid.'
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
4+
namespace Javaabu\MobileVerification\Contracts;
5+
6+
7+
interface IsVerificationCodeGenerator
8+
{
9+
public function handle(): string;
10+
}

src/Rules/IsValidMobileNumber.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ public function validate(string $attribute, mixed $value, Closure $fail): void
9595
->hasPhoneNumber($this->getCountryCode(), $value, $this->user_type)
9696
->first();
9797

98+
if ($mobile_number && $mobile_number->user_id && ! $mobile_number->user) {
99+
$fail(trans('mobile-verification::mobile-verification::strings.validation.number.soft_deleted', ['attribute' => $attribute]));
100+
}
101+
98102
if ($this->should_be_registered_number) {
99103
if (empty($mobile_number) || empty($mobile_number->user_id)) {
100104
$fail(trans('mobile-verification::strings.validation.number.doesnt-exist', ['attribute' => $attribute]));

src/Support/VerificationCodeGenerator.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
use Carbon\Carbon;
66
use Illuminate\Support\Str;
77
use Illuminate\Database\Eloquent\Model;
8+
use Javaabu\MobileVerification\Contracts\IsVerificationCodeGenerator;
89

9-
class VerificationCodeGenerator
10+
class VerificationCodeGenerator implements IsVerificationCodeGenerator
1011
{
1112
public function handle(): string
1213
{

src/Support/VerificationCodeUpdater.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,19 @@
55
use Carbon\Carbon;
66
use Illuminate\Support\Str;
77
use Illuminate\Database\Eloquent\Model;
8+
use Javaabu\MobileVerification\Contracts\IsVerificationCodeGenerator;
89

910
class VerificationCodeUpdater
1011
{
12+
13+
public IsVerificationCodeGenerator $verificationCodeGenerator;
1114
public function __construct(
12-
public VerificationCodeGenerator $verificationCodeGenerator
1315
)
1416
{
17+
$verification_code_generator_class = config('mobile-verification.verification_code_generator');
18+
$this->verificationCodeGenerator = app($verification_code_generator_class);
1519
}
20+
1621
public function handle(Model $mobile_number): string
1722
{
1823
$verification_code = $this->verificationCodeGenerator->handle();

tests/Feature/VerificationCodeTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,40 @@ public function test_too_many_invalid_attempts_will_lock_the_mobile_number()
9595
->assertJsonValidationErrors(['number']);
9696
}
9797

98+
public function test_verification_code_request_to_soft_deleted_user_returns_correct_validation_error()
99+
{
100+
$user = User::factory()->create();
101+
MobileNumber::unguard();
102+
103+
$mobile_number = MobileNumber::create([
104+
'number' => '7528222',
105+
'country_code' => '960',
106+
'user_type' => 'user',
107+
'user_id' => $user->id,
108+
]);
109+
110+
$user->delete();
111+
$this->assertDatabaseHas('users', [
112+
'id' => $user->id,
113+
'deleted_at' => now(),
114+
]);
115+
116+
$this->mock(VerificationCodeGenerator::class, function ($mock) use ($mobile_number) {
117+
$mock->shouldReceive('handle')
118+
->andReturn('123456');
119+
});
120+
121+
$response = $this->postJson('/api/mobile-verifications/verification-code', [
122+
'user_type' => 'user',
123+
'number' => '7528222',
124+
]);
125+
126+
$response->assertJsonValidationErrors(['number']);
127+
128+
$mobile_number->refresh();
129+
$this->assertNull($mobile_number->verification_code);
130+
}
131+
98132
public function getUserWithMobileNumber(string $number = '7528222'): User
99133
{
100134
$user = User::factory()->create();

0 commit comments

Comments
 (0)