changes to sms packages and option to create user
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
|
||||
use App\Models\Activity;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Inertia\Testing\AssertableInertia as Assert;
|
||||
|
||||
uses(RefreshDatabase::class);
|
||||
|
||||
it('marks activity as read with patch request', function () {
|
||||
$user = User::factory()->create();
|
||||
$this->actingAs($user);
|
||||
|
||||
// Create required related models (using the same approach as NotificationsUnreadFilterTest)
|
||||
$action = \App\Models\Action::factory()->create();
|
||||
$decision = \App\Models\Decision::factory()->create();
|
||||
$clientCase = \App\Models\ClientCase::factory()->create();
|
||||
|
||||
// Create an activity
|
||||
$activity = Activity::query()->create([
|
||||
'due_date' => now()->toDateString(),
|
||||
'amount' => 100,
|
||||
'action_id' => $action->id,
|
||||
'decision_id' => $decision->id,
|
||||
'client_case_id' => $clientCase->id,
|
||||
]);
|
||||
|
||||
// Ensure no read record exists initially
|
||||
$this->assertDatabaseMissing('activity_notification_reads', [
|
||||
'user_id' => $user->id,
|
||||
'activity_id' => $activity->id,
|
||||
]);
|
||||
|
||||
// Send PATCH request to mark as read
|
||||
$response = $this->patch(route('notifications.activity.read'), [
|
||||
'activity_id' => $activity->id,
|
||||
]);
|
||||
|
||||
$response->assertRedirect();
|
||||
|
||||
// Verify the read record was created
|
||||
$this->assertDatabaseHas('activity_notification_reads', [
|
||||
'user_id' => $user->id,
|
||||
'activity_id' => $activity->id,
|
||||
]);
|
||||
});
|
||||
|
||||
it('requires authentication', function () {
|
||||
// Create required related models
|
||||
$action = \App\Models\Action::factory()->create();
|
||||
$decision = \App\Models\Decision::factory()->create();
|
||||
$clientCase = \App\Models\ClientCase::factory()->create();
|
||||
|
||||
$activity = Activity::query()->create([
|
||||
'due_date' => now()->toDateString(),
|
||||
'amount' => 100,
|
||||
'action_id' => $action->id,
|
||||
'decision_id' => $decision->id,
|
||||
'client_case_id' => $clientCase->id,
|
||||
]);
|
||||
|
||||
$response = $this->patch(route('notifications.activity.read'), [
|
||||
'activity_id' => $activity->id,
|
||||
]);
|
||||
|
||||
$response->assertStatus(302); // Redirect to login
|
||||
});
|
||||
|
||||
it('validates activity_id parameter', function () {
|
||||
$user = User::factory()->create();
|
||||
$this->actingAs($user);
|
||||
|
||||
// Test missing activity_id
|
||||
$response = $this->patch(route('notifications.activity.read'), []);
|
||||
$response->assertSessionHasErrors(['activity_id']);
|
||||
|
||||
// Test invalid activity_id
|
||||
$response = $this->patch(route('notifications.activity.read'), [
|
||||
'activity_id' => 99999, // Non-existent ID
|
||||
]);
|
||||
$response->assertSessionHasErrors(['activity_id']);
|
||||
});
|
||||
|
||||
it('excludes read activities from unread notifications page', function () {
|
||||
$user = User::factory()->create();
|
||||
$this->actingAs($user);
|
||||
|
||||
// Create required related models
|
||||
$action = \App\Models\Action::factory()->create();
|
||||
$decision = \App\Models\Decision::factory()->create();
|
||||
$clientCase = \App\Models\ClientCase::factory()->create();
|
||||
|
||||
// Create two activities due today
|
||||
$activity1 = Activity::query()->create([
|
||||
'due_date' => now()->toDateString(),
|
||||
'amount' => 100,
|
||||
'action_id' => $action->id,
|
||||
'decision_id' => $decision->id,
|
||||
'client_case_id' => $clientCase->id,
|
||||
]);
|
||||
|
||||
$activity2 = Activity::query()->create([
|
||||
'due_date' => now()->toDateString(),
|
||||
'amount' => 200,
|
||||
'action_id' => $action->id,
|
||||
'decision_id' => $decision->id,
|
||||
'client_case_id' => $clientCase->id,
|
||||
]);
|
||||
|
||||
// Initially, both activities should appear in unread notifications
|
||||
$response = $this->get(route('notifications.unread'));
|
||||
$response->assertInertia(function (Assert $page) {
|
||||
$page->where('activities.total', 2);
|
||||
});
|
||||
|
||||
// Mark first activity as read
|
||||
$this->patch(route('notifications.activity.read'), ['activity_id' => $activity1->id]);
|
||||
|
||||
// Now only one activity should appear in unread notifications
|
||||
$response = $this->get(route('notifications.unread'));
|
||||
$response->assertInertia(function (Assert $page) {
|
||||
$page->where('activities.total', 1);
|
||||
});
|
||||
|
||||
// Mark second activity as read
|
||||
$this->patch(route('notifications.activity.read'), ['activity_id' => $activity2->id]);
|
||||
|
||||
// Now no activities should appear in unread notifications
|
||||
$response = $this->get(route('notifications.unread'));
|
||||
$response->assertInertia(function (Assert $page) {
|
||||
$page->where('activities.total', 0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user