tests for documents

This commit is contained in:
David Bomba 2020-10-12 08:34:02 +11:00
parent 1042bbec7b
commit 4c08187bf1
6 changed files with 184 additions and 1 deletions

View File

@ -61,6 +61,11 @@ class Project extends BaseModel
return $this->belongsTo(Client::class)->withTrashed();
}
public function documents()
{
return $this->morphMany(Document::class, 'documentable');
}
// /**
// * @return \Illuminate\Database\Eloquent\Relations\HasMany
// */

View File

@ -11,6 +11,7 @@
namespace App\Transformers;
use App\Models\Document;
use App\Models\Expense;
use App\Utils\Traits\MakesHash;
use Illuminate\Database\Eloquent\SoftDeletes;
@ -23,15 +24,23 @@ class ExpenseTransformer extends EntityTransformer
use MakesHash;
use SoftDeletes;
protected $defaultIncludes = [
'documents',
];
/**
* @var array
*/
protected $availableIncludes = [
'documents',
];
public function includeDocuments(Expense $expense)
{
$transformer = new DocumentTransformer($this->serializer);
return $this->includeCollection($expense->documents, $transformer, Document::class);
}
/**
* @param Expense $expense
*

View File

@ -11,6 +11,7 @@
namespace App\Transformers;
use App\Models\Document;
use App\Models\Project;
use App\Utils\Traits\MakesHash;
@ -22,14 +23,23 @@ class ProjectTransformer extends EntityTransformer
use MakesHash;
protected $defaultIncludes = [
'documents',
];
/**
* @var array
*/
protected $availableIncludes = [
'documents'
];
public function includeDocuments(Project $project)
{
$transformer = new DocumentTransformer($this->serializer);
return $this->includeCollection($project->documents, $transformer, Document::class);
}
public function transform(Project $project)
{
return [

View File

@ -12,6 +12,7 @@
namespace App\Transformers;
use App\Models\Activity;
use App\Models\Document;
use App\Models\Vendor;
use App\Models\VendorContact;
use App\Models\VendorGatewayToken;
@ -29,6 +30,7 @@ class VendorTransformer extends EntityTransformer
protected $defaultIncludes = [
'contacts',
'documents'
];
/**
@ -36,6 +38,7 @@ class VendorTransformer extends EntityTransformer
*/
protected $availableIncludes = [
'activities',
'documents',
];
/**
@ -62,6 +65,13 @@ class VendorTransformer extends EntityTransformer
return $this->includeCollection($vendor->contacts, $transformer, VendorContact::class);
}
public function includeDocuments(Vendor $vendor)
{
$transformer = new DocumentTransformer($this->serializer);
return $this->includeCollection($vendor->documents, $transformer, Document::class);
}
/**
* @param Vendor $vendor
*

View File

@ -0,0 +1,143 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace Tests\Feature;
use App\DataMapper\DefaultSettings;
use App\Models\Account;
use App\Models\Client;
use App\Models\ClientContact;
use App\Models\Company;
use App\Models\User;
use App\Utils\Traits\MakesHash;
use Faker\Factory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
use Tests\MockAccountData;
use Tests\TestCase;
/**
* @test
* @covers App\Http\Controllers\DocumentController
*/
class DocumentsApiTest extends TestCase
{
use MakesHash;
use DatabaseTransactions;
use MockAccountData;
public function setUp() :void
{
parent::setUp();
$this->makeTestData();
Session::start();
$this->faker = \Faker\Factory::create();
Model::reguard();
}
public function testClientDocuments()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/clients');
$response->assertStatus(200);
$arr = $response->json();
$this->assertArrayHasKey('documents', $arr['data'][0]);
}
public function testInvoiceDocuments()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/invoices');
$response->assertStatus(200);
$arr = $response->json();
$this->assertArrayHasKey('documents', $arr['data'][0]);
}
public function testProjectsDocuments()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/projects');
$response->assertStatus(200);
$arr = $response->json();
$this->assertArrayHasKey('documents', $arr['data'][0]);
}
public function testExpenseDocuments()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/expenses');
$response->assertStatus(200);
$arr = $response->json();
$this->assertArrayHasKey('documents', $arr['data'][0]);
}
public function testVendorDocuments()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/vendors');
$response->assertStatus(200);
$arr = $response->json();
$this->assertArrayHasKey('documents', $arr['data'][0]);
}
public function testProductDocuments()
{
$response = $this->withHeaders([
'X-API-SECRET' => config('ninja.api_secret'),
'X-API-TOKEN' => $this->token,
])->get('/api/v1/products');
$response->assertStatus(200);
$arr = $response->json();
$this->assertArrayHasKey('documents', $arr['data'][0]);
}
}

View File

@ -35,6 +35,7 @@ use App\Models\Expense;
use App\Models\GroupSetting;
use App\Models\Invoice;
use App\Models\InvoiceInvitation;
use App\Models\Product;
use App\Models\Project;
use App\Models\Quote;
use App\Models\QuoteInvitation;
@ -159,6 +160,11 @@ trait MockAccountData
$company_token->save();
Product::factory()->create([
'user_id' => $this->user->id,
'company_id' => $this->company->id,
]);
$this->client = Client::factory()->create([
'user_id' => $this->user->id,
'company_id' => $this->company->id,