fix event test to specifically set status

This commit is contained in:
2023-04-11 17:10:53 +10:00
parent c79ec065d3
commit fd1522a2ca

View File

@@ -1,4 +1,5 @@
<?php <?php
use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase; use Tests\TestCase;
use App\Models\User; use App\Models\User;
@@ -13,22 +14,25 @@ class EventsApiTest extends TestCase
protected $faker; protected $faker;
public function setUp(): void public function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->faker = FakerFactory::create(); $this->faker = FakerFactory::create();
} }
public function testAnyUserCanViewEvent() public function testAnyUserCanViewEvent()
{ {
// Create an event // Create an event
$event = Event::factory()->create([ $event = Event::factory()->create([
'publish_at' => Carbon::parse($this->faker->dateTimeBetween('-2 months', '-1 month')), 'publish_at' => Carbon::parse($this->faker->dateTimeBetween('-2 months', '-1 month')),
'status' => 'open',
]); ]);
// Create a future event // Create a future event
$futureEvent = Event::factory()->create([ $futureEvent = Event::factory()->create([
'publish_at' => Carbon::parse($this->faker->dateTimeBetween('+1 day', '+1 month')), 'publish_at' => Carbon::parse($this->faker->dateTimeBetween('+1 day', '+1 month')),
'status' => 'open',
]); ]);
// Send GET request to the /api/events endpoint // Send GET request to the /api/events endpoint
@@ -48,12 +52,45 @@ class EventsApiTest extends TestCase
]); ]);
} }
public function testAnyUserCannotSeeDraftEvent()
{
// Create a draft event
$draftEvent = Event::factory()->create([
'publish_at' => Carbon::parse($this->faker->dateTimeBetween('-2 months', '-1 month')),
'status' => 'draft',
]);
// Create a open event
$openEvent = Event::factory()->create([
'publish_at' => Carbon::parse($this->faker->dateTimeBetween('-2 months', '-1 month')),
'status' => 'open',
]);
// Create a closed event
$closedEvent = Event::factory()->create([
'publish_at' => Carbon::parse($this->faker->dateTimeBetween('-2 months', '-1 month')),
'status' => 'closed',
]);
// Send GET request to the /api/events endpoint
$response = $this->getJson('/api/events');
$response->assertStatus(200);
// Assert that the event is in the response data
$response->assertJsonCount(2, 'events');
$response->assertJsonMissing([
'id' => $draftEvent->id,
'title' => $draftEvent->title,
]);
}
public function testAdminCanCreateUpdateDeleteEvent() public function testAdminCanCreateUpdateDeleteEvent()
{ {
// Create a user with the admin/events permission // Create a user with the admin/events permission
$adminUser = User::factory()->create(); $adminUser = User::factory()->create();
$adminUser->givePermission('admin/events'); $adminUser->givePermission('admin/events');
// Create media data // Create media data
$media = Media::factory()->create(['user_id' => $adminUser->id]); $media = Media::factory()->create(['user_id' => $adminUser->id]);
@@ -71,21 +108,21 @@ class EventsApiTest extends TestCase
'title' => $eventData['title'], 'title' => $eventData['title'],
'content' => $eventData['content'], 'content' => $eventData['content'],
]); ]);
// Test viewing event // Test viewing event
$event = Event::where('title', $eventData['title'])->first(); $event = Event::where('title', $eventData['title'])->first();
$response = $this->get("/api/events/$event->id"); $response = $this->get("/api/events/$event->id");
$response->assertStatus(200); $response->assertStatus(200);
$response->assertJsonStructure([ $response->assertJsonStructure([
'event' => [ 'event' => [
'id', 'id',
'title', 'title',
'content', 'content',
'start_at', 'start_at',
'end_at', 'end_at',
] ]
]); ]);
// Test updating event // Test updating event
$eventData['title'] = 'Updated Event'; $eventData['title'] = 'Updated Event';
$response = $this->actingAs($adminUser)->putJson("/api/events/$event->id", $eventData); $response = $this->actingAs($adminUser)->putJson("/api/events/$event->id", $eventData);
@@ -93,7 +130,7 @@ class EventsApiTest extends TestCase
$this->assertDatabaseHas('events', [ $this->assertDatabaseHas('events', [
'title' => 'Updated Event', 'title' => 'Updated Event',
]); ]);
// Test deleting event // Test deleting event
$response = $this->actingAs($adminUser)->delete("/api/events/$event->id"); $response = $this->actingAs($adminUser)->delete("/api/events/$event->id");
$response->assertStatus(204); $response->assertStatus(204);