2016-03-25 01:18:05 -07:00
< ? php
2021-11-30 20:09:29 -08:00
namespace Tests\Unit ;
2021-06-10 13:15:52 -07:00
2016-03-25 01:18:05 -07:00
use App\Models\Category ;
use Illuminate\Foundation\Testing\DatabaseMigrations ;
use Illuminate\Foundation\Testing\DatabaseTransactions ;
2021-06-10 13:15:52 -07:00
use Illuminate\Foundation\Testing\WithoutMiddleware ;
2021-11-30 20:09:29 -08:00
use Tests\Unit\BaseTest ;
2016-03-25 01:18:05 -07:00
2017-07-11 20:37:02 -07:00
class CategoryTest extends BaseTest
2016-03-25 01:18:05 -07:00
{
/**
* @ var \UnitTester
*/
protected $tester ;
2017-06-12 17:39:03 -07:00
2021-06-10 13:15:52 -07:00
public function testFailsEmptyValidation ()
{
2018-07-23 06:48:21 -07:00
// An Asset requires a name, a qty, and a category_id.
2021-06-10 13:15:52 -07:00
$a = Category :: create ();
$this -> assertFalse ( $a -> isValid ());
2016-03-25 01:18:05 -07:00
2021-06-10 13:15:52 -07:00
$fields = [
2018-07-23 06:48:21 -07:00
'name' => 'name' ,
2021-06-10 13:15:52 -07:00
'category_type' => 'category type' ,
2018-07-23 06:48:21 -07:00
];
2021-06-10 13:15:52 -07:00
$errors = $a -> getErrors ();
foreach ( $fields as $field => $fieldTitle ) {
$this -> assertEquals ( $errors -> get ( $field )[ 0 ], " The ${ fieldTitle } field is required. " );
}
}
2016-03-25 01:18:05 -07:00
2021-06-10 13:15:52 -07:00
public function testACategoryCanHaveAssets ()
{
$this -> createValidAssetModel (); //This will seed various things to make the following work better.
$category = $this -> createValidCategory ( 'asset-desktop-category' );
2021-06-10 13:17:44 -07:00
$models = \App\Models\AssetModel :: factory () -> count ( 5 ) -> mbp13Model () -> create ([ 'category_id' => $category -> id ]);
2016-03-25 01:18:05 -07:00
2021-06-10 13:15:52 -07:00
$this -> assertEquals ( 5 , $category -> models -> count ());
$this -> assertCount ( 5 , $category -> models );
2017-06-12 17:39:03 -07:00
2021-06-10 13:15:52 -07:00
$models -> each ( function ( $model ) {
2020-04-28 08:44:17 -07:00
// This is intentionally run twice to generate the ten imagined assets, done this way to keep it in sync with createValidAsset rather than using the factory directly.
2021-06-10 13:15:52 -07:00
$this -> createValidAsset ([ 'model_id' => $model -> id ]);
$this -> createValidAsset ([ 'model_id' => $model -> id ]);
});
$this -> assertEquals ( 10 , $category -> itemCount ());
}
2017-06-12 17:39:03 -07:00
2021-06-10 13:15:52 -07:00
public function testACategoryCanHaveAccessories ()
{
$category = $this -> createValidCategory ( 'accessory-keyboard-category' );
2021-06-10 13:17:44 -07:00
\App\Models\Accessory :: factory () -> count ( 5 ) -> appleBtKeyboard () -> create ([ 'category_id' => $category -> id ]);
2017-06-12 17:39:03 -07:00
2021-06-10 13:15:52 -07:00
$this -> assertCount ( 5 , $category -> accessories );
$this -> assertEquals ( 5 , $category -> itemCount ());
}
2017-06-12 17:39:03 -07:00
2021-06-10 13:15:52 -07:00
public function testACategoryCanHaveConsumables ()
{
$category = $this -> createValidCategory ( 'consumable-paper-category' );
2021-06-10 13:17:44 -07:00
\App\Models\Consumable :: factory () -> count ( 5 ) -> cardstock () -> create ([ 'category_id' => $category -> id ]);
2021-06-10 13:15:52 -07:00
$this -> assertCount ( 5 , $category -> consumables );
$this -> assertEquals ( 5 , $category -> itemCount ());
}
2017-06-12 17:39:03 -07:00
2021-06-10 13:15:52 -07:00
public function testACategoryCanHaveComponents ()
{
$category = $this -> createValidCategory ( 'component-ram-category' );
2021-06-10 13:17:44 -07:00
\App\Models\Component :: factory () -> count ( 5 ) -> ramCrucial4 () -> create ([ 'category_id' => $category -> id ]);
2021-06-10 13:15:52 -07:00
$this -> assertCount ( 5 , $category -> components );
$this -> assertEquals ( 5 , $category -> itemCount ());
}
2016-03-25 01:18:05 -07:00
}