Skip to content

Commit

Permalink
Users API: Fixed sending invite when using form requests
Browse files Browse the repository at this point in the history
- Cast send_invite value in cases where it might not have been a boolean,
  which occurs on non-JSON requests.
- Added test to cover.
- Updated API docs to mention and shown boolean usage.
  • Loading branch information
ssddanbrown committed Dec 13, 2023
1 parent 4896c40 commit 56d07f1
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
2 changes: 1 addition & 1 deletion app/Users/Controllers/UserApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public function list()
public function create(Request $request)
{
$data = $this->validate($request, $this->rules()['create']);
$sendInvite = ($data['send_invite'] ?? false) === true;
$sendInvite = boolval($data['send_invite'] ?? false) === true;

$user = null;
DB::transaction(function () use ($data, $sendInvite, &$user) {
Expand Down
10 changes: 9 additions & 1 deletion resources/views/api-docs/parts/getting-started.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@
</em>
</p>

<p>
<em>
* Form requests can accept boolean (<code>true</code>/<code>false</code>) values via a <code>1</code> or <code>0</code>.
</em>
</p>

<p>
Regardless of format chosen, ensure you set a <code>Content-Type</code> header on requests so that the system can correctly parse your request data.
The API is primarily designed to be interfaced using JSON, since responses are always in JSON format, hence examples in this documentation will be shown as JSON.
Expand All @@ -82,17 +88,19 @@

<pre><code class="language-json">{
"name": "My new item",
"locked": true,
"books": [105, 263],
"tags": [{"name": "Tag Name", "value": "Tag Value"}],
}</code></pre>

<p><strong>x-www-form-urlencoded</strong></p>

<pre><code class="language-text">name=My%20new%20item&books%5B0%5D=105&books%5B1%5D=263&tags%5B0%5D%5Bname%5D=Tag%20Name&tags%5B0%5D%5Bvalue%5D=Tag%20Value</code></pre>
<pre><code class="language-text">name=My%20new%20item&locked=1&books%5B0%5D=105&books%5B1%5D=263&tags%5B0%5D%5Bname%5D=Tag%20Name&tags%5B0%5D%5Bvalue%5D=Tag%20Value</code></pre>

<p><strong>x-www-form-urlencoded (Decoded for readability)</strong></p>

<pre><code class="language-text">name=My new item
locked=1
books[0]=105
books[1]=263
tags[0][name]=Tag Name
Expand Down
17 changes: 17 additions & 0 deletions tests/Api/UsersApiTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,23 @@ public function test_create_with_send_invite()
Notification::assertSentTo($user, UserInviteNotification::class);
}

public function test_create_with_send_invite_works_with_value_of_1()
{
$this->actingAsApiAdmin();
Notification::fake();

$resp = $this->postJson($this->baseEndpoint, [
'name' => 'Benny Boris',
'email' => '[email protected]',
'send_invite' => '1', // Submissions via x-www-form-urlencoded/form-data may use 1 instead of boolean
]);

$resp->assertStatus(200);
/** @var User $user */
$user = User::query()->where('email', '=', '[email protected]')->first();
Notification::assertSentTo($user, UserInviteNotification::class);
}

public function test_create_name_and_email_validation()
{
$this->actingAsApiAdmin();
Expand Down

0 comments on commit 56d07f1

Please sign in to comment.