Created
November 25, 2020 06:16
-
-
Save imdong/b59dd8bed35969aea1c9dd22d006f620 to your computer and use it in GitHub Desktop.
登录功能测试
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* 登录功能测试 | |
* | |
* @author ImDong ([email protected]) | |
* @created 2020-11-20 16:06:16 | |
* @updated 2020-11-24 17:30:14 | |
*/ | |
namespace Tests\Feature; | |
use App\Exceptions\ApiException; | |
use App\Exceptions\AuthException; | |
use App\Exceptions\CommonException; | |
use App\Helpers\RedisHelper; | |
use App\Http\Services\VerificationCode; | |
use App\Models\User; | |
use Tests\ApiFeatureBaseTest; | |
/** | |
* Class UserLoginTest | |
* | |
* @package Tests\Feature | |
*/ | |
class UserLoginTest extends ApiFeatureBaseTest | |
{ | |
/** | |
* @var string 获取验证码的接口地址 | |
*/ | |
private $api_code = '/v1/sms/code'; | |
/** | |
* @var string 登录用的接口地址 | |
*/ | |
private $api_login = '/v1/user/login'; | |
/** | |
* 删除用户 | |
* | |
* @throws \Exception | |
*/ | |
public function delUser() | |
{ | |
// 删除用户 | |
$user = User::query()->where(['phone' => $this->phone])->first(); | |
if ($user) { | |
$user->delete(); | |
} | |
} | |
/** | |
* @throws \Exception | |
*/ | |
public function setUp(): void | |
{ | |
parent::setUp(); | |
// 删除用户 | |
$this->delUser(); | |
// 清空 Redis 库 | |
RedisHelper::get()->flushdb(); | |
// 修改接口地址 | |
$this->api_code = $this->baseApiUrl . $this->api_code; | |
$this->api_login = $this->baseApiUrl . $this->api_login; | |
} | |
/** | |
* 无验证码登录 | |
*/ | |
public function testNoneCode() | |
{ | |
// 登录用数据 | |
$login_data = [ | |
'type' => 'code', // 使用验证码登录 | |
'phone' => $this->phone, | |
'code' => '0000' | |
]; | |
// 先使用错误验证码登录 | |
$this->postJson($this->api_login, $login_data)->assertJson([ | |
'code' => CommonException::CODE_INVALID | |
]); | |
} | |
/** | |
* 获取 并 使用错误验证码登录(获取验证码频繁) | |
*/ | |
public function testCodeError() | |
{ | |
// 吊销验证码 | |
VerificationCode::revokeCodeByPhone($this->phone, 'login'); | |
// 获取短信验证码 | |
$code_data = [ | |
'type' => 'login', | |
'phone' => $this->phone | |
]; | |
$this->postJson($this->api_code, $code_data)->assertJson(['code' => ApiException::SUCCESS]); | |
// 获取验证码过于频繁 | |
$this->postJson($this->api_code, $code_data)->assertJson([ | |
'code' => CommonException::OPERATION_FREQUENT | |
]); | |
// 登录失败 验证码错误 | |
$this->postJson($this->api_login, [ | |
'type' => 'code', | |
'phone' => $this->phone, | |
'code' => '0000' | |
])->assertJson([ | |
'code' => CommonException::CODE_ERROR | |
]); | |
} | |
/** | |
* 登录成功 (首次登录) | |
* | |
* @throws \Exception | |
*/ | |
public function testLoginSuccessFirst() | |
{ | |
// 删除用户 | |
$this->delUser(); | |
// 吊销验证码 | |
VerificationCode::revokeCodeByPhone($this->phone, 'login'); | |
// 获取短信验证码 | |
$code_data = [ | |
'type' => 'login', | |
'phone' => $this->phone | |
]; | |
$this->postJson($this->api_code, $code_data)->assertJson(['code' => ApiException::SUCCESS]); | |
// 这次应该能登录成功 (新用户) | |
$this->postJson($this->api_login, [ | |
'type' => 'code', | |
'phone' => $this->phone, | |
'code' => RedisHelper::get()->get(RedisHelper::getSmsCodeKey($this->phone, 'login')) | |
])->assertJson([ | |
'code' => ApiException::SUCCESS, | |
'data' => [ | |
'new_user' => true | |
] | |
]); | |
} | |
/** | |
* 登录成功 非首次 | |
* | |
* @group Dev | |
*/ | |
public function testLoginSuccessNoFirst() | |
{ | |
// 保证一定有用户 | |
User::findOrNew($this->phone); | |
// 吊销验证码 | |
VerificationCode::revokeCodeByPhone($this->phone, 'login'); | |
// 获取短信验证码 | |
$code_data = [ | |
'type' => 'login', | |
'phone' => $this->phone | |
]; | |
$this->postJson($this->api_code, $code_data)->assertJson(['code' => ApiException::SUCCESS]); | |
// 这次应该能登录成功 (非新用户) | |
$this->postJson($this->api_login, [ | |
'type' => 'code', | |
'phone' => $this->phone, | |
'code' => RedisHelper::get()->get(RedisHelper::getSmsCodeKey($this->phone, 'login')) | |
])->assertJson([ | |
'code' => ApiException::SUCCESS, | |
'data' => [ | |
'new_user' => false | |
] | |
]); | |
} | |
/** | |
* 未设置密码的登录 | |
* | |
* @throws \App\Exceptions\ApiException | |
*/ | |
public function testLoginByPasswordNoSet() | |
{ | |
// 创建用户 | |
User::findOrNew($this->phone); | |
$post = [ | |
'type' => 'password', | |
'phone' => $this->phone, | |
'password' => $this->password | |
]; | |
$this->postJson($this->api_login, $post)->assertJson([ | |
'code' => AuthException::PASSWORD_ERROR | |
]); | |
} | |
/** | |
* 设置密码 但使用错误密码登录 | |
* | |
* @throws \App\Exceptions\ApiException | |
*/ | |
public function testLoginByPasswordError() | |
{ | |
// 创建用户 | |
$user = User::findOrNew($this->phone); | |
$user->setPassword($this->password); | |
$post = [ | |
'type' => 'password', | |
'phone' => $this->phone, | |
'password' => $this->password, | |
]; | |
$this->postJson($this->api_login, $post)->assertJson([ | |
'code' => AuthException::PASSWORD_ERROR | |
]); | |
} | |
/** | |
* 使用密码登录成功 | |
* | |
* @throws \App\Exceptions\ApiException | |
*/ | |
public function testLoginByPasswordSuccess() | |
{ | |
// 创建用户 | |
$user = User::findOrNew($this->phone); | |
$user->setPassword($this->password); | |
$post = [ | |
'type' => 'password', | |
'phone' => $this->phone, | |
'password' => $this->password, | |
]; | |
$this->postJson($this->api_login, $post)->assertJson([ | |
'code' => AuthException::PASSWORD_ERROR | |
]); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment