1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00

Test for Number generation:

This commit is contained in:
David Bomba 2019-04-29 22:14:11 +10:00
parent 76d625d723
commit 19a5c7119b
6 changed files with 136 additions and 3 deletions

View File

@ -62,12 +62,13 @@ class ClientSettings extends BaseSettings
public $client_number_prefix;
public $client_number_pattern;
public $credit_number_prefix;
public $credit_number_pattern;
public $credit_number_counter;
public $shared_invoice_quote_counter;
public $counter_padding;
/**
* Settings which which are unique to client settings

View File

@ -87,6 +87,7 @@ class CompanySettings extends BaseSettings
public $client_number_prefix;
public $client_number_pattern;
public $client_number_counter;
public $credit_number_prefix;
public $credit_number_pattern;
@ -98,6 +99,7 @@ class CompanySettings extends BaseSettings
public $recurring_number_prefix;
public $reset_counter_frequency_id;
public $reset_counter_date;
public $counter_padding;
/**
* Cast object values and return entire class
@ -143,6 +145,8 @@ class CompanySettings extends BaseSettings
'invoice_number_counter' => 1,
'quote_number_counter' => 1,
'credit_number_counter' => 1,
'client_number_counter' => 1,
'counter_padding' => 0,
'translations' => (object) [],
];

View File

@ -9,6 +9,7 @@ use App\Models\Company;
use App\Models\Country;
use App\Models\Filterable;
use App\Models\Timezone;
use App\Utils\Traits\GeneratesNumberCounter;
use App\Utils\Traits\MakesHash;
use Hashids\Hashids;
use Illuminate\Database\Eloquent\SoftDeletes;
@ -20,6 +21,7 @@ class Client extends BaseModel
use MakesHash;
use SoftDeletes;
use Filterable;
use GeneratesNumberCounter;
protected $presenter = 'App\Models\Presenters\ClientPresenter';

10
app/Models/Credit.php Normal file
View File

@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Credit extends BaseModel
{
//
}

View File

@ -2,6 +2,11 @@
namespace App\Utils\Traits;
use App\Models\Client;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Quote;
/**
* Class GeneratesNumberCounter
* @package App\Utils\Traits
@ -12,6 +17,8 @@ trait GeneratesNumberCounter
public function getNextNumber($entity)
{
$counter = $this->getCounter($entity);
}
public function hasSharedCounter() : bool
@ -21,16 +28,24 @@ trait GeneratesNumberCounter
}
public function incrementCounter($entity)
private function incrementCounter($entity)
{
}
public function entity_name($entity)
private function entity_name($entity)
{
return strtolower(class_basename($entity));
}
public function getCounter($entity) : int
{
$counter = $this->entity_name($entity) . '_number_counter';
return $this->getSettingsByKey( $counter )->{$counter};
}
}

View File

@ -0,0 +1,101 @@
<?php
namespace Tests\Unit;
use App\DataMapper\DefaultSettings;
use App\Models\Client;
use App\Utils\Traits\GeneratesNumberCounter;
use App\Utils\Traits\MakesHash;
use Illuminate\Support\Facades\Session;
use Tests\TestCase;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Testing\DatabaseTransactions;
/**
* @test
* @covers App\Utils\Traits\GeneratesNumberCounter
*/
class GenerateNumberTest extends TestCase
{
use GeneratesNumberCounter;
use MakesHash;
use DatabaseTransactions;
public function setUp() :void
{
parent::setUp();
Session::start();
$this->faker = \Faker\Factory::create();
Model::reguard();
}
public function testEntityName()
{
$this->assertEquals($this->entity_name(Client::class), 'client');
}
public function testCounterVariables()
{
$account = factory(\App\Models\Account::class)->create();
$company = factory(\App\Models\Company::class)->create([
'account_id' => $account->id,
]);
$account->default_company_id = $company->id;
$account->save();
$user = factory(\App\Models\User::class)->create([
// 'account_id' => $account->id,
'confirmation_code' => $this->createDbHash(config('database.default'))
]);
$userPermissions = collect([
'view_invoice',
'view_client',
'edit_client',
'edit_invoice',
'create_invoice',
'create_client'
]);
$userSettings = DefaultSettings::userSettings();
$user->companies()->attach($company->id, [
'account_id' => $account->id,
'is_owner' => 1,
'is_admin' => 1,
'permissions' => $userPermissions->toJson(),
'settings' => json_encode($userSettings),
'is_locked' => 0,
]);
factory(\App\Models\Client::class)->create(['user_id' => $user->id, 'company_id' => $company->id])->each(function ($c) use ($user, $company){
factory(\App\Models\ClientContact::class,1)->create([
'user_id' => $user->id,
'client_id' => $c->id,
'company_id' => $company->id,
'is_primary' => 1
]);
factory(\App\Models\ClientContact::class,2)->create([
'user_id' => $user->id,
'client_id' => $c->id,
'company_id' => $company->id
]);
});
$client = Client::whereUserId($user->id)->whereCompanyId($company->id)->first();
$this->assertEquals($client->getCounter(Client::class), 1);
}
}