2016-03-25 01:18:05 -07:00
< ? php
use App\Models\Category ;
use Illuminate\Support\Facades\Hash ;
use Illuminate\Foundation\Testing\WithoutMiddleware ;
use Illuminate\Foundation\Testing\DatabaseMigrations ;
use Illuminate\Foundation\Testing\DatabaseTransactions ;
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
2018-07-23 06:48:21 -07:00
public function testFailsEmptyValidation ()
{
// An Asset requires a name, a qty, and a category_id.
$a = Category :: create ();
$this -> assertFalse ( $a -> isValid ());
2016-03-25 01:18:05 -07:00
2018-07-23 06:48:21 -07:00
$fields = [
'name' => 'name' ,
'category_type' => 'category type'
];
$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
2018-07-23 06:48:21 -07:00
public function testACategoryCanHaveAssets ()
{
$this -> createValidAssetModel (); //This will seed various things to make the following work better.
$category = $this -> createValidCategory ( 'asset-desktop-category' );
$models = factory ( App\Models\AssetModel :: class , 5 ) -> states ( 'mbp-13-model' ) -> create ([ 'category_id' => $category -> id ]);
2016-03-25 01:18:05 -07:00
2018-08-01 00:06:41 -07:00
$this -> assertEquals ( 5 , $category -> models -> count ());
2018-07-23 06:48:21 -07:00
$this -> assertCount ( 5 , $category -> models );
2017-06-12 17:39:03 -07:00
2018-07-23 06:48:21 -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.
2020-04-28 08:37:13 -07:00
$this -> createValidAsset ([ 'model_id' => $model -> id ]);
$this -> createValidAsset ([ 'model_id' => $model -> id ]);
2018-07-23 06:48:21 -07:00
});
$this -> assertEquals ( 10 , $category -> itemCount ());
}
2017-06-12 17:39:03 -07:00
2018-07-23 06:48:21 -07:00
public function testACategoryCanHaveAccessories ()
{
$category = $this -> createValidCategory ( 'accessory-keyboard-category' );
factory ( App\Models\Accessory :: class , 5 ) -> states ( 'apple-bt-keyboard' ) -> create ([ 'category_id' => $category -> id ]);
2017-06-12 17:39:03 -07:00
2018-07-23 06:48:21 -07:00
$this -> assertCount ( 5 , $category -> accessories );
$this -> assertEquals ( 5 , $category -> itemCount ());
}
2017-06-12 17:39:03 -07:00
2018-07-23 06:48:21 -07:00
public function testACategoryCanHaveConsumables ()
{
$category = $this -> createValidCategory ( 'consumable-paper-category' );
factory ( App\Models\Consumable :: class , 5 ) -> states ( 'cardstock' ) -> create ([ 'category_id' => $category -> id ]);
$this -> assertCount ( 5 , $category -> consumables );
$this -> assertEquals ( 5 , $category -> itemCount ());
}
2017-06-12 17:39:03 -07:00
2018-07-23 06:48:21 -07:00
public function testACategoryCanHaveComponents ()
{
$category = $this -> createValidCategory ( 'component-ram-category' );
factory ( App\Models\Component :: class , 5 ) -> states ( 'ram-crucial4' ) -> create ([ 'category_id' => $category -> id ]);
$this -> assertCount ( 5 , $category -> components );
$this -> assertEquals ( 5 , $category -> itemCount ());
}
2016-03-25 01:18:05 -07:00
}