opnform-host-nginx/api/tests/Feature/Forms/FormSubmissionExportTest.php

98 lines
2.7 KiB
PHP

<?php
use App\Models\User;
use Laravel\Sanctum\Sanctum;
it('can export form submissions with selected columns', function () {
$user = $this->actingAsProUser();
$workspace = $this->createUserWorkspace($user);
$form = $this->createForm($user, $workspace, [
'properties' => [
[
'id' => 'name_field',
'name' => 'Name',
'type' => 'text',
'required' => true,
],
[
'id' => 'email_field',
'name' => 'Email',
'type' => 'email',
'required' => true,
]
]
]);
// Create some submissions
$submissions = [
['name_field' => 'John Doe', 'email_field' => 'john@example.com'],
['name_field' => 'Jane Smith', 'email_field' => 'jane@example.com']
];
foreach ($submissions as $submission) {
$formData = $this->generateFormSubmissionData($form, $submission);
$this->postJson(route('forms.answer', $form->slug), $formData)
->assertSuccessful();
}
// Test export with selected columns
$response = $this->postJson(route('open.forms.submissions.export', [
'id' => $form->id,
'columns' => [
'name_field' => true,
'email_field' => true,
'created_at' => true
]
]));
$response->assertSuccessful()
->assertHeader('content-disposition', 'attachment; filename=' . $form->slug . '-submission-data.csv');
});
it('cannot export form submissions with invalid columns', function () {
$user = $this->actingAsProUser();
$workspace = $this->createUserWorkspace($user);
$form = $this->createForm($user, $workspace, [
'properties' => [
[
'id' => 'name_field',
'name' => 'Name',
'type' => 'text',
'required' => true,
]
]
]);
$response = $this->postJson(route('open.forms.submissions.export', [
'id' => $form->id,
'columns' => [
'invalid_field' => true,
'name_field' => true
]
]));
$response->assertStatus(422)
->assertJsonValidationErrors(['columns']);
});
it('cannot export form submissions from another user form', function () {
$user = User::factory()->create();
$user2 = User::factory()->create();
$workspace = createUserWorkspace($user2);
$form = createForm($user, $workspace);
Sanctum::actingAs($user2);
$response = $this->postJson(route('open.forms.submissions.export', [
'id' => $form->id,
'columns' => [
'name_field' => true
]
]));
$response->assertJson([
'message' => 'Unauthenticated.'
]);
});