Merge pull request #8003 from dmeltzer/test-fixes

Test fixes
This commit is contained in:
snipe 2020-04-28 16:33:51 -07:00 committed by GitHub
commit c34650458f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 60 additions and 39 deletions

View file

@ -14,9 +14,9 @@ services:
# list any PHP version you want to test against
php:
- 7.1.8
- 7.2
- 7.3.0
- 7.4
# execute any number of scripts before the test run, custom env's are available as variables

View file

@ -802,4 +802,4 @@ class AssetsController extends Controller
return view('hardware/requested', compact('requestedItems'));
}
}
}

View file

@ -67,6 +67,7 @@ class LocationsController extends Controller
{
$this->authorize('create', Location::class);
$location = new Location();
$location->id = null; // This is required to make Laravels different validation work, it errors if the parameter doesn't exist (maybe a bug)?
$location->name = $request->input('name');
$location->parent_id = $request->input('parent_id', null);
$location->currency = $request->input('currency', '$');

View file

@ -23,11 +23,11 @@ class DatabaseSeeder extends Seeder
$this->call(CompanySeeder::class);
$this->call(CategorySeeder::class);
$this->call(LocationSeeder::class);
$this->call(UserSeeder::class);
$this->call(DepreciationSeeder::class);
$this->call(DepartmentSeeder::class);
$this->call(ManufacturerSeeder::class);
$this->call(LocationSeeder::class);
$this->call(SupplierSeeder::class);
$this->call(AssetModelSeeder::class);
$this->call(DepreciationSeeder::class);

View file

@ -77,7 +77,6 @@
@include ('partials.forms.edit.location-select', ['translated_name' => trans('admin/hardware/form.checkout_to'), 'fieldname' => 'assigned_location', 'style' => 'display:none;', 'required' => 'false'])
@endif
@include ('partials.forms.edit.serial', ['fieldname'=> 'serials[1]','translated_serial' => trans('admin/hardware/form.serial')])
@include ('partials.forms.edit.name', ['translated_name' => trans('admin/hardware/form.name')])
@include ('partials.forms.edit.purchase_date')
@include ('partials.forms.edit.supplier-select', ['translated_name' => trans('general.supplier'), 'fieldname' => 'supplier_id'])
@ -155,7 +154,7 @@
if(transformed_oldvals[elem.name]) {
$(elem).val(transformed_oldvals[elem.name]).trigger('change'); //the trigger is for select2-based objects, if we have any
}
});
}
});

View file

@ -24,6 +24,8 @@ class AssetsCest
{
$I->wantTo("Test Validation Fails with blank elements");
$I->amOnPage(route('hardware.create'));
// Settings factory can enable auto prefixes, which generate a random asset id. Lets clear it out for the sake of this test.
$I->fillField('#asset_tag', '');
$I->click('Save');
$I->see('The asset tag field is required.', '.alert-msg');
$I->see('The model id field is required.', '.alert-msg');
@ -40,7 +42,7 @@ class AssetsCest
]);
$userId = $I->getUserId();
$values = [
'asset_tag' => $asset->asset_tag,
'asset_tags[1]' => $asset->asset_tag,
'assigned_user' => $userId,
'company_id' => $asset->company_id,
'model_id' => $asset->model_id,
@ -51,7 +53,7 @@ class AssetsCest
'purchase_date' => '2016-01-01',
'requestable' => $asset->requestable,
'rtd_location_id' => $asset->rtd_location_id,
'serial' => $asset->serial,
'serials[1]' => $asset->serial,
'status_id' => $asset->status_id,
'supplier_id' => $asset->supplier_id,
'warranty_months' => $asset->warranty_months,
@ -67,7 +69,7 @@ class AssetsCest
'notes' => $asset->notes,
'order_number' => $asset->order_number,
'purchase_cost' => $asset->purchase_cost,
'purchase_date' => Carbon::parse('2016-01-01'),
'purchase_date' => '2016-01-01',
'requestable' => $asset->requestable,
'rtd_location_id' => $asset->rtd_location_id,
'serial' => $asset->serial,
@ -80,7 +82,7 @@ class AssetsCest
$I->amOnPage(route('hardware.create'));
$I->submitForm('form#create-form', $values);
$I->seeRecord('assets', $seenValues);
$I->dontSeeElement('.alert-danger'); // We should check for success, but we can't because of the stupid ajaxy way I did things. FIXME when the asset form is rewritten.
$I->seeResponseCodeIs(200);
}
public function allowsDelete(FunctionalTester $I)

View file

@ -39,10 +39,10 @@ class GroupsCest
$I->wantTo("Test Validation Fails with short name");
$I->amOnPage(route('groups.create'));
$I->seeResponseCodeIs(200);
$I->fillField('name', 't2');
$I->fillField('name', 't');
$I->click('Save');
$I->seeElement('.alert-danger');
$I->see('The name must be at least 3 characters', '.alert-msg');
$I->see('The name must be at least 2 characters', '.alert-msg');
}
public function passesCorrectValidation(FunctionalTester $I)

View file

@ -42,7 +42,7 @@ class UsersCest
$I->fillField('password', '12345');
$I->click('Save');
$I->seeElement('.alert-danger');
$I->see('The password must be at least 10 characters', '.alert-msg');
$I->see('The password must be at least 8 characters', '.alert-msg');
}
public function passesCorrectValidation(FunctionalTester $I)

View file

@ -42,10 +42,10 @@ class AssetModelTest extends BaseTest
public function testAnAssetModelContainsAssets()
{
$assetModel = $this->createValidAssetModel();
factory(Asset::class)->create([
$this->createValidAsset([
'model_id' => $assetModel->id,
]);
$this->assertEquals(1,$assetModel->assets()->count());
$this->assertEquals(1, $assetModel->assets()->count());
}
public function testAnAssetModelHasACategory()

View file

@ -77,7 +77,11 @@ class AssetTest extends BaseTest
*/
public function testWarrantyExpiresAttribute()
{
$asset = factory(Asset::class)->states('laptop-mbp')->create(['model_id' => $this->createValidAssetModel()->id]);
$asset = factory(Asset::class)->states('laptop-mbp')->create([
'model_id' => $this->createValidAssetModel()->id,
'supplier_id' => $this->createvalidSupplier()->id,
'rtd_location_id' => $this->createValidLocation()->id
]);
$asset->purchase_date = Carbon::createFromDate(2017, 1, 1)->hour(0)->minute(0)->second(0);
$asset->warranty_months = 24;
@ -109,7 +113,11 @@ class AssetTest extends BaseTest
public function testModelIdMustExist()
{
$model = $this->createValidAssetModel();
$asset = factory(Asset::class)->make(['model_id' => $model->id]);
$asset = factory(Asset::class)->make([
'model_id' => $model->id,
'supplier_id' => $this->createValidSupplier()->id,
'rtd_location_id' => $this->createValidLocation()->id
]);
$asset->save();
$this->assertTrue($asset->isValid());
$newId = $model->id + 1;
@ -188,7 +196,9 @@ class AssetTest extends BaseTest
public function testAnAssetCanHaveUploads()
{
$asset = $this->createValidAsset();
$asset = $this->createValidAsset([
'supplier_id' => $this->createValidSupplier()->id
]);
$this->assertCount(0, $asset->uploads);
factory(App\Models\Actionlog::class, 'asset-upload')->create(['item_id' => $asset->id]);
$this->assertCount(1, $asset->fresh()->uploads);

View file

@ -16,7 +16,9 @@ class BaseTest extends \Codeception\TestCase\Test
protected function signIn($user = null)
{
if (!$user) {
$user = factory(User::class)->states('superuser')->create();
$user = factory(User::class)->states('superuser')->create([
'location_id' => $this->createValidLocation()->id
]);
}
Auth::login($user);
@ -78,17 +80,24 @@ class BaseTest extends \Codeception\TestCase\Test
protected function createValidUser($overrides= [])
{
return factory(App\Models\User::class)->create($overrides);
return factory(App\Models\User::class)->create(
array_merge([
'location_id'=>$this->createValidLocation()->id
], $overrides)
);
}
protected function createValidAsset($overrides = [])
{
$locId = $this->createValidLocation();
$locId = $this->createValidLocation()->id;
$this->createValidAssetModel();
return factory(\App\Models\Asset::class)->states('laptop-mbp')->create([
'rtd_location_id' => $locId,
'location_id' => $locId
], $overrides);
return factory(\App\Models\Asset::class)->states('laptop-mbp')->create(
array_merge([
'rtd_location_id' => $locId,
'location_id' => $locId,
'supplier_id' => $this->createValidSupplier()->id
], $overrides)
);
}

View file

@ -38,7 +38,9 @@ class CategoryTest extends BaseTest
$this->assertCount(5, $category->models);
$models->each(function($model) {
factory(App\Models\Asset::class, 2)->create(['model_id' => $model->id]);
// 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.
$this->createValidAsset(['model_id' => $model->id]);
$this->createValidAsset(['model_id' => $model->id]);
});
$this->assertEquals(10, $category->itemCount());
}

View file

@ -31,17 +31,14 @@ class CompanyTest extends BaseTest
public function testACompanyCanHaveUsers()
{
$company = $this->createValidCompany();
factory(App\Models\User::class, 1)->create(['company_id'=>$company->id]);
$user = $this->createValidUser(['company_id'=>$company->id]);
$this->assertCount(1, $company->users);
}
public function testACompanyCanHaveAssets()
{
$company = $this->createValidCompany();
factory(App\Models\Asset::class, 1)->states('laptop-mbp')->create([
'company_id' => $company->id,
'model_id' => $this->createValidAssetModel()->id
]);
$this->createValidAsset(['company_id' => $company->id]);
$this->assertCount(1, $company->assets);
}

View file

@ -13,6 +13,7 @@ class LocationTest extends BaseTest
protected $tester;
public function testPassesIfNotSelfParent() {
$this->createValidLocation(['id' => 10]);
$a = factory(Location::class)->make([
'name' => 'Test Location',

View file

@ -21,15 +21,15 @@ class NotificationTest extends BaseTest
public function testAUserIsEmailedIfTheyCheckoutAnAssetWithEULA()
{
$admin = factory(User::class)->states('superuser')->create();
Auth::login($admin);
$cat = $this->createValidCategory('asset-laptop-category', ['require_acceptance' => true]);
$model = $this->createValidAssetModel('mbp-13-model', ['category_id' => $cat->id]);
$asset = $this->createValidAsset(['model_id' => $model->id]);
$user = factory(User::class)->create();
Notification::fake();
$asset->checkOut($user, 1);
$admin = factory(User::class)->states('superuser')->create();
Auth::login($admin);
$cat = $this->createValidCategory('asset-laptop-category', ['require_acceptance' => true]);
$model = $this->createValidAssetModel('mbp-13-model', ['category_id' => $cat->id]);
$asset = $this->createValidAsset(['model_id' => $model->id]);
$user = $this->createValidUser();
Notification::assertSentTo($user, CheckoutAssetNotification::class);
Notification::fake();
$asset->checkOut($user, 1);
Notification::assertSentTo($user, CheckoutAssetNotification::class);
}
}