Separated laravel app to its own folder (#540)

This commit is contained in:
Julien Nahum
2024-08-26 18:24:56 +02:00
committed by GitHub
parent 39b8df5eed
commit 5bd1dda504
546 changed files with 124 additions and 143 deletions

View File

@@ -0,0 +1,244 @@
<?php
use App\Models\Integration\FormIntegration;
use App\Models\User;
use Laravel\Sanctum\Sanctum;
use Tests\Helpers\FormSubmissionDataFactory;
use function Pest\Laravel\assertDatabaseCount;
use function Pest\Laravel\delete;
use function Pest\Laravel\post;
use function PHPUnit\Framework\assertEquals;
test('create an integration', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form = createForm($user, $workspace, ['title' => 'First form']);
Sanctum::actingAs(
$user,
['manage-integrations']
);
$this->withoutExceptionHandling();
post(route('zapier.webhooks.store'), [
'form_id' => $form->id,
'hookUrl' => $hookUrl = 'https://zapier.com/hook/test'
])
->assertOk();
assertDatabaseCount('form_integrations', 1);
$integration = FormIntegration::first();
assertEquals($form->id, $integration->form_id);
assertEquals($hookUrl, $integration->data->hook_url);
});
test('cannot create an integration without a corresponding ability', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form = createForm($user, $workspace, ['title' => 'First form']);
Sanctum::actingAs($user);
post(route('zapier.webhooks.store'), [
'form_id' => $form->id,
'hookUrl' => 'https://zapier.com/hook/test'
])
->assertForbidden();
assertDatabaseCount('form_integrations', 0);
});
test('cannot create an integration for other users form', function () {
$user = User::factory()->create();
$user2 = User::factory()->create();
$workspace = createUserWorkspace($user2);
$form = createForm($user2, $workspace, ['title' => 'First form']);
Sanctum::actingAs($user);
post(route('zapier.webhooks.store'), [
'form_id' => $form->id,
'hookUrl' => 'https://zapier.com/hook/test'
])
->assertForbidden();
assertDatabaseCount('form_integrations', 0);
});
test('delete an integration', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form = createForm($user, $workspace, ['title' => 'First form']);
Sanctum::actingAs(
$user,
['manage-integrations']
);
$integration = FormIntegration::factory()
->for($form)
->create([
'data' => [
'hook_url' => $hookUrl = 'https://zapier.com/hook/test'
]
]);
assertDatabaseCount('form_integrations', 1);
delete(route('zapier.webhooks.destroy', $integration), [
'form_id' => $form->id,
'hookUrl' => $hookUrl,
])
->assertOk();
assertDatabaseCount('form_integrations', 0);
});
test('cannot delete an integration with an incorrect hook url', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form = createForm($user, $workspace, ['title' => 'First form']);
Sanctum::actingAs(
$user,
['manage-integrations']
);
$integration = FormIntegration::factory()
->for($form)
->create([
'data' => [
'hook_url' => 'https://zapier.com/hook/test'
]
]);
delete(route('zapier.webhooks.destroy', $integration), [
'form_id' => $form->id,
'hookUrl' => 'https://google.com',
])
->assertOk();
assertDatabaseCount('form_integrations', 1);
});
test('poll for the latest submission', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form = createForm($user, $workspace, [
'properties' => [
[
'id' => 'title',
'name' => 'Name',
'type' => 'text',
'hidden' => false,
'required' => true,
'logic' => [
'conditions' => null,
'actions' => [],
],
],
[
'id' => 'age',
'name' => 'Age',
'type' => 'number',
'hidden' => false,
'required' => true,
],
],
]);
// Create a submission for the form
$formData = FormSubmissionDataFactory::generateSubmissionData($form);
$this->postJson(route('forms.answer', $form->slug), $formData)
->assertSuccessful()
->assertJson([
'type' => 'success',
'message' => 'Form submission saved.',
]);
// Create a webhook integration for the form
$integration = FormIntegration::factory()
->for($form)
->create([
'data' => [
'hook_url' => 'https://zapier.com/hook/test'
]
]);
Sanctum::actingAs($user, ['view', 'manage-integrations']);
// Call the poll endpoint
$response = $this->getJson(route('zapier.webhooks.poll', ['form_id' => $form->id]));
// Assert the response status is OK
$response->assertOk();
// Decode the response data
$responseData = $response->json()[0];
$receivedData = collect($responseData['data'])->values()->pluck('value')->toArray();
$this->assertEmpty(array_diff(array_values($formData), $receivedData));
});
test('make up a submission when polling without any submission', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form = createForm($user, $workspace, [
'properties' => [
[
'id' => 'title',
'name' => 'Name',
'type' => 'text',
'hidden' => false,
'required' => true,
'logic' => [
'conditions' => null,
'actions' => [],
],
],
[
'id' => 'age',
'name' => 'Age',
'type' => 'number',
'hidden' => false,
'required' => true,
],
],
]);
// Create a webhook integration for the form
$integration = FormIntegration::factory()
->for($form)
->create([
'data' => [
'hook_url' => 'https://zapier.com/hook/test'
]
]);
Sanctum::actingAs($user, ['view', 'manage-integrations']);
// Call the poll endpoint
$this->withoutExceptionHandling();
$response = $this->getJson(route('zapier.webhooks.poll', ['form_id' => $form->id]));
// Assert the response status is OK
$response->assertOk();
// Decode the response data
$responseData = $response->json()[0];
ray($responseData);
ray($responseData);
$this->assertNotEmpty($responseData['data']);
$this->assertTrue(count($responseData['data']) == 2);
});

View File

@@ -0,0 +1,61 @@
<?php
use App\Models\User;
use Laravel\Sanctum\Sanctum;
use function Pest\Laravel\get;
test('list all forms of a given workspace', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form1 = createForm($user, $workspace, ['title' => 'First form']);
$form2 = createForm($user, $workspace, ['title' => 'Second form']);
Sanctum::actingAs(
$user,
['list-forms']
);
get(route('zapier.forms', ['workspace_id' => $workspace->id]))
->assertOk()
->assertJsonCount(2)
->assertJson([
[
'id' => $form1->id,
'name' => $form1->title,
],
[
'id' => $form2->id,
'name' => $form2->title,
],
]);
});
test('cannot list forms without a corresponding ability', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$form1 = createForm($user, $workspace, ['title' => 'First form']);
$form2 = createForm($user, $workspace, ['title' => 'Second form']);
Sanctum::actingAs($user);
get(route('zapier.forms', ['workspace_id' => $workspace->id]))
->assertForbidden();
});
test('cannot other users forms', function () {
$user = User::factory()->create();
$user2 = User::factory()->create();
$workspace = createUserWorkspace($user2);
$form1 = createForm($user, $workspace, ['title' => 'First form']);
$form2 = createForm($user, $workspace, ['title' => 'Second form']);
Sanctum::actingAs($user);
get(route('zapier.forms', ['workspace_id' => $workspace->id]))
->assertForbidden();
});

View File

@@ -0,0 +1,39 @@
<?php
use App\Models\User;
use Laravel\Sanctum\Sanctum;
use function Pest\Laravel\get;
test('list all workspaces of a user', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
$anotherUser = User::factory()->create();
$anotherWorkspace = createUserWorkspace($anotherUser);
Sanctum::actingAs(
$user,
['list-workspaces']
);
get(route('zapier.workspaces'))
->assertOk()
->assertJsonCount(1)
->assertJson([
[
'id' => $workspace->id,
'name' => $workspace->name,
]
]);
});
test('cannot list workspaces without a corresponding ability', function () {
$user = User::factory()->create();
$workspace = createUserWorkspace($user);
Sanctum::actingAs($user);
get(route('zapier.workspaces'))
->assertForbidden();
});

View File

@@ -0,0 +1,24 @@
<?php
use App\Models\User;
use Laravel\Sanctum\Sanctum;
use function Pest\Laravel\get;
test('validate auth', function () {
$user = User::factory()->create();
Sanctum::actingAs($user);
get(route('zapier.validate'))
->assertOk()
->assertJson([
'name' => $user->name,
'email' => $user->email,
]);
});
test('cannot validate auth with incorrect credentials', function () {
get(route('zapier.validate'))
->assertUnauthorized();
});