Migrated endpoints from user to member; Renamed membership to member

This commit is contained in:
Constantin Graf
2024-05-13 19:50:50 +02:00
parent ba335b4f05
commit b2365e2778
64 changed files with 853 additions and 456 deletions

View File

@@ -6,6 +6,7 @@ namespace Tests\Unit\Service;
use App\Enums\Role;
use App\Enums\Weekday;
use App\Models\Member;
use App\Models\Organization;
use App\Models\Project;
use App\Models\Task;
@@ -37,13 +38,13 @@ class DashboardServiceTest extends TestCase
$user = User::factory()->create([
'timezone' => 'Europe/Vienna',
]);
$user->organizations()->attach($organization);
$timeEntry1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
$timeEntry1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'start' => Carbon::create(2023, 12, 30, 23, 0, 0, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 40, 'UTC'),
]);
$timeEntry2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time NOT shifts in timezone Europe/Vienna to the next day
'start' => Carbon::create(2023, 12, 30, 22, 59, 59, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 39, 'UTC'),
@@ -87,15 +88,15 @@ class DashboardServiceTest extends TestCase
'timezone' => 'Europe/Vienna',
'week_start' => Weekday::Sunday,
]);
$user->organizations()->attach($organization);
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
// Note: This is a Sunday
$timeEntry1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'start' => Carbon::create(2023, 12, 30, 23, 0, 0, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 40, 'UTC'),
]);
// Note: This is a Saturday
$timeEntry2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time NOT shifts in timezone Europe/Vienna to the next day
'start' => Carbon::create(2023, 12, 30, 22, 59, 59, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 39, 'UTC'),
@@ -147,15 +148,15 @@ class DashboardServiceTest extends TestCase
'timezone' => 'Europe/Vienna',
'week_start' => Weekday::Sunday,
]);
$user->organizations()->attach($organization);
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
// Note: This is a Sunday
$timeEntry1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'start' => Carbon::create(2023, 12, 30, 23, 0, 0, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 40, 'UTC'),
]);
// Note: This is a Saturday
$timeEntry2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time NOT shifts in timezone Europe/Vienna to the next day
'start' => Carbon::create(2023, 12, 30, 22, 59, 59, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 39, 'UTC'),
@@ -178,23 +179,23 @@ class DashboardServiceTest extends TestCase
'timezone' => 'Europe/Vienna',
'week_start' => Weekday::Sunday,
]);
$user->organizations()->attach($organization);
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
// Note: This is a Sunday
$timeEntry1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'billable' => true,
'start' => Carbon::create(2023, 12, 30, 23, 0, 0, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 40, 'UTC'),
]);
// Note: This is a Sunday (non-billable)
$timeEntry1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'billable' => false,
'start' => Carbon::create(2023, 12, 30, 23, 0, 40, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 59, 'UTC'),
]);
// Note: This is a Saturday
$timeEntry2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time NOT shifts in timezone Europe/Vienna to the next day
'billable' => true,
'start' => Carbon::create(2023, 12, 30, 22, 59, 59, 'UTC'),
@@ -221,9 +222,9 @@ class DashboardServiceTest extends TestCase
'timezone' => 'Europe/Vienna',
'week_start' => Weekday::Sunday,
]);
$user->organizations()->attach($organization);
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
// Note: This is a Sunday
$timeEntry1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'billable' => true,
'billable_rate' => 50 * 100,
@@ -231,14 +232,14 @@ class DashboardServiceTest extends TestCase
'end' => Carbon::create(2023, 12, 31, 0, 0, 0, 'UTC'),
]);
// Note: This is a Sunday (non-billable)
$timeEntry2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time shifts in timezone Europe/Vienna to the next day
'billable' => false,
'start' => Carbon::create(2023, 12, 30, 23, 0, 40, 'UTC'),
'end' => Carbon::create(2023, 12, 30, 23, 0, 59, 'UTC'),
]);
// Note: This is a Saturday
$timeEntry3 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry3 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: The start time NOT shifts in timezone Europe/Vienna to the next day
'billable' => true,
'billable_rate' => 100 * 100,
@@ -267,42 +268,40 @@ class DashboardServiceTest extends TestCase
'week_start' => Weekday::Sunday,
]);
$organization = Organization::factory()->withOwner($user)->create();
$organization->users()->attach($user, [
'role' => Role::Owner->value,
]);
$member = Member::factory()->forUser($user)->forOrganization($organization)->role(Role::Owner)->create();
$project1 = Project::factory()->forOrganization($organization)->create();
$project2 = Project::factory()->forOrganization($organization)->create();
$timeEntry1Project1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->forProject($project1)->create([
$timeEntry1Project1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->forProject($project1)->create([
// Note: At the start of the week
'start' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry2Project1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->forProject($project1)->create([
$timeEntry2Project1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->forProject($project1)->create([
// Note: At the end of the week
'start' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry1Project2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->forProject($project2)->create([
$timeEntry1Project2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->forProject($project2)->create([
// Note: At the start of the week
'start' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry2Project2 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->forProject($project2)->create([
$timeEntry2Project2 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->forProject($project2)->create([
// Note: At the end of the week
'start' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry1WithoutProject = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1WithoutProject = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: At the start of the week
'start' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry2WithoutProject = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2WithoutProject = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: At the end of the week
'start' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry1WithoutProjectOutsideOfWeek = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1WithoutProjectOutsideOfWeek = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: Outside of week
'start' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->subSecond()->utc(),
'end' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(39)->utc(),
@@ -312,7 +311,7 @@ class DashboardServiceTest extends TestCase
$result = $this->dashboardService->weeklyProjectOverview($user, $organization);
// Assert
$this->assertSame([
$this->assertEqualsCanonicalizing([
[
'value' => 80,
'id' => $project1->getKey(),
@@ -345,18 +344,18 @@ class DashboardServiceTest extends TestCase
'timezone' => 'Europe/Vienna',
'week_start' => Weekday::Sunday,
]);
$user->organizations()->attach($organization);
$timeEntry1WithoutProject = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
$timeEntry1WithoutProject = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: At the start of the week
'start' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry2WithoutProject = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry2WithoutProject = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: At the end of the week
'start' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->utc(),
'end' => $now->endOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(40)->utc(),
]);
$timeEntry1WithoutProjectOutsideOfWeek = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1WithoutProjectOutsideOfWeek = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
// Note: Outside of week
'start' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->subSecond()->utc(),
'end' => $now->startOfWeek(Weekday::Sunday->carbonWeekDay())->addSeconds(39)->utc(),
@@ -386,7 +385,7 @@ class DashboardServiceTest extends TestCase
'timezone' => 'Europe/Vienna',
'week_start' => Weekday::Sunday,
]);
$user->organizations()->attach($organization);
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
// Act
$result = $this->dashboardService->weeklyProjectOverview($user, $organization);
@@ -406,31 +405,31 @@ class DashboardServiceTest extends TestCase
{
// Arrange
$organization = Organization::factory()->create();
$user1 = User::factory()->create();
$user2 = User::factory()->create();
$user3 = User::factory()->create();
$user4 = User::factory()->create();
$user5 = User::factory()->create();
$member1 = Member::factory()->forOrganization($organization)->create();
$member2 = Member::factory()->forOrganization($organization)->create();
$member3 = Member::factory()->forOrganization($organization)->create();
$member4 = Member::factory()->forOrganization($organization)->create();
$member5 = Member::factory()->forOrganization($organization)->create();
$task1 = Task::factory()->forOrganization($organization)->create();
$timeEntry1 = TimeEntry::factory()->forUser($user1)->forOrganization($organization)->active()->create([
$timeEntry1 = TimeEntry::factory()->forMember($member1)->forOrganization($organization)->active()->create([
'start' => now()->subMinutes(10),
]);
$timeEntry2 = TimeEntry::factory()->forUser($user2)->forOrganization($organization)->create([
$timeEntry2 = TimeEntry::factory()->forMember($member2)->forOrganization($organization)->create([
'start' => now()->subMinutes(20),
]);
$timeEntry3 = TimeEntry::factory()->forUser($user3)->forOrganization($organization)->forTask($task1)->create([
$timeEntry3 = TimeEntry::factory()->forMember($member3)->forOrganization($organization)->forTask($task1)->create([
'description' => '',
'start' => now()->subMinutes(30),
]);
$timeEntry4 = TimeEntry::factory()->forUser($user4)->forOrganization($organization)->forTask($task1)->create([
$timeEntry4 = TimeEntry::factory()->forMember($member4)->forOrganization($organization)->forTask($task1)->create([
'description' => 'TEST 123',
'start' => now()->subMinutes(40),
]);
$timeEntry5 = TimeEntry::factory()->forUser($user4)->forOrganization($organization)->forTask($task1)->create([
$timeEntry5 = TimeEntry::factory()->forMember($member4)->forOrganization($organization)->forTask($task1)->create([
'description' => 'TEST 321',
'start' => now()->subMinutes(50),
]);
$timeEntry6 = TimeEntry::factory()->forUser($user5)->forOrganization($organization)->forTask($task1)->create([
$timeEntry6 = TimeEntry::factory()->forMember($member5)->forOrganization($organization)->forTask($task1)->create([
'description' => 'TEST 321',
'start' => now()->subMinutes(60),
]);
@@ -441,32 +440,32 @@ class DashboardServiceTest extends TestCase
// Assert
$this->assertSame([
[
'user_id' => $user1->getKey(),
'name' => $user1->name,
'member_id' => $member1->getKey(),
'name' => $member1->user->name,
'description' => $timeEntry1->description,
'time_entry_id' => $timeEntry1->getKey(),
'task_id' => null,
'status' => true,
],
[
'user_id' => $user2->getKey(),
'name' => $user2->name,
'member_id' => $member2->getKey(),
'name' => $member2->user->name,
'description' => $timeEntry2->description,
'time_entry_id' => $timeEntry2->getKey(),
'task_id' => null,
'status' => false,
],
[
'user_id' => $user3->getKey(),
'name' => $user3->name,
'member_id' => $member3->getKey(),
'name' => $member3->user->name,
'description' => $timeEntry3->description,
'time_entry_id' => $timeEntry3->getKey(),
'task_id' => $task1->getKey(),
'status' => false,
],
[
'user_id' => $user4->getKey(),
'name' => $user4->name,
'member_id' => $member4->getKey(),
'name' => $member4->user->name,
'description' => $timeEntry4->description,
'time_entry_id' => $timeEntry4->getKey(),
'task_id' => $task1->getKey(),
@@ -480,25 +479,26 @@ class DashboardServiceTest extends TestCase
// Arrange
$organization = Organization::factory()->create();
$user = User::factory()->create();
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
$task1 = Task::factory()->forOrganization($organization)->create();
$task2 = Task::factory()->forOrganization($organization)->create();
$task3 = Task::factory()->forOrganization($organization)->create();
$task4 = Task::factory()->forOrganization($organization)->create();
$task5 = Task::factory()->forOrganization($organization)->create();
$timeEntry1Task1 = TimeEntry::factory()->forTask($task1)->forUser($user)->forOrganization($organization)->create([
$timeEntry1Task1 = TimeEntry::factory()->forTask($task1)->forMember($member)->forOrganization($organization)->create([
'start' => now()->subMinutes(20),
]);
$timeEntry1Task2 = TimeEntry::factory()->forTask($task2)->forUser($user)->forOrganization($organization)->create([
$timeEntry1Task2 = TimeEntry::factory()->forTask($task2)->forMember($member)->forOrganization($organization)->create([
'start' => now()->subMinutes(30),
]);
$timeEntry1Task3 = TimeEntry::factory()->forTask($task3)->forUser($user)->forOrganization($organization)->create([
$timeEntry1Task3 = TimeEntry::factory()->forTask($task3)->forMember($member)->forOrganization($organization)->create([
'start' => now()->subMinutes(40),
]);
$timeEntry1Task4 = TimeEntry::factory()->forTask($task4)->forUser($user)->forOrganization($organization)->create([
$timeEntry1Task4 = TimeEntry::factory()->forTask($task4)->forMember($member)->forOrganization($organization)->create([
'start' => now()->subMinutes(50),
]);
$timeEntry1Task5 = TimeEntry::factory()->forTask($task5)->forUser($user)->forOrganization($organization)->create([
$timeEntry1Task5 = TimeEntry::factory()->forTask($task5)->forMember($member)->forOrganization($organization)->create([
'start' => now()->subMinutes(60),
]);
@@ -543,15 +543,16 @@ class DashboardServiceTest extends TestCase
$user = User::factory()->create([
'timezone' => 'Europe/Vienna',
]);
$timeEntryOverWholePeriod = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$member = Member::factory()->forUser($user)->forOrganization($organization)->create();
$timeEntryOverWholePeriod = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
'start' => now('Europe/Vienna')->subDays(7)->startOfDay()->utc(),
'end' => now('Europe/Vienna')->endOfDay()->addSecond()->utc(), // TODO: fix problem with last second
]);
$timeEntryOverWholePeriodWithoutEnd = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntryOverWholePeriodWithoutEnd = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
'start' => now('Europe/Vienna')->subDays(7)->startOfDay()->utc(),
'end' => null,
]);
$timeEntry1Task1 = TimeEntry::factory()->forUser($user)->forOrganization($organization)->create([
$timeEntry1Task1 = TimeEntry::factory()->forMember($member)->forOrganization($organization)->create([
'start' => now('Europe/Vienna')->subMinutes(30)->utc(),
'end' => now('Europe/Vienna')->subMinutes(20)->utc(),
]);