parent
6f7874d23c
commit
b624c3bf0a
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Services\AdminSmsChallengeService;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Mockery;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AdminSmsSendFailureTest extends TestCase
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
config()->set('database.default', 'sqlite');
|
||||
config()->set('database.connections.sqlite.database', ':memory:');
|
||||
DB::purge('sqlite');
|
||||
|
||||
Schema::create('admins', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('mobile');
|
||||
$table->softDeletes();
|
||||
});
|
||||
Schema::create('configs', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('key');
|
||||
$table->string('value');
|
||||
$table->softDeletes();
|
||||
});
|
||||
DB::table('admins')->insert(['mobile' => '13800138000']);
|
||||
DB::table('configs')->insert(['key' => 'sms_sign', 'value' => '测试']);
|
||||
}
|
||||
|
||||
public function test_provider_failure_and_unknown_mobile_have_the_same_response(): void
|
||||
{
|
||||
$challengeId = '4d2fd7fc-2630-4432-8df5-34f3edc029d0';
|
||||
$service = Mockery::mock(AdminSmsChallengeService::class);
|
||||
$service->shouldReceive('canSend')->twice()->andReturn(true);
|
||||
$service->shouldReceive('issueChallenge')->once()->andReturn(null);
|
||||
$service->shouldReceive('issueDecoyChallenge')->twice()->andReturn($challengeId);
|
||||
$this->app->instance(AdminSmsChallengeService::class, $service);
|
||||
|
||||
$registered = $this->postJson('/api/admin/auth/send-sms', ['mobile' => '13800138000']);
|
||||
$unknown = $this->postJson('/api/admin/auth/send-sms', ['mobile' => '13900139000']);
|
||||
|
||||
$registered->assertOk()->assertExactJson([
|
||||
'message' => '如果手机号已登记,验证码将发送',
|
||||
'challenge_id' => $challengeId,
|
||||
]);
|
||||
$unknown->assertOk()->assertExactJson($registered->json());
|
||||
}
|
||||
|
||||
public function test_challenge_store_failure_returns_a_controlled_error(): void
|
||||
{
|
||||
$service = Mockery::mock(AdminSmsChallengeService::class);
|
||||
$service->shouldReceive('canSend')->once()->andReturn(true);
|
||||
$service->shouldReceive('issueChallenge')->once()->andReturn(null);
|
||||
$service->shouldReceive('issueDecoyChallenge')->once()->andThrow(new \RuntimeException('cache unavailable'));
|
||||
$this->app->instance(AdminSmsChallengeService::class, $service);
|
||||
|
||||
$this->postJson('/api/admin/auth/send-sms', ['mobile' => '13800138000'])
|
||||
->assertOk()
|
||||
->assertExactJson([
|
||||
'errcode' => 10003,
|
||||
'errmsg' => '验证码服务暂不可用,请稍后重试',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue