135 lines
3.9 KiB
PHP

<?php
namespace Vanguard\UserActivity\Tests\Feature\Api;
use Facades\Tests\Setup\UserFactory;
use Tests\Feature\ApiTestCase;
use Vanguard\User;
use Vanguard\UserActivity\Activity;
use Vanguard\UserActivity\Http\Resources\ActivityResource;
class ActivityTest extends ApiTestCase
{
/** @test */
public function unauthenticated()
{
$this->getJson('/api/activity')->assertStatus(401);
}
/** @test */
public function get_activities_without_permission()
{
$user = User::factory()->create();
$this->actingAs($user, self::API_GUARD)
->getJson('/api/activity')
->assertStatus(403);
}
/** @test */
public function paginate_activities()
{
$user = $this->getUser();
$user2 = User::factory()->create();
$activities = Activity::factory()->times(25)->create(['user_id' => $user->id]);
Activity::factory()->times(10)->create(['user_id' => $user2->id]);
$response = $this->actingAs($user, self::API_GUARD)->getJson('/api/activity');
$transformed = ActivityResource::collection($activities->take(20))->resolve();
$this->assertEquals($response->json('data'), $transformed);
$response->assertJson([
'meta' => [
'current_page' => 1,
'from' => 1,
'to' => 20,
'last_page' => 2,
'path' => url('api/activity'),
'total' => 35,
'per_page' => 20,
],
]);
}
/** @test */
public function paginate_activities_with_search_param()
{
$user = $this->getUser();
$set1 = Activity::factory()->times(10)->create([
'user_id' => $user->id,
'description' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
]);
$set2 = Activity::factory()->times(5)->create([
'user_id' => $user->id,
'description' => 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...',
]);
$transformed = ActivityResource::collection($set2)->resolve();
$response = $this->actingAs($user, self::API_GUARD)
->getJson('/api/activity?filter[description]=minim&per_page=10&sort=created_at')
->assertOk();
$this->assertEquals($response->json('data'), $transformed);
$response->assertJson([
'meta' => [
'current_page' => 1,
'from' => 1,
'to' => 5,
'last_page' => 1,
'total' => 5,
'per_page' => 10,
'path' => url('api/activity'),
],
]);
}
/** @test */
public function paginate_activities_with_more_records_per_page_than_allowed()
{
$this->actingAs($this->getUser(), self::API_GUARD)
->getJson('/api/activity?per_page=140')
->assertStatus(422);
}
/** @test */
public function paginate_activities_for_user()
{
$user = UserFactory::user()->withPermissions('users.activity')->create();
$this->be($user, self::API_GUARD);
$activities = Activity::factory()->times(25)->create(['user_id' => $user->id]);
$response = $this->getJson("/api/activity?filters[user]={$user->id}");
$transformed = ActivityResource::collection($activities->take(20))->resolve();
$this->assertEquals($response->json('data'), $transformed);
$response->assertJson([
'meta' => [
'current_page' => 1,
'from' => 1,
'to' => 20,
'last_page' => 2,
'path' => url('api/activity'),
'total' => 25,
'per_page' => 20,
],
]);
}
/**
* @return mixed
*/
private function getUser()
{
return UserFactory::user()->withPermissions('users.activity')->create();
}
}