create(); $workspace = Workspace::factory()->create(); $workspace->users()->attach($user, ['role' => 'owner']); $client = Client::factory()->create(['workspace_id' => $workspace->id]); $declaration = Declaration::factory()->create([ 'workspace_id' => $workspace->id, 'client_id' => $client->id, ]); $mentionedBy = User::factory()->create(); $user->notify(new DeclarationMentionNotification( $declaration, $mentionedBy, 'Please review.', )); $notification = $user->notifications()->first(); expect($notification->read_at)->toBeNull(); $response = $this->actingAs($user)->post(route('notifications.read', $notification->id)); $response->assertRedirect(); $notification->refresh(); expect($notification->read_at)->not->toBeNull(); }); test('cannot mark another user notification as read', function () { $user = User::factory()->create(); $other = User::factory()->create(); $workspace = Workspace::factory()->create(); $workspace->users()->attach($other, ['role' => 'owner']); $client = Client::factory()->create(['workspace_id' => $workspace->id]); $declaration = Declaration::factory()->create([ 'workspace_id' => $workspace->id, 'client_id' => $client->id, ]); $mentionedBy = User::factory()->create(); $other->notify(new DeclarationMentionNotification( $declaration, $mentionedBy, 'Hey.', )); $notification = $other->notifications()->first(); $response = $this->actingAs($user)->post(route('notifications.read', $notification->id)); $response->assertNotFound(); }); test('user can mark all notifications as read', function () { $user = User::factory()->create(); $workspace = Workspace::factory()->create(); $workspace->users()->attach($user, ['role' => 'owner']); $client = Client::factory()->create(['workspace_id' => $workspace->id]); $mentionedBy = User::factory()->create(); for ($i = 0; $i < 3; $i++) { $declaration = Declaration::factory()->create([ 'workspace_id' => $workspace->id, 'client_id' => $client->id, ]); $user->notify(new DeclarationMentionNotification( $declaration, $mentionedBy, "Message $i", )); } expect($user->unreadNotifications()->count())->toBe(3); $response = $this->actingAs($user)->post(route('notifications.readAll')); $response->assertRedirect(); expect($user->unreadNotifications()->count())->toBe(0); });