Create client

This commit is contained in:
Peter Papp
2021-04-23 08:37:54 +02:00
parent 16c47465e6
commit 9a5f9fe49d
5 changed files with 157 additions and 8 deletions

View File

@@ -2,10 +2,15 @@
namespace App\Http\Controllers\Oasis;
use App\Http\Requests\Oasis\StoreClientRequest;
use App\Http\Resources\Oasis\OasisClientCollection;
use App\Http\Controllers\Controller;
use App\Http\Resources\Oasis\OasisClientResource;
use App\Models\Oasis\Client;
use Auth;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
class ClientController extends Controller
{
@@ -34,4 +39,31 @@ class ClientController extends Controller
new OasisClientCollection($results), 200
);
}
/**
* @param StoreClientRequest $request
* @return Application|ResponseFactory|Response
*/
public function store(StoreClientRequest $request)
{
$client = $request->user()
->clients()
->create([
'avatar' => store_avatar($request, 'avatar') ?? null,
'name' => $request->name,
'email' => $request->email ?? null,
'phone_number' => $request->phone_number ?? null,
'address' => $request->address,
'city' => $request->city,
'postal_code' => $request->postal_code,
'country' => $request->country,
'ico' => $request->ico ?? null,
'dic' => $request->dic ?? null,
'ic_dph' => $request->ic_dph ?? null,
]);
return response(
new OasisClientResource($client), 201
);
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Http\Requests\Oasis;
use Illuminate\Foundation\Http\FormRequest;
class StoreClientRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'avatar' => 'sometimes|file|nullable',
'name' => 'required|string',
'email' => 'sometimes|email|nullable',
'phone_number' => 'sometimes|string|nullable',
'address' => 'required|string',
'city' => 'required|string',
'postal_code' => 'required|string',
'country' => 'required|string',
'ico' => 'required|string',
'dic' => 'required|string',
'ic_dph' => 'required|string',
];
}
}

View File

@@ -34,6 +34,8 @@ Route::group(['middleware' => 'api', 'prefix' => '/api/oasis'], function () {
Route::group(['prefix' => 'clients'], function () {
Route::get('/', [ClientController::class, 'index']);
Route::get('/search', [ClientController::class, 'search']);
Route::post('/', [ClientController::class, 'store']);
});
});

View File

@@ -2,8 +2,11 @@
namespace Tests\Feature\Oasis;
use Carbon\Carbon;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use App\Models\Oasis\Client;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Laravel\Sanctum\Sanctum;
use App\Models\User;
use Tests\TestCase;
@@ -25,6 +28,77 @@ class OasisClientTest extends TestCase
]);
}
/**
* @test
*/
public function user_create_new_client_with_avatar()
{
Storage::fake('local');
$avatar = UploadedFile::fake()
->image('fake-image.jpg');
$user = User::factory(User::class)
->create(['role' => 'user']);
Sanctum::actingAs($user);
$this->postJson('/api/oasis/clients', [
'avatar' => $avatar,
'name' => 'VueFileManager Inc.',
'email' => 'howdy@hi5ve.digital',
'phone_number' => '+421 950 123 456',
'address' => 'Does 12',
'city' => 'Bratislava',
'postal_code' => '076 54',
'country' => 'SK',
'ico' => '11111111',
'dic' => '11111111',
'ic_dph' => 'SK11111111',
])->assertStatus(201);
$this->assertDatabaseHas('clients', [
'user_id' => $user->id,
'name' => 'VueFileManager Inc.',
'email' => 'howdy@hi5ve.digital',
]);
Storage::disk('local')
->assertExists(
Client::first()->getRawOriginal('avatar')
);
}
/**
* @test
*/
public function user_create_new_client_without_avatar_and_contact_info()
{
$user = User::factory(User::class)
->create(['role' => 'user']);
Sanctum::actingAs($user);
$this->postJson('/api/oasis/clients', [
'avatar' => null,
'name' => 'VueFileManager Inc.',
'email' => null,
'phone_number' => null,
'address' => 'Does 12',
'city' => 'Bratislava',
'postal_code' => '076 54',
'country' => 'SK',
'ico' => '11111111',
'dic' => '11111111',
'ic_dph' => 'SK11111111',
])->assertStatus(201);
$this->assertDatabaseHas('clients', [
'user_id' => $user->id,
'name' => 'VueFileManager Inc.',
]);
}
/**
* @test
*/
@@ -59,8 +133,8 @@ class OasisClientTest extends TestCase
$client = Client::factory(Client::class)
->create([
'user_id' => $user->id,
'name' => 'VueFileManager Inc.',
'email' => 'info@company.com',
'name' => 'VueFileManager Inc.',
'email' => 'info@company.com',
]);
$this->getJson('/api/oasis/clients/search?query=vue')

View File

@@ -172,16 +172,17 @@ class OasisInvoiceTest extends TestCase
public function user_create_new_invoice_with_storing_new_client()
{
Notification::fake();
Storage::fake('local');
$avatar = UploadedFile::fake()
->image('fake-image.jpg');
$user = User::factory(User::class)
->create(['role' => 'user']);
Sanctum::actingAs($user);
$avatar = UploadedFile::fake()
->image('fake-image.jpg');
$this->postJson('/api/oasis/invoices', [
'invoice_type' => 'regular-invoice',
'invoice_number' => '2120001',
@@ -221,7 +222,9 @@ class OasisInvoiceTest extends TestCase
]);
Storage::disk('local')
->assertExists(Client::first()->getRawOriginal('avatar'));
->assertExists(
Client::first()->getRawOriginal('avatar')
);
Notification::assertTimesSent(1, InvoiceDeliveryNotification::class);
}
@@ -335,7 +338,6 @@ class OasisInvoiceTest extends TestCase
public function user_create_new_invoice_without_storing_client()
{
Notification::fake();
Storage::fake('local');
$user = User::factory(User::class)
->create(['role' => 'user']);
@@ -387,7 +389,6 @@ class OasisInvoiceTest extends TestCase
public function user_create_new_invoice_with_existing_client()
{
Notification::fake();
Storage::fake('local');
$user = User::factory(User::class)
->create(['role' => 'user']);