Skip to content

Commit fc17c84

Browse files
committed
Add test for autocomplete in embed
1 parent eca7e82 commit fc17c84

File tree

3 files changed

+73
-5
lines changed

3 files changed

+73
-5
lines changed

tests/Http/Api/ApiFormAutocompleteControllerTest.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
<?php
22

33
use Code16\Sharp\Form\Fields\SharpFormAutocompleteRemoteField;
4+
use Code16\Sharp\Form\Fields\SharpFormEditorField;
45
use Code16\Sharp\Form\Fields\SharpFormTextField;
56
use Code16\Sharp\Tests\Fixtures\Entities\PersonEntity;
67
use Code16\Sharp\Tests\Fixtures\Sharp\PersonForm;
8+
use Code16\Sharp\Tests\Http\Api\Fixtures\ApiFormAutocompleteControllerAutocompleteEmbed;
79
use Code16\Sharp\Utils\Fields\FieldsContainer;
810

911
beforeEach(function () {
@@ -356,3 +358,42 @@ public function buildFormFields(FieldsContainer $formFields): void
356358
'search' => 'my search',
357359
]);
358360
})->expectException(\Code16\Sharp\Exceptions\SharpInvalidConfigException::class);
361+
362+
it('allows to call an functional endpoint for a remote autocomplete field in an embed of an Editor field', function () {
363+
fakeFormFor('person', new class() extends PersonForm
364+
{
365+
public function buildFormFields(FieldsContainer $formFields): void
366+
{
367+
$formFields->addField(
368+
SharpFormEditorField::make('editor_field')
369+
->allowEmbeds([
370+
ApiFormAutocompleteControllerAutocompleteEmbed::class
371+
])
372+
);
373+
}
374+
});
375+
376+
Route::post('/my/endpoint', function () {
377+
expect(request()->get('query'))->toBe('my search');
378+
379+
return [
380+
['id' => 1, 'label' => 'John'],
381+
];
382+
});
383+
384+
$this
385+
->postJson(route('code16.sharp.api.form.autocomplete.index', [
386+
'entityKey' => 'person',
387+
'autocompleteFieldKey' => 'autocomplete_field',
388+
'embedKey' => (new ApiFormAutocompleteControllerAutocompleteEmbed())->key(),
389+
]), [
390+
'endpoint' => '/my/endpoint',
391+
'search' => 'my search',
392+
])
393+
->assertOk()
394+
->assertJson([
395+
'data' => [
396+
['id' => 1, 'label' => 'John'],
397+
],
398+
]);
399+
});
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace Code16\Sharp\Tests\Http\Api\Fixtures;
4+
5+
use Code16\Sharp\Form\Fields\Embeds\SharpFormEditorEmbed;
6+
use Code16\Sharp\Form\Fields\SharpFormAutocompleteRemoteField;
7+
use Code16\Sharp\Utils\Fields\FieldsContainer;
8+
9+
class ApiFormAutocompleteControllerAutocompleteEmbed extends SharpFormEditorEmbed
10+
{
11+
public function buildEmbedConfig(): void
12+
{
13+
$this->configureTagName('x-embed');
14+
}
15+
16+
public function buildFormFields(FieldsContainer $formFields): void
17+
{
18+
$formFields
19+
->addField(
20+
SharpFormAutocompleteRemoteField::make('autocomplete_field')
21+
->setRemoteMethodPOST()
22+
->setRemoteEndpoint('/my/endpoint')
23+
);
24+
}
25+
26+
public function updateContent(array $data = []): array
27+
{
28+
return $data;
29+
}
30+
}

tests/Unit/Form/Fields/Formatters/Fixtures/EditorFormatterTestEmbed.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,8 @@ public function buildEmbedConfig(): void
2222
public function buildFormFields(FieldsContainer $formFields): void
2323
{
2424
$formFields
25-
->addField(
26-
SharpFormTextField::make('slot')
27-
)->addField(
28-
SharpFormUploadField::make('visual')->setImageOnly()
29-
);
25+
->addField(SharpFormTextField::make('slot'))
26+
->addField(SharpFormUploadField::make('visual')->setImageOnly());
3027
}
3128

3229
public function transformDataForTemplate(array $data, bool $isForm): array

0 commit comments

Comments
 (0)