You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
8.2 KiB
250 lines
8.2 KiB
<?php
|
|
|
|
namespace Tests\Unit\Models;
|
|
|
|
use App\Entities\Projects\Job;
|
|
use App\Entities\Projects\Project;
|
|
use App\Entities\Projects\Task;
|
|
use App\Entities\Users\Activity;
|
|
use App\Entities\Users\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class ActivityTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
/** @test */
|
|
public function it_creates_project_creation_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'project_created',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $project->id,
|
|
'object_type' => 'projects',
|
|
'data' => null,
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_project_data_update_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create(['name' => 'New Project']);
|
|
|
|
$project->name = 'Updated project';
|
|
$project->save();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'project_updated',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $project->id,
|
|
'object_type' => 'projects',
|
|
'data' => json_encode([
|
|
'before' => ['name' => 'New Project'],
|
|
'after' => ['name' => 'Updated project'],
|
|
'notes' => null,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_job_creation_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'job_created',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $job->id,
|
|
'object_type' => 'jobs',
|
|
'data' => null,
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_job_data_update_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create([
|
|
'name' => 'New Job',
|
|
'project_id' => $project->id,
|
|
]);
|
|
|
|
$job->name = 'Updated job';
|
|
$job->save();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'job_updated',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $job->id,
|
|
'object_type' => 'jobs',
|
|
'data' => json_encode([
|
|
'before' => ['name' => 'New Job'],
|
|
'after' => ['name' => 'Updated job'],
|
|
'notes' => null,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_job_deletion_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
$job->delete();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'job_deleted',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $project->id,
|
|
'object_type' => 'projects',
|
|
'data' => json_encode([
|
|
'name' => $job->name,
|
|
'description' => $job->description,
|
|
'price' => $job->price,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_task_creation_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
$task = factory(Task::class)->create(['job_id' => $job->id]);
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'task_created',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $task->id,
|
|
'object_type' => 'tasks',
|
|
'data' => null,
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_task_data_update_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
$task = factory(Task::class)->create([
|
|
'name' => 'New Task',
|
|
'job_id' => $job->id,
|
|
]);
|
|
|
|
$task->name = 'Updated task';
|
|
$task->save();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'task_updated',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $task->id,
|
|
'object_type' => 'tasks',
|
|
'data' => json_encode([
|
|
'before' => ['name' => 'New Task'],
|
|
'after' => ['name' => 'Updated task'],
|
|
'notes' => null,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_task_progress_update_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
$task = factory(Task::class)->create([
|
|
'progress' => 20,
|
|
'job_id' => $job->id,
|
|
]);
|
|
|
|
$task->progress = 40;
|
|
$task->save();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'task_updated',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $task->id,
|
|
'object_type' => 'tasks',
|
|
'data' => json_encode([
|
|
'before' => ['progress' => 20],
|
|
'after' => ['progress' => 40],
|
|
'notes' => null,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function it_records_task_deletion_activities()
|
|
{
|
|
$admin = $this->adminUserSigningIn();
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
$task = factory(Task::class)->create(['job_id' => $job->id]);
|
|
$task->delete();
|
|
|
|
$this->seeInDatabase('user_activities', [
|
|
'type' => 'task_deleted',
|
|
'parent_id' => null,
|
|
'user_id' => $admin->id,
|
|
'object_id' => $job->id,
|
|
'object_type' => 'jobs',
|
|
'data' => json_encode([
|
|
'name' => $task->name,
|
|
'description' => $task->description,
|
|
'progress' => $task->progress,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
/** @test */
|
|
public function an_activity_has_belongs_to_user_relation()
|
|
{
|
|
$project = factory(Project::class)->create();
|
|
$activity = Activity::where('object_type', 'projects')
|
|
->where('object_id', $project->id)
|
|
->first();
|
|
|
|
$this->assertInstanceOf(User::class, $activity->user);
|
|
$this->assertEquals($activity->user_id, $activity->user->id);
|
|
}
|
|
|
|
/** @test */
|
|
public function an_activity_has_belongs_to_object_relation()
|
|
{
|
|
$project = factory(Project::class)->create();
|
|
$job = factory(Job::class)->create(['project_id' => $project->id]);
|
|
$task = factory(Task::class)->create(['job_id' => $job->id]);
|
|
|
|
$projectActivity = Activity::where('object_type', 'projects')->first();
|
|
$this->assertInstanceOf(Project::class, $projectActivity->object);
|
|
$this->assertEquals($projectActivity->object_id, $projectActivity->object->id);
|
|
|
|
$jobActivity = Activity::where('object_type', 'jobs')->first();
|
|
$this->assertInstanceOf(Job::class, $jobActivity->object);
|
|
$this->assertEquals($jobActivity->object_id, $jobActivity->object->id);
|
|
|
|
$taskActivity = Activity::where('object_type', 'tasks')->first();
|
|
$this->assertInstanceOf(Task::class, $taskActivity->object);
|
|
$this->assertEquals($taskActivity->object_id, $taskActivity->object->id);
|
|
}
|
|
}
|