268 lines
6.8 KiB
PHP
268 lines
6.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Invoice Ninja (https://invoiceninja.com).
|
|
*
|
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
*
|
|
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
|
*
|
|
* @license https://www.elastic.co/licensing/elastic-license
|
|
*/
|
|
|
|
namespace Tests\Unit;
|
|
|
|
use App\DataMapper\EInvoice\TaxEntity;
|
|
use Tests\TestCase;
|
|
use App\Models\User;
|
|
use App\Models\Design;
|
|
use App\Models\License;
|
|
use App\Models\Payment;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class LicenseTest extends TestCase
|
|
{
|
|
use DatabaseTransactions;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
}
|
|
|
|
public function stubLicense($tes = [])
|
|
{
|
|
$entities = [];
|
|
|
|
foreach ($tes as $te) {
|
|
$te = new TaxEntity([
|
|
'legal_entity_id' => $te['legal_entity_id'] ?? 1,
|
|
'company_key' => $te['company_key'] ?? '',
|
|
'received_documents' => $te['received_documents'] ?? []
|
|
]);
|
|
|
|
$entities[] = $te;
|
|
}
|
|
|
|
$l = new License();
|
|
$l->license_key = Str::random(32);
|
|
$l->email = 'test@gmail.com';
|
|
$l->transaction_reference = Str::random(10);
|
|
$l->e_invoice_quota = 0;
|
|
$l->entities = $entities;
|
|
$l->save();
|
|
|
|
return $l;
|
|
|
|
}
|
|
|
|
public function testTaxEntiyFind()
|
|
{
|
|
$tes = [
|
|
[
|
|
'legal_entity_id' => 22,
|
|
'company_key' => \Illuminate\Support\Str::random(32),
|
|
'received_documents' => []
|
|
],
|
|
[
|
|
'legal_entity_id' => 33,
|
|
'company_key' => \Illuminate\Support\Str::random(32),
|
|
'received_documents' => []
|
|
],
|
|
[
|
|
'legal_entity_id' => 50,
|
|
'company_key' => 'abcd',
|
|
'received_documents' => []
|
|
]
|
|
];
|
|
|
|
$l = $this->stubLicense($tes);
|
|
|
|
$this->assertCount(3, $l->entities);
|
|
|
|
$search = $l->findEntity('legal_entity_id', 50);
|
|
|
|
$this->assertEquals(50, $search->legal_entity_id);
|
|
$this->assertEquals('abcd', $search->company_key);
|
|
|
|
$search = $l->findEntity('company_key', 'abcd');
|
|
|
|
$this->assertEquals(50, $search->legal_entity_id);
|
|
$this->assertEquals('abcd', $search->company_key);
|
|
|
|
}
|
|
|
|
public function testTaxEntityAddRemove()
|
|
{
|
|
$l = $this->stubLicense();
|
|
|
|
$this->assertCount(0, $l->entities);
|
|
|
|
$te = new TaxEntity([
|
|
'legal_entity_id' => 123,
|
|
'company_key' => 'qqqq',
|
|
'received_documents' => []
|
|
]);
|
|
|
|
$l->addEntity($te);
|
|
$l->refresh();
|
|
|
|
$this->assertCount(1, $l->entities);
|
|
|
|
$l->removeEntity($te);
|
|
$l->refresh();
|
|
|
|
$this->assertCount(0, $l->entities);
|
|
|
|
|
|
}
|
|
|
|
|
|
public function testTaxEntityAddUpdate()
|
|
{
|
|
$l = $this->stubLicense();
|
|
|
|
$this->assertCount(0, $l->entities);
|
|
|
|
$te = new TaxEntity([
|
|
'legal_entity_id' => 123,
|
|
'company_key' => 'qqqq',
|
|
'received_documents' => []
|
|
]);
|
|
|
|
$l->addEntity($te);
|
|
$l->refresh();
|
|
|
|
$this->assertCount(1, $l->entities);
|
|
|
|
$entity = $l->findEntity('legal_entity_id', 123);
|
|
|
|
$this->assertNotNull($entity);
|
|
|
|
$entity->legal_entity_id = 555;
|
|
|
|
$l->updateEntity($entity, 'company_key');
|
|
$l->refresh();
|
|
|
|
$entity = $l->findEntity('company_key', 'qqqq');
|
|
|
|
$this->assertNotNull($entity);
|
|
|
|
$this->assertEquals('qqqq', $entity->company_key);
|
|
$this->assertEquals(555, $entity->legal_entity_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testLicenseValidity()
|
|
{
|
|
$l = new License();
|
|
|
|
$l->license_key = Str::random(32);
|
|
$l->email = 'test@gmail.com';
|
|
$l->transaction_reference = Str::random(10);
|
|
$l->e_invoice_quota = 0;
|
|
$l->save();
|
|
|
|
$this->assertInstanceOf(License::class, $l);
|
|
|
|
$this->assertTrue($l->isValid());
|
|
}
|
|
|
|
|
|
public function testLicenseValidityExpired()
|
|
{
|
|
$l = new License();
|
|
|
|
$l->license_key = Str::random(32);
|
|
$l->email = 'test@gmail.com';
|
|
$l->transaction_reference = Str::random(10);
|
|
$l->e_invoice_quota = 0;
|
|
$l->save();
|
|
|
|
$l->created_at = now()->subYears(2);
|
|
$l->save();
|
|
|
|
$this->assertInstanceOf(License::class, $l);
|
|
|
|
$this->assertFalse($l->isValid());
|
|
}
|
|
|
|
|
|
public function testPopDocs()
|
|
{
|
|
|
|
$docs = [
|
|
'8f47aa3c-9c51-4f4a-b45d-c275945d6284',
|
|
'2e6d7168-43b9-4f92-9c3a-b8d6f3e9c5a1',
|
|
'f9c12d4b-6e8a-4d7f-b3c5-a2e9f8d1b7c4',
|
|
'7a3b5c9d-2e4f-4a6b-8c1d-9e7f5a3b2d4c',
|
|
'1d9e8f7c-6b5a-4c3d-2e1f-9a8b7c6d5e4f',
|
|
'4b8c2d6e-9f5a-3d7b-1c4e-8a2b9d7c6f5e',
|
|
'3e2d1c9b-8a7f-6d5e-4c3b-2d1e9f8a7b6c',
|
|
'5f4e3d2c-1b9a-8c7d-6e5f-4d3c2b1a9e8d',
|
|
'9d8c7b6a-5e4f-3d2c-1b9a-8c7d6e5f4d3c',
|
|
'6c5d4e3f-2b1a-9d8c-7e6f-5d4c3b2a1e9d',
|
|
];
|
|
|
|
$processed_docs = [
|
|
'8f47aa3c-9c51-4f4a-b45d-c275945d6284',
|
|
'2e6d7168-43b9-4f92-9c3a-b8d6f3e9c5a1',
|
|
'f9c12d4b-6e8a-4d7f-b3c5-a2e9f8d1b7c4',
|
|
'7a3b5c9d-2e4f-4a6b-8c1d-9e7f5a3b2d4c',
|
|
'1d9e8f7c-6b5a-4c3d-2e1f-9a8b7c6d5e4f',
|
|
'4b8c2d6e-9f5a-3d7b-1c4e-8a2b9d7c6f5e',
|
|
'3e2d1c9b-8a7f-6d5e-4c3b-2d1e9f8a7b6c',
|
|
'5f4e3d2c-1b9a-8c7d-6e5f-4d3c2b1a9e8d',
|
|
'9d8c7b6a-5e4f-3d2c-1b9a-8c7d6e5f4d3c',
|
|
];
|
|
|
|
$tes = [
|
|
[
|
|
'legal_entity_id' => 22,
|
|
'company_key' => \Illuminate\Support\Str::random(32),
|
|
'received_documents' => []
|
|
],
|
|
[
|
|
'legal_entity_id' => 11,
|
|
'company_key' => \Illuminate\Support\Str::random(32),
|
|
'received_documents' => []
|
|
],
|
|
[
|
|
'legal_entity_id' => 50,
|
|
'company_key' => 'abcd',
|
|
'received_documents' => $docs
|
|
]
|
|
];
|
|
|
|
$l = $this->stubLicense($tes);
|
|
|
|
$tax_entity = $l->findEntity('legal_entity_id', 50);
|
|
|
|
$this->assertNotNull($tax_entity);
|
|
$this->assertEquals(50, $tax_entity->legal_entity_id);
|
|
$this->assertCount(10, $tax_entity->received_documents);
|
|
|
|
$tax_entity->received_documents = array_values(
|
|
array_diff($tax_entity->received_documents, $processed_docs)
|
|
);
|
|
|
|
$l->updateEntity($tax_entity);
|
|
$l->refresh();
|
|
|
|
$tax_entity = $l->findEntity('legal_entity_id', 50);
|
|
|
|
$this->assertEquals(50, $tax_entity->legal_entity_id);
|
|
$this->assertCount(1, $tax_entity->received_documents);
|
|
|
|
$this->assertEquals('6c5d4e3f-2b1a-9d8c-7e6f-5d4c3b2a1e9d', $tax_entity->received_documents[0]);
|
|
|
|
}
|
|
|
|
|
|
}
|