diff --git a/app/Http/Controllers/Web/DashboardController.php b/app/Http/Controllers/Web/DashboardController.php
index 56897496..c8a0322a 100644
--- a/app/Http/Controllers/Web/DashboardController.php
+++ b/app/Http/Controllers/Web/DashboardController.php
@@ -7,12 +7,13 @@ namespace App\Http\Controllers\Web;
use App\Models\Organization;
use App\Models\User;
use App\Service\DashboardService;
+use App\Service\PermissionStore;
use Inertia\Inertia;
use Inertia\Response;
class DashboardController extends Controller
{
- public function dashboard(DashboardService $dashboardService): Response
+ public function dashboard(DashboardService $dashboardService, PermissionStore $permissionStore): Response
{
/** @var User $user */
$user = auth()->user();
@@ -24,10 +25,14 @@ class DashboardController extends Controller
$totalWeeklyBillableTime = $dashboardService->totalWeeklyBillableTime($user, $organization);
$totalWeeklyBillableAmount = $dashboardService->totalWeeklyBillableAmount($user, $organization);
$weeklyProjectOverview = $dashboardService->weeklyProjectOverview($user, $organization);
- $latestTeamActivity = $dashboardService->latestTeamActivity($organization);
$latestTasks = $dashboardService->latestTasks($user, $organization);
$lastSevenDays = $dashboardService->lastSevenDays($user, $organization);
+ $latestTeamActivity = null;
+ if ($permissionStore->has($organization, 'time-entries:view:all')) {
+ $latestTeamActivity = $dashboardService->latestTeamActivity($organization);
+ }
+
return Inertia::render('Dashboard', [
'weeklyProjectOverview' => $weeklyProjectOverview,
'latestTasks' => $latestTasks,
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index 1e94da5b..d0cf3afd 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -39,6 +39,15 @@ class UserFactory extends Factory
];
}
+ public function forCurrentOrganization(Organization $organization): static
+ {
+ return $this->state(function (array $attributes) use ($organization): array {
+ return [
+ 'current_team_id' => $organization->getKey(),
+ ];
+ });
+ }
+
public function randomTimeZone(): static
{
return $this->state(function (array $attributes) {
diff --git a/resources/js/Components/OrganizationSwitcher.vue b/resources/js/Components/OrganizationSwitcher.vue
index 6f23e88a..0d45a7c0 100644
--- a/resources/js/Components/OrganizationSwitcher.vue
+++ b/resources/js/Components/OrganizationSwitcher.vue
@@ -75,7 +75,7 @@ const switchToTeam = (team: Organization) => {
- Manage Team
+ Manage Organization
diff --git a/tests/Unit/Endpoint/Web/DashboardEndpointTest.php b/tests/Unit/Endpoint/Web/DashboardEndpointTest.php
index 12156e7b..006d08cd 100644
--- a/tests/Unit/Endpoint/Web/DashboardEndpointTest.php
+++ b/tests/Unit/Endpoint/Web/DashboardEndpointTest.php
@@ -4,7 +4,10 @@ declare(strict_types=1);
namespace Tests\Unit\Endpoint\Web;
+use App\Enums\Role;
+use App\Models\Organization;
use App\Models\User;
+use Inertia\Testing\AssertableInertia as Assert;
class DashboardEndpointTest extends EndpointTestAbstract
{
@@ -19,5 +22,61 @@ class DashboardEndpointTest extends EndpointTestAbstract
// Assert
$response->assertSuccessful();
+ $response->assertInertia(fn (Assert $page) => $page
+ ->has('weeklyProjectOverview')
+ ->has('latestTasks')
+ ->has('lastSevenDays')
+ ->has('latestTeamActivity')
+ ->has('dailyTrackedHours')
+ ->has('totalWeeklyTime')
+ ->has('totalWeeklyBillableTime')
+ ->has('totalWeeklyBillableAmount')
+ ->has('weeklyHistory')
+ ->whereNot('weeklyProjectOverview', null)
+ ->whereNot('latestTasks', null)
+ ->whereNot('lastSevenDays', null)
+ ->whereNot('latestTeamActivity', null)
+ ->whereNot('dailyTrackedHours', null)
+ ->whereNot('totalWeeklyTime', null)
+ ->whereNot('totalWeeklyBillableTime', null)
+ ->whereNot('totalWeeklyBillableAmount', null)
+ ->whereNot('weeklyHistory', null)
+ ->whereNot('latestTeamActivity', null)
+ );
+ }
+
+ public function test_showing_dashboard_succeeds_with_less_data_for_user_with_employee_role(): void
+ {
+ // Arrange
+ $organization = Organization::factory()->create();
+ $user = User::factory()->forCurrentOrganization($organization)->create();
+ $organization->users()->attach($user, ['role' => Role::Employee->value]);
+ $this->actingAs($user);
+
+ // Act
+ $response = $this->get('/dashboard');
+
+ // Assert
+ $response->assertSuccessful();
+ $response->assertInertia(fn (Assert $page) => $page
+ ->has('weeklyProjectOverview')
+ ->has('latestTasks')
+ ->has('lastSevenDays')
+ ->has('latestTeamActivity')
+ ->has('dailyTrackedHours')
+ ->has('totalWeeklyTime')
+ ->has('totalWeeklyBillableTime')
+ ->has('totalWeeklyBillableAmount')
+ ->has('weeklyHistory')
+ ->whereNot('weeklyProjectOverview', null)
+ ->whereNot('latestTasks', null)
+ ->whereNot('lastSevenDays', null)
+ ->where('latestTeamActivity', null)
+ ->whereNot('dailyTrackedHours', null)
+ ->whereNot('totalWeeklyTime', null)
+ ->whereNot('totalWeeklyBillableTime', null)
+ ->whereNot('totalWeeklyBillableAmount', null)
+ ->whereNot('weeklyHistory', null)
+ );
}
}