149 lines
5.2 KiB
PHP
149 lines
5.2 KiB
PHP
|
<?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();
|
||
|
Carbon::setTestNow('2020-07-21 19:19:19');
|
||
|
}
|
||
|
|
||
|
protected function tearDown(): void
|
||
|
{
|
||
|
parent::tearDown();
|
||
|
Carbon::setTestNow();
|
||
|
}
|
||
|
|
||
|
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, [
|
||
|
'checked_in_at' => Carbon::create(2019, 7, 21, 19, 19, 19)->toIso8601String(),
|
||
|
'note' => 'test test test',
|
||
|
'link' => 'http://example.com',
|
||
|
'tags' => ['foo', 'bar'],
|
||
|
'is_private' => false,
|
||
|
'is_too_sensitive' => false,
|
||
|
]);
|
||
|
|
||
|
$response->assertStatus(200)
|
||
|
->assertJsonPath('status', 200);
|
||
|
|
||
|
$checkinId = $response->json('checkin.id');
|
||
|
$ejaculation = Ejaculation::find($checkinId);
|
||
|
$this->assertEquals(Carbon::create(2019, 7, 21, 19, 19, 0), $ejaculation->ejaculated_date);
|
||
|
$this->assertSame('test test test', $ejaculation->note);
|
||
|
$this->assertSame('http://example.com', $ejaculation->link);
|
||
|
$this->assertCount(2, $ejaculation->tags);
|
||
|
$this->assertFalse($ejaculation->is_private);
|
||
|
$this->assertFalse($ejaculation->is_too_sensitive);
|
||
|
$this->assertSame(Ejaculation::SOURCE_WEBHOOK, $ejaculation->source);
|
||
|
$this->assertNotEmpty($ejaculation->checkin_webhook_id);
|
||
|
}
|
||
|
|
||
|
public function testSuccessfulPrivateAndSensitive()
|
||
|
{
|
||
|
$user = factory(User::class)->create();
|
||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => $user->id]);
|
||
|
|
||
|
$response = $this->postJson('/api/webhooks/checkin/' . $webhook->id, [
|
||
|
'is_private' => true,
|
||
|
'is_too_sensitive' => true,
|
||
|
]);
|
||
|
|
||
|
$response->assertStatus(200)
|
||
|
->assertJsonPath('status', 200);
|
||
|
|
||
|
$checkinId = $response->json('checkin.id');
|
||
|
$ejaculation = Ejaculation::find($checkinId);
|
||
|
$this->assertTrue($ejaculation->is_private);
|
||
|
$this->assertTrue($ejaculation->is_too_sensitive);
|
||
|
$this->assertSame(Ejaculation::SOURCE_WEBHOOK, $ejaculation->source);
|
||
|
$this->assertNotEmpty($ejaculation->checkin_webhook_id);
|
||
|
}
|
||
|
|
||
|
public function testSuccessfulAllDefault()
|
||
|
{
|
||
|
$user = factory(User::class)->create();
|
||
|
$webhook = factory(CheckinWebhook::class)->create(['user_id' => $user->id]);
|
||
|
|
||
|
$response = $this->postJson('/api/webhooks/checkin/' . $webhook->id);
|
||
|
|
||
|
$response->assertStatus(200)
|
||
|
->assertJsonPath('status', 200);
|
||
|
|
||
|
$checkinId = $response->json('checkin.id');
|
||
|
$ejaculation = Ejaculation::find($checkinId);
|
||
|
$this->assertEquals(Carbon::create(2020, 7, 21, 19, 19, 0), $ejaculation->ejaculated_date);
|
||
|
$this->assertEmpty($ejaculation->note);
|
||
|
$this->assertEmpty($ejaculation->link);
|
||
|
$this->assertEmpty($ejaculation->tags);
|
||
|
$this->assertFalse($ejaculation->is_private);
|
||
|
$this->assertFalse($ejaculation->is_too_sensitive);
|
||
|
$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');
|
||
|
}
|
||
|
}
|