add test
This commit is contained in:
parent
d58afc0324
commit
e2ba3581f9
@ -34,6 +34,6 @@ class CheckinWebhook extends Model
|
|||||||
|
|
||||||
public function isAvailable()
|
public function isAvailable()
|
||||||
{
|
{
|
||||||
return $this->user() !== null;
|
return $this->user !== null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ class WebhookController extends Controller
|
|||||||
'message' => 'Validation failed',
|
'message' => 'Validation failed',
|
||||||
'violations' => $validator->errors()->all(),
|
'violations' => $validator->errors()->all(),
|
||||||
]
|
]
|
||||||
]);
|
], 422);
|
||||||
}
|
}
|
||||||
|
|
||||||
$ejaculatedDate = empty($inputs['checked_in_at']) ? now() : new Carbon($inputs['checked_in_at']);
|
$ejaculatedDate = empty($inputs['checked_in_at']) ? now() : new Carbon($inputs['checked_in_at']);
|
||||||
@ -57,7 +57,7 @@ class WebhookController extends Controller
|
|||||||
'error' => [
|
'error' => [
|
||||||
'message' => 'Checkin already exists in this time',
|
'message' => 'Checkin already exists in this time',
|
||||||
]
|
]
|
||||||
]);
|
], 422);
|
||||||
}
|
}
|
||||||
|
|
||||||
$ejaculation = Ejaculation::create([
|
$ejaculation = Ejaculation::create([
|
||||||
|
12
database/factories/CheckinWebhookFactory.php
Normal file
12
database/factories/CheckinWebhookFactory.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/** @var \Illuminate\Database\Eloquent\Factory $factory */
|
||||||
|
|
||||||
|
use App\CheckinWebhook;
|
||||||
|
use Faker\Generator as Faker;
|
||||||
|
|
||||||
|
$factory->define(CheckinWebhook::class, function (Faker $faker) {
|
||||||
|
return [
|
||||||
|
'name' => 'example'
|
||||||
|
];
|
||||||
|
});
|
90
tests/Feature/Api/Webhook/CheckinWebhookTest.php
Normal file
90
tests/Feature/Api/Webhook/CheckinWebhookTest.php
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Api\Webhook;
|
||||||
|
|
||||||
|
use App\CheckinWebhook;
|
||||||
|
use App\Ejaculation;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class CheckinWebhookTest extends TestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabase;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->seed();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSuccessful()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => $user->id]);
|
||||||
|
|
||||||
|
$response = $this->postJson('/api/webhooks/checkin/' . $webhook->id, [
|
||||||
|
'link' => 'http://example.com',
|
||||||
|
'tags' => ['foo', 'bar']
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200)
|
||||||
|
->assertJsonPath('status', 200);
|
||||||
|
|
||||||
|
$checkinId = $response->json('checkin.id');
|
||||||
|
$ejaculation = Ejaculation::find($checkinId);
|
||||||
|
$this->assertSame('http://example.com', $ejaculation->link);
|
||||||
|
$this->assertCount(2, $ejaculation->tags);
|
||||||
|
$this->assertSame(Ejaculation::SOURCE_WEBHOOK, $ejaculation->source);
|
||||||
|
$this->assertNotEmpty($ejaculation->checkin_webhook_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUserDestroyed()
|
||||||
|
{
|
||||||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => null]);
|
||||||
|
|
||||||
|
$response = $this->postJson('/api/webhooks/checkin/' . $webhook->id);
|
||||||
|
|
||||||
|
$response->assertStatus(404)
|
||||||
|
->assertJsonPath('status', 404)
|
||||||
|
->assertJsonPath('error.message', 'The webhook is unavailable');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testValidationFailed()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => $user->id]);
|
||||||
|
|
||||||
|
$response = $this->postJson('/api/webhooks/checkin/' . $webhook->id, [
|
||||||
|
'checked_in_at' => new Carbon('1999-12-31T23:59:00+0900'),
|
||||||
|
'tags' => [
|
||||||
|
'Has spaces'
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(422)
|
||||||
|
->assertJsonPath('status', 422)
|
||||||
|
->assertJsonPath('error.message', 'Validation failed')
|
||||||
|
->assertJsonCount(2, 'error.violations');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testConflictCheckedInAt()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => $user->id]);
|
||||||
|
$ejaculatedDate = new Carbon('2020-07-21T19:19:00+0900');
|
||||||
|
factory(Ejaculation::class)->create([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'ejaculated_date' => $ejaculatedDate
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = $this->postJson('/api/webhooks/checkin/' . $webhook->id, [
|
||||||
|
'checked_in_at' => $ejaculatedDate,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(422)
|
||||||
|
->assertJsonPath('status', 422)
|
||||||
|
->assertJsonPath('error.message', 'Checkin already exists in this time');
|
||||||
|
}
|
||||||
|
}
|
75
tests/Feature/Setting/WebhookTest.php
Normal file
75
tests/Feature/Setting/WebhookTest.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Setting;
|
||||||
|
|
||||||
|
use App\CheckinWebhook;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class WebhookTest extends TestCase
|
||||||
|
{
|
||||||
|
use RefreshDatabase;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->seed();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStoreWebhooks()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
|
||||||
|
$response = $this->actingAs($user)
|
||||||
|
->followingRedirects()
|
||||||
|
->post('/setting/webhooks', ['name' => 'example']);
|
||||||
|
|
||||||
|
$response->assertStatus(200)
|
||||||
|
->assertViewIs('setting.webhooks');
|
||||||
|
$this->assertDatabaseHas('checkin_webhooks', ['user_id' => $user->id, 'name' => 'example']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStoreWebhooksHas9Hooks()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$webhooks = factory(CheckinWebhook::class, CheckinWebhook::PER_USER_LIMIT - 1)->create(['user_id' => $user->id]);
|
||||||
|
|
||||||
|
$response = $this->actingAs($user)
|
||||||
|
->followingRedirects()
|
||||||
|
->post('/setting/webhooks', ['name' => 'example9']);
|
||||||
|
|
||||||
|
$response->assertStatus(200)
|
||||||
|
->assertViewIs('setting.webhooks');
|
||||||
|
$this->assertDatabaseHas('checkin_webhooks', ['user_id' => $user->id, 'name' => 'example9']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStoreWebhooksHas10Hooks()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$webhooks = factory(CheckinWebhook::class, CheckinWebhook::PER_USER_LIMIT)->create(['user_id' => $user->id]);
|
||||||
|
|
||||||
|
$response = $this->actingAs($user)
|
||||||
|
->followingRedirects()
|
||||||
|
->post('/setting/webhooks', ['name' => 'example10']);
|
||||||
|
|
||||||
|
$response->assertStatus(200)
|
||||||
|
->assertViewIs('setting.webhooks');
|
||||||
|
$this->assertDatabaseMissing('checkin_webhooks', ['user_id' => $user->id, 'name' => 'example10']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDestroyWebhooks()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => $user->id]);
|
||||||
|
|
||||||
|
$response = $this->actingAs($user)
|
||||||
|
->followingRedirects()
|
||||||
|
->delete('/setting/webhooks/' . $webhook->id);
|
||||||
|
|
||||||
|
$response->assertStatus(200)
|
||||||
|
->assertViewIs('setting.webhooks')
|
||||||
|
->assertSee('削除しました');
|
||||||
|
$this->assertTrue($webhook->refresh()->trashed());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user