2022-09-20 21:59:52 +02:00
|
|
|
<?php
|
2024-02-23 11:54:12 +01:00
|
|
|
|
2022-09-20 21:59:52 +02:00
|
|
|
use Illuminate\Support\Facades\Artisan;
|
|
|
|
|
|
|
|
|
|
it('check formstat chart data', function () {
|
2024-08-29 11:14:49 +02:00
|
|
|
$user = $this->actingAsProUser();
|
2022-09-20 21:59:52 +02:00
|
|
|
$workspace = $this->createUserWorkspace($user);
|
|
|
|
|
$form = $this->createForm($user, $workspace, []);
|
|
|
|
|
|
|
|
|
|
$views = [];
|
|
|
|
|
$submissions = [];
|
|
|
|
|
// Create 10 views & submissions for past days
|
2024-02-23 11:54:12 +01:00
|
|
|
for ($i = 1; $i <= 10; $i++) {
|
2022-09-20 21:59:52 +02:00
|
|
|
$date = now()->subDays($i);
|
|
|
|
|
$dateString = $date->format('d-m-Y');
|
|
|
|
|
|
|
|
|
|
$submission = $form->submissions()->create();
|
|
|
|
|
$submission->created_at = $date;
|
|
|
|
|
$submission->save();
|
|
|
|
|
$view = $form->views()->create();
|
|
|
|
|
$view->created_at = $date;
|
|
|
|
|
$view->save();
|
|
|
|
|
|
|
|
|
|
$views[$dateString] = isset($views[$dateString]) ? ($views[$dateString] + 1) : 1;
|
|
|
|
|
$submissions[$dateString] = isset($submissions[$dateString]) ? ($submissions[$dateString] + 1) : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Run Command
|
|
|
|
|
Artisan::call('forms:database-cleanup');
|
|
|
|
|
|
|
|
|
|
// Create 5 views & submissions
|
2024-02-23 11:54:12 +01:00
|
|
|
for ($i = 1; $i <= 5; $i++) {
|
2022-09-20 21:59:52 +02:00
|
|
|
$form->views()->create();
|
|
|
|
|
$form->submissions()->create();
|
|
|
|
|
|
|
|
|
|
$dateString = now()->format('d-m-Y');
|
|
|
|
|
$views[$dateString] = isset($views[$dateString]) ? ($views[$dateString] + 1) : 1;
|
|
|
|
|
$submissions[$dateString] = isset($submissions[$dateString]) ? ($submissions[$dateString] + 1) : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Now check chart data
|
2024-09-18 19:20:52 +02:00
|
|
|
$this->getJson(route('open.workspaces.form.stats', [$workspace->id, $form->id]) . '?date_from=' . now()->subDays(29)->format('Y-m-d') . '&date_to=' . now()->format('Y-m-d'))
|
2022-09-20 21:59:52 +02:00
|
|
|
->assertSuccessful()
|
|
|
|
|
->assertJson(function (\Illuminate\Testing\Fluent\AssertableJson $json) use ($views, $submissions) {
|
|
|
|
|
return $json->whereType('views', 'array')
|
|
|
|
|
->whereType('submissions', 'array')
|
2024-02-23 11:54:12 +01:00
|
|
|
->where('views', function ($values) use ($views) {
|
|
|
|
|
foreach ($values as $date => $count) {
|
2024-03-25 11:30:00 +01:00
|
|
|
if ((isset($views[$date]) && $views[$date] != $count) || (!isset($views[$date]) && $count != 0)) {
|
2022-09-20 21:59:52 +02:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-02-23 11:54:12 +01:00
|
|
|
|
2022-09-20 21:59:52 +02:00
|
|
|
return true;
|
|
|
|
|
})
|
2024-02-23 11:54:12 +01:00
|
|
|
->where('submissions', function ($values) use ($submissions) {
|
|
|
|
|
foreach ($values as $date => $count) {
|
2024-03-25 11:30:00 +01:00
|
|
|
if ((isset($submissions[$date]) && $submissions[$date] != $count) || (!isset($submissions[$date]) && $count != 0)) {
|
2022-09-20 21:59:52 +02:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-02-23 11:54:12 +01:00
|
|
|
|
2022-09-20 21:59:52 +02:00
|
|
|
return true;
|
|
|
|
|
})
|
|
|
|
|
->etc();
|
|
|
|
|
});
|
2023-08-30 09:58:29 +02:00
|
|
|
});
|
2024-09-18 19:20:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
it('checks form stats details', function () {
|
|
|
|
|
$user = $this->actingAsProUser();
|
|
|
|
|
$workspace = $this->createUserWorkspace($user);
|
|
|
|
|
$form = $this->createForm($user, $workspace, []);
|
|
|
|
|
|
|
|
|
|
// Create form submissions with varying completion times
|
|
|
|
|
$form->submissions()->createMany([
|
|
|
|
|
['completion_time' => 60], // 1 minute
|
|
|
|
|
['completion_time' => 60], // 1 minute
|
|
|
|
|
['completion_time' => 60], // 1 minute
|
|
|
|
|
['completion_time' => 120], // 2 minutes
|
|
|
|
|
['completion_time' => 120], // 2 minutes
|
|
|
|
|
[] // Incomplete submission
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// Create form views
|
|
|
|
|
$form->views()->createMany(array_fill(0, 10, []));
|
|
|
|
|
|
|
|
|
|
$this->getJson(route('open.workspaces.form.stats-details', [$workspace->id, $form->id]))
|
|
|
|
|
->assertSuccessful()
|
|
|
|
|
->assertJson(function (\Illuminate\Testing\Fluent\AssertableJson $json) {
|
|
|
|
|
return $json->has('views')
|
|
|
|
|
->has('submissions')
|
|
|
|
|
->has('completion_rate')
|
|
|
|
|
->has('average_duration')
|
|
|
|
|
->where('views', 10)
|
|
|
|
|
->where('submissions', 6)
|
|
|
|
|
->where('completion_rate', 60)
|
|
|
|
|
->where('average_duration', '1 minute 24 seconds')
|
|
|
|
|
->etc();
|
|
|
|
|
});
|
|
|
|
|
});
|