
/onis/
https://localhost/api/v1.3/onis
{"onis"
{
"id" : 1,
"name": "muzansama",
"kekkijutu": "tousou"
},
{
"id" : 2,
"name": "yushirou",
"kekkijutu": "hacking"
}
}
/onis/{oni_id}
https://localhost/api/v1.3/onis/2
{"onis"
{
"id" : 2,
"name": "yushirou",
"kekkijutu": "hacking"
}
}
class OniApisTest extends TestCase
{
use DatabaseTransactions;
private $oni;
public function setup(): void
{
parent::setUp();
$this->seed('OniTestDataSeeder');
$this->oni = Oni::first();
}
/**
* ログインなしでのアクセス確認 異常系
*
*/
public function testAuth()
{
// 鬼一覧ページ
$response = $this->json('GET', '/api/v1.30/onis');
$response->assertStatus(401)
->assertExactJson([
'error' => [
'error_code' => 401001,
'message' => 'アクセストークンが必要です。'
]
]);
// 鬼詳細ページ
$targetId = $this->oni->getIdAttribute();
$response = $this->json('GET', '/api/v1.30/onis/' . $targetId);
$response->assertStatus(401)
->assertExactJson([
'error' => [
'error_code' => 401001,
'message' => 'アクセストークンが必要です。'
]
]);
}
// onisオブジェクトがあるか確認 正常系
public function testOnis()
{
$token = $this->createAccessToken();
$response = $this->withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
])
->json('GET', '/api/v1.30/onis');
$this->assertTrue(array_key_exists('onis', $response->original));
}
/**
* ログイン状態でのアクセス確認 正常系
*
*/
public function testOniById()
{
// oniオブジェクトがあるか確認 正常系
$token = $this->createAccessToken();
$targetId = $this->oni->getIdAttribute();
$response = $this->withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
])
->json('GET', '/api/v1.30/onis/' . $targetId);
$this->assertTrue(array_key_exists('oni', $response->original));
// キーの構成が厳密に正しいか 正常系確認
$response->assertExactJson([
'oni' => [
'id' => $this->animal->getIdAttribute(),
'name' => Normalizer::normalize($this->oni->name, Normalizer::FORM_C),
'kekkijutu' => Normalizer::normalize($this->animal->getKiketuJutuAttribute(), Normalizer::FORM_C),
]
]);
$response->assertStatus(200);
}
/**
* 鬼詳細を取得時にString型文字列がリクエストされたら400001エラーを返却するか 異常系確認
*
* @return void
*
*/
public function testAnimalByIdNotIdButString()
{
$token = $this->createAccessToken();
$badTargetId = (String) "花札の耳飾り・・・(ドキドキドキドキ))"; // 予期していない文字列型リクエスト
$response = $this->withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
])
->json('GET', '/api/v1.30/onis/' . $badTargetId);
$response->assertJson([
'error' => [
'error_code' => 400001,
'message' => 'リクエスト形式が間違っています。',
]
]);
$response->assertStatus(400);
}
もくじ
テスト用トランザクション
テストの間だけテスト用のシードを流して、テスト終了で削除する
use Illuminate\Foundation\Testing\DatabaseTransactions; // ●ここポイント
class OniApisTest extends TestCase
{
use DatabaseTransactions; // ●ここポイント
public function setup(): void
{
parent::setUp();
$this->seed('OniTestDataSeeder');
$this->oni = Oni::first();
}
テスト用のSeederファイル。
ログイン限定ページのアクセスでのエラーハンドリング確認
/**
* ログインなしでのアクセス確認 異常系
*
*/
public function testAuth()
{
// 鬼一覧ページ
$response = $this->json('GET', '/api/v1.30/onis');
$response->assertStatus(401)
->assertExactJson([
'error' => [
'error_code' => 401001,
'message' => 'アクセストークンが必要です。'
]
]);
// 鬼詳細ページ
$targetId = $this->oni->getIdAttribute();
$response = $this->json('GET', '/api/v1.30/animals/' . $targetId);
$response->assertStatus(401)
->assertExactJson([
'error' => [
'error_code' => 401001,
'message' => 'アクセストークンが必要です。'
]
]);
}
正常系確認
- 一覧情報
- idを指定した詳細情報
/**
* ログイン状態でのアクセス確認 正常系
*
*/
public function testOniById()
{
// oniオブジェクトがあるか確認 正常系
$token = $this->createAccessToken();
$targetId = $this->oni->getIdAttribute();
$response = $this->withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
])
->json('GET', '/api/v1.30/onis/' . $targetId);
$this->assertTrue(array_key_exists('oni', $response->original));
// キーの構成を厳密に正しいか 正常系確認
$response->assertExactJson([
'oni' => [
'id' => $this->animal->getIdAttribute(),
'name' => Normalizer::normalize($this->oni->name, Normalizer::FORM_C),
'kiketujutu' => Normalizer::normalize($this->animal->getKiketuJutuAttribute(), Normalizer::FORM_C),
]
]);
$response->assertStatus(200);
}
予期しないリクエストによる異常系確認
/**
* 鬼詳細を取得時にString型文字列がリクエストされたら400001エラーを返却するか 異常系確認
*
* @return void
*
*/
public function testAnimalByIdNotIdButString()
{
$token = $this->createAccessToken();
$badTargetId = (String) "花札の耳飾り・・・(ドキドキドキドキ))"; // 予期していない文字列型リクエスト
$response = $this->withHeaders([
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
])
->json('GET', '/api/v1.30/onis/' . $badTargetId);
$response->assertJson([
'error' => [
'error_code' => 400001,
'message' => 'リクエスト形式が間違っています。',
]
]);
$response->assertStatus(400);
}

