diff --git a/tests/_support/ApiTester.php b/tests/_support/ApiTester.php index 920d6d4078..1d6f6f18ff 100644 --- a/tests/_support/ApiTester.php +++ b/tests/_support/ApiTester.php @@ -43,4 +43,17 @@ class ApiTester extends \Codeception\Actor return $token; } + + /** + * Remove Timestamps from transformed array + * This fixes false negatives when comparing json due to timestamp second rounding issues + * @param array $array Array returned from the transformer + * @return array Transformed item striped of created_at and updated_at + */ + public function removeTimeStamps($array) + { + unset($array['created_at']); + unset($array['updated_at']); + return $array; + } } diff --git a/tests/api/ApiAccessoriesCest.php b/tests/api/ApiAccessoriesCest.php index 23b7c4296b..b72bc7f37b 100644 --- a/tests/api/ApiAccessoriesCest.php +++ b/tests/api/ApiAccessoriesCest.php @@ -32,7 +32,7 @@ class ApiAccessoriesCest $response = json_decode($I->grabResponse(), true); // sample verify $accessory = App\Models\Accessory::orderByDesc('created_at')->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new AccessoriesTransformer)->transformAccessory($accessory)); + $I->seeResponseContainsJson($I->removeTimestamps((new AccessoriesTransformer)->transformAccessory($accessory))); } /** @test */ diff --git a/tests/api/ApiAssetsCest.php b/tests/api/ApiAssetsCest.php index 5a14120ff4..51d174c592 100644 --- a/tests/api/ApiAssetsCest.php +++ b/tests/api/ApiAssetsCest.php @@ -34,7 +34,7 @@ class ApiAssetsCest $response = json_decode($I->grabResponse(), true); // sample verify $asset = Asset::orderByDesc('id')->take(20)->get()->first(); - $I->seeResponseContainsJson((new AssetsTransformer)->transformAsset($asset)); + $I->seeResponseContainsJson($I->removeTimestamps((new AssetsTransformer)->transformAsset($asset))); } /** @test */ diff --git a/tests/api/ApiCategoriesCest.php b/tests/api/ApiCategoriesCest.php index 573974b8d1..2d334449fe 100644 --- a/tests/api/ApiCategoriesCest.php +++ b/tests/api/ApiCategoriesCest.php @@ -30,12 +30,10 @@ class ApiCategoriesCest $I->seeResponseCodeIs(200); $response = json_decode($I->grabResponse(), true); - // dd($response); // sample verify $category = App\Models\Category::withCount('assets','accessories','consumables','components','licenses') ->orderByDesc('created_at')->take(10)->get()->shuffle()->first(); - - $I->seeResponseContainsJson((new CategoriesTransformer)->transformCategory($category)); + $I->seeResponseContainsJson($I->removeTimestamps((new CategoriesTransformer)->transformCategory($category))); } /** @test */ diff --git a/tests/api/ApiCompaniesCest.php b/tests/api/ApiCompaniesCest.php index 35653b4e9e..9ae03faea0 100644 --- a/tests/api/ApiCompaniesCest.php +++ b/tests/api/ApiCompaniesCest.php @@ -35,7 +35,7 @@ class ApiCompaniesCest $company = App\Models\Company::withCount('assets','licenses','accessories','consumables','components','users') ->orderByDesc('created_at')->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new CompaniesTransformer)->transformCompany($company)); + $I->seeResponseContainsJson($I->removeTimestamps((new CompaniesTransformer)->transformCompany($company))); } /** @test */ diff --git a/tests/api/ApiComponentsCest.php b/tests/api/ApiComponentsCest.php index 33120be95d..006b19e876 100644 --- a/tests/api/ApiComponentsCest.php +++ b/tests/api/ApiComponentsCest.php @@ -32,7 +32,7 @@ class ApiComponentsCest // sample verify $component = App\Models\Component::orderByDesc('created_at')->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new ComponentsTransformer)->transformComponent($component)); + $I->seeResponseContainsJson($I->removeTimestamps((new ComponentsTransformer)->transformComponent($component))); } /** @test */ diff --git a/tests/api/ApiConsumablesCest.php b/tests/api/ApiConsumablesCest.php index d7938195b5..73b431102c 100644 --- a/tests/api/ApiConsumablesCest.php +++ b/tests/api/ApiConsumablesCest.php @@ -32,7 +32,7 @@ class ApiConsumablesCest // sample verify $consumable = App\Models\Consumable::orderByDesc('created_at')->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new ConsumablesTransformer)->transformConsumable($consumable)); + $I->seeResponseContainsJson($I->removeTimestamps((new ConsumablesTransformer)->transformConsumable($consumable))); } /** @test */ diff --git a/tests/api/ApiLicensesCest.php b/tests/api/ApiLicensesCest.php index 4e985d4273..b7aad28290 100644 --- a/tests/api/ApiLicensesCest.php +++ b/tests/api/ApiLicensesCest.php @@ -33,7 +33,7 @@ class ApiLicensesCest $license = App\Models\License::orderByDesc('created_at') ->withCount('freeSeats') ->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new LicensesTransformer)->transformLicense($license)); + $I->seeResponseContainsJson($I->removeTimestamps((new LicensesTransformer)->transformLicense($license))); } /** @test */ diff --git a/tests/api/ApiLocationsCest.php b/tests/api/ApiLocationsCest.php index 4ab3978e92..064488e33e 100644 --- a/tests/api/ApiLocationsCest.php +++ b/tests/api/ApiLocationsCest.php @@ -34,7 +34,7 @@ class ApiLocationsCest $location = App\Models\Location::orderByDesc('created_at') ->withCount('assignedAssets', 'assets', 'users') ->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new LocationsTransformer)->transformLocation($location)); + $I->seeResponseContainsJson($I->removeTimestamps((new LocationsTransformer)->transformLocation($location))); } /** @test */ diff --git a/tests/api/ApiManufacturersCest.php b/tests/api/ApiManufacturersCest.php index 4338f09ef2..b7c002fde7 100644 --- a/tests/api/ApiManufacturersCest.php +++ b/tests/api/ApiManufacturersCest.php @@ -34,7 +34,7 @@ class ApiManufacturersCest $manufacturer = App\Models\Manufacturer::withCount('assets','accessories','consumables','licenses') ->orderByDesc('created_at')->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new ManufacturersTransformer)->transformManufacturer($manufacturer)); + $I->seeResponseContainsJson($I->removeTimestamps((new ManufacturersTransformer)->transformManufacturer($manufacturer))); } /** @test */ diff --git a/tests/api/ApiModelsCest.php b/tests/api/ApiModelsCest.php new file mode 100644 index 0000000000..7df79eb0fb --- /dev/null +++ b/tests/api/ApiModelsCest.php @@ -0,0 +1,143 @@ +user = \App\Models\User::find(1); + $I->haveHttpHeader('Accept', 'application/json'); + $I->amBearerAuthenticated($I->getToken($this->user)); + } + + /** @test */ + public function indexAssetModels(ApiTester $I) + { + + $I->wantTo('Get a list of assetmodels'); + + // call + $I->sendGET('/models?limit=10'); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(200); + + $response = json_decode($I->grabResponse(), true); + $assetmodel = App\Models\AssetModel::orderByDesc('created_at') + ->withCount('assets')->take(10)->get()->shuffle()->first(); + $I->seeResponseContainsJson($I->removeTimestamps((new AssetModelsTransformer)->transformAssetModel($assetmodel))); + } + + /** @test */ + public function createAssetModel(ApiTester $I, $scenario) + { + $I->wantTo('Create a new assetmodel'); + + $temp_assetmodel = factory(\App\Models\AssetModel::class)->states('mbp-13-model')->make([ + 'name' => "Test AssetModel Tag", + ]); + + // setup + $data = [ + 'category_id' => $temp_assetmodel->category_id, + 'depreciation_id' => $temp_assetmodel->depreciation_id, + 'eol' => $temp_assetmodel->eol, + 'image' => $temp_assetmodel->image, + 'manufacturer_id' => $temp_assetmodel->manufacturer_id, + 'model_number' => $temp_assetmodel->model_number, + 'name' => $temp_assetmodel->name, + 'notes' => $temp_assetmodel->notes, + ]; + + // create + $I->sendPOST('/models', $data); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(200); + } + + // Put is routed to the same method in the controller + // DO we actually need to test both? + /** @test */ + public function updateAssetModelWithPatch(ApiTester $I, $scenario) + { + $I->wantTo('Update an assetmodel with PATCH'); + + // create + $assetmodel = factory(\App\Models\AssetModel::class)->states('mbp-13-model')->create([ + 'name' => 'Original AssetModel Name', + ]); + $I->assertInstanceOf(\App\Models\AssetModel::class, $assetmodel); + + $temp_assetmodel = factory(\App\Models\AssetModel::class)->states('polycomcx-model')->make([ + 'name' => "updated AssetModel name", + ]); + + $data = [ + 'category_id' => $temp_assetmodel->category_id, + 'depreciation_id' => $temp_assetmodel->depreciation_id, + 'eol' => $temp_assetmodel->eol, + 'image' => $temp_assetmodel->image, + 'manufacturer_id' => $temp_assetmodel->manufacturer_id, + 'model_number' => $temp_assetmodel->model_number, + 'name' => $temp_assetmodel->name, + 'notes' => $temp_assetmodel->notes, + ]; + + $I->assertNotEquals($assetmodel->name, $data['name']); + + // update + $I->sendPATCH('/models/' . $assetmodel->id, $data); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(200); + + $response = json_decode($I->grabResponse()); + + $I->assertEquals('success', $response->status); + $I->assertEquals(trans('admin/models/message.update.success'), $response->messages); + $I->assertEquals($assetmodel->id, $response->payload->id); // assetmodel id does not change + $I->assertEquals($temp_assetmodel->name, $response->payload->name); // assetmodel name updated + + // Some necessary manual copying + $temp_assetmodel->created_at = Carbon::parse($response->payload->created_at); + $temp_assetmodel->updated_at = Carbon::parse($response->payload->updated_at); + $temp_assetmodel->id = $assetmodel->id; + // verify + $I->sendGET('/models/' . $assetmodel->id); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(200); + $I->seeResponseContainsJson((new AssetModelsTransformer)->transformAssetModel($temp_assetmodel)); + } + + /** @test */ + public function deleteAssetModelTest(ApiTester $I, $scenario) + { + $I->wantTo('Delete an assetmodel'); + + // create + $assetmodel = factory(\App\Models\AssetModel::class)->states('mbp-13-model')->create([ + 'name' => "Soon to be deleted" + ]); + $I->assertInstanceOf(\App\Models\AssetModel::class, $assetmodel); + + // delete + $I->sendDELETE('/models/' . $assetmodel->id); + $I->seeResponseIsJson(); + $I->seeResponseCodeIs(200); + + $response = json_decode($I->grabResponse()); + $I->assertEquals('success', $response->status); + $I->assertEquals(trans('admin/models/message.delete.success'), $response->messages); + + // verify, expect a 200 + $I->sendGET('/models/' . $assetmodel->id); + $I->seeResponseCodeIs(200); + $I->seeResponseIsJson(); + } +} diff --git a/tests/api/ApiStatusLabelsCest.php b/tests/api/ApiStatusLabelsCest.php index d3f02e843c..49aac413ae 100644 --- a/tests/api/ApiStatusLabelsCest.php +++ b/tests/api/ApiStatusLabelsCest.php @@ -34,7 +34,7 @@ class ApiStatuslabelsCest $statuslabel = App\Models\Statuslabel::orderByDesc('created_at') ->withCount('assets') ->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new StatuslabelsTransformer)->transformStatuslabel($statuslabel)); + $I->seeResponseContainsJson($I->removeTimestamps((new StatuslabelsTransformer)->transformStatuslabel($statuslabel))); } /** @test */ diff --git a/tests/api/ApiUsersCest.php b/tests/api/ApiUsersCest.php index 0744035a97..b1063acf06 100644 --- a/tests/api/ApiUsersCest.php +++ b/tests/api/ApiUsersCest.php @@ -33,7 +33,7 @@ class ApiUsersCest $user = App\Models\User::orderByDesc('created_at') ->withCount('assets', 'licenses', 'accessories', 'consumables') ->take(10)->get()->shuffle()->first(); - $I->seeResponseContainsJson((new UsersTransformer)->transformUser($user)); + $I->seeResponseContainsJson($I->removeTimestamps((new UsersTransformer)->transformUser($user))); } /** @test */ @@ -124,6 +124,7 @@ class ApiUsersCest // update $I->sendPATCH('/users/' . $user->id, $data); $I->seeResponseIsJson(); + $I->seeResponseCodeIs(200); $response = json_decode($I->grabResponse());