-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[WIP] Improvements to unit tests. (#3574)
* Improvemenets to unit tests. * Break up modelfactory into multiple files, populate many states. * Begin testing validation at the unit test level, test relationships. * Add tests for Asset::availableForCheckout. * Model factories now generate all needed relationships on demand, which allows us to unit test with a empty database. * To faciliate the empty database, we move to using sqlite in memory as the unit testing database. * Fix bug with logs of checkouts to non users. * Fix location finding for assets. Also Fix location show page to show users associated with location. Still need some work to show assets. * More test and generator improvements * More unit test fixes. PermissionsTest is borked still. * More Updates * Rewrite permissionstest. Check that we have access on the model level rather than via web requests. Also test delete permissions. * Fix seeders. * Make the default asset model factory generate assets that are rtd for testing. * Save progress. * Rebase tests, fix department unit test, update database for functional tests. * Update functional and api tests to use new modelfactory signatures.
- Loading branch information
Showing
64 changed files
with
1,522 additions
and
705 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
<?php | ||
|
||
use App\Models\Actionlog; | ||
|
||
$factory->defineAs(App\Models\Actionlog::class, 'asset-upload', function ($faker) { | ||
$asset = factory(App\Models\Asset::class)->create(); | ||
return [ | ||
'item_type' => get_class($asset), | ||
'item_id' => $asset->id, | ||
'user_id' => function () { | ||
return factory(App\Models\User::class)->create()->id; | ||
}, | ||
'filename' => $faker->word, | ||
'action_type' => 'uploaded' | ||
]; | ||
}); | ||
|
||
$factory->defineAs(Actionlog::class, 'asset-checkout', function (Faker\Generator $faker) { | ||
$company = factory(App\Models\Company::class)->create(); | ||
$user = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$target = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
// $item = factory(App\Models\Asset::class)->create(['company_id' => $company->id]); | ||
|
||
return [ | ||
'user_id' => $user->id, | ||
'action_type' => 'checkout', | ||
'item_id' => factory(App\Models\Asset::class)->create(['company_id' => $company->id])->id, | ||
'item_type' => App\Models\Asset::class, | ||
'target_id' => $target->id, | ||
'target_type' => get_class($target), | ||
'created_at' => $faker->dateTime(), | ||
'note' => $faker->sentence, | ||
'company_id' => $company->id | ||
]; | ||
}); | ||
|
||
$factory->defineAs(Actionlog::class, 'license-checkout-asset', function (Faker\Generator $faker) { | ||
$company = factory(App\Models\Company::class)->create(); | ||
$user = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$target = factory(App\Models\Asset::class)->create(['company_id' => $company->id]); | ||
$item = factory(App\Models\License::class)->create(['company_id' => $company->id]); | ||
|
||
return [ | ||
'user_id' => $user->id, | ||
'action_type' => 'checkout', | ||
'item_id' => $item->id, | ||
'item_type' => get_class($item), | ||
'target_id' => $target->id, | ||
'target_type' => get_class($target), | ||
'created_at' => $faker->dateTime(), | ||
'note' => $faker->sentence, | ||
'company_id' => $company->id | ||
]; | ||
}); | ||
|
||
$factory->defineAs(Actionlog::class, 'accessory-checkout', function (Faker\Generator $faker) { | ||
$company = factory(App\Models\Company::class)->create(); | ||
$user = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$target = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$item = factory(App\Models\Accessory::class)->create(['company_id' => $company->id]); | ||
|
||
return [ | ||
'user_id' => $user->id, | ||
'action_type' => 'checkout', | ||
'item_id' => $item->id, | ||
'item_type' => get_class($item), | ||
'target_id' => $target->id, | ||
'target_type' => get_class($target), | ||
'created_at' => $faker->dateTime(), | ||
'note' => $faker->sentence, | ||
'company_id' => $company->id | ||
]; | ||
}); | ||
|
||
$factory->defineAs(Actionlog::class, 'consumable-checkout', function (Faker\Generator $faker) { | ||
$company = factory(App\Models\Company::class)->create(); | ||
$user = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$target = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$item = factory(App\Models\Consumable::class)->create(['company_id' => $company->id]); | ||
|
||
return [ | ||
'user_id' => $user->id, | ||
'action_type' => 'checkout', | ||
'item_id' => $item->id, | ||
'item_type' => get_class($item), | ||
'target_id' => $target->id, | ||
'target_type' => get_class($target), | ||
'created_at' => $faker->dateTime(), | ||
'note' => $faker->sentence, | ||
'company_id' => $company->id | ||
]; | ||
}); | ||
|
||
$factory->defineAs(Actionlog::class, 'component-checkout', function (Faker\Generator $faker) { | ||
$company = factory(App\Models\Company::class)->create(); | ||
$user = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$target = factory(App\Models\User::class)->create(['company_id' => $company->id]); | ||
$item = factory(App\Models\Component::class)->create(['company_id' => $company->id]); | ||
|
||
return [ | ||
'user_id' => $user->id, | ||
'action_type' => 'checkout', | ||
'item_id' => $item->id, | ||
'item_type' => get_class($item), | ||
'target_id' => $target->id, | ||
'target_type' => get_class($target), | ||
'created_at' => $faker->dateTime(), | ||
'note' => $faker->sentence, | ||
'company_id' => $company->id | ||
]; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
<?php | ||
|
||
use App\Models\Asset; | ||
|
||
/* | ||
|-------------------------------------------------------------------------- | ||
| Model Factories | ||
|-------------------------------------------------------------------------- | ||
| | ||
| Factories related exclusively to modelling assets. | ||
| | ||
*/ | ||
|
||
$factory->define(Asset::class, function (Faker\Generator $faker) { | ||
return [ | ||
'name' => $faker->catchPhrase, | ||
'model_id' => function () { | ||
return factory(App\Models\AssetModel::class)->create()->id; | ||
}, | ||
'rtd_location_id' => function () { | ||
return factory(App\Models\Location::class)->create()->id; | ||
}, | ||
'serial' => $faker->uuid, | ||
'status_id' => function () { | ||
return factory(App\Models\Statuslabel::class)->states('rtd')->create()->id; | ||
}, | ||
'user_id' => function () { | ||
return factory(App\Models\User::class)->create()->id; | ||
}, | ||
'asset_tag' => $faker->unixTime('now'), | ||
'notes' => $faker->sentence, | ||
'purchase_date' => $faker->dateTime(), | ||
'purchase_cost' => $faker->randomFloat(2), | ||
'order_number' => $faker->numberBetween(1000000, 50000000), | ||
'supplier_id' => function () { | ||
return factory(App\Models\Supplier::class)->create()->id; | ||
}, | ||
'company_id' => function () { | ||
return factory(App\Models\Company::class)->create()->id; | ||
}, | ||
'requestable' => $faker->boolean() | ||
]; | ||
}); | ||
|
||
$factory->state(Asset::class, 'deleted', function ($faker) { | ||
return [ | ||
'deleted_at' => $faker->dateTime(), | ||
]; | ||
}); | ||
|
||
$factory->state(Asset::class, 'assigned-to-user', function ($faker) { | ||
return [ | ||
'assigned_to' => factory(App\Models\User::class)->create()->id, | ||
'assigned_type' => App\Models\User::class, | ||
]; | ||
}); | ||
|
||
$factory->state(Asset::class, 'assigned-to-location', function ($faker) { | ||
return [ | ||
'assigned_to' => factory(App\Models\Location::class)->create()->id, | ||
'assigned_type' => App\Models\Location::class, | ||
]; | ||
}); | ||
|
||
$factory->state(Asset::class, 'assigned-to-asset', function ($faker) { | ||
return [ | ||
'assigned_to' => factory(App\Models\Asset::class)->create()->id, | ||
'assigned_type' => App\Models\Asset::class, | ||
]; | ||
}); | ||
|
||
|
||
$factory->define(App\Models\AssetModel::class, function (Faker\Generator $faker) { | ||
return [ | ||
'name' => $faker->catchPhrase, | ||
'manufacturer_id' => function () { | ||
return factory(App\Models\Manufacturer::class)->create()->id; | ||
}, | ||
'category_id' => function () { | ||
return factory(App\Models\Category::class)->states('asset-category')->create()->id; | ||
}, | ||
'model_number' => $faker->numberBetween(1000000, 50000000), | ||
'eol' => 1, | ||
'notes' => $faker->paragraph(), | ||
'requestable' => $faker->boolean(), | ||
'depreciation_id' => function () { | ||
return factory(App\Models\Depreciation::class)->create()->id; | ||
}, | ||
]; | ||
}); | ||
|
||
$factory->define(App\Models\AssetMaintenance::class, function (Faker\Generator $faker) { | ||
return [ | ||
'asset_id' => function () { | ||
return factory(App\Models\Asset::class)->create()->id; | ||
}, | ||
'supplier_id' => function () { | ||
return factory(App\Models\Supplier::class)->create()->id; | ||
}, | ||
'asset_maintenance_type' => $faker->randomElement(['maintenance', 'repair', 'upgrade']), | ||
'title' => $faker->sentence, | ||
'start_date' => $faker->date(), | ||
'is_warranty' => $faker->boolean(), | ||
'notes' => $faker->paragraph(), | ||
]; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<?php | ||
|
||
/* | ||
|-------------------------------------------------------------------------- | ||
| Category Factories | ||
|-------------------------------------------------------------------------- | ||
| | ||
| Factories related exclusively to creating categories and the various states.. | ||
| | ||
*/ | ||
|
||
|
||
$factory->define(App\Models\Category::class, function (Faker\Generator $faker) { | ||
return [ | ||
'name' => $faker->text(20), | ||
'category_type' => $faker->randomElement(['asset', 'accessory', 'component', 'consumable']), | ||
'eula_text' => $faker->paragraph(), | ||
'require_acceptance' => $faker->boolean(), | ||
'use_default_eula' => $faker->boolean(), | ||
'checkin_email' => $faker->boolean() | ||
]; | ||
}); | ||
|
||
$factory->state(App\Models\Category::class, 'asset-category', function ($faker) { | ||
return [ | ||
'category_type' => 'asset', | ||
]; | ||
}); | ||
|
||
$factory->state(App\Models\Category::class, 'accessory-category', function ($faker) { | ||
return [ | ||
'category_type' => 'accessory', | ||
]; | ||
}); | ||
|
||
$factory->state(App\Models\Category::class, 'component-category', function ($faker) { | ||
return [ | ||
'category_type' => 'component', | ||
]; | ||
}); | ||
|
||
$factory->state(App\Models\Category::class, 'consumable-category', function ($faker) { | ||
return [ | ||
'category_type' => 'consumable', | ||
]; | ||
}); |
Oops, something went wrong.