farm-2.x-dev/modules/core/location/tests/src/Functional/LocationAPITest.php
modules/core/location/tests/src/Functional/LocationAPITest.php
<?php namespace Drupal\Tests\farm_location\Functional; use Drupal\Component\Serialization\Json; use Drupal\Core\Url; use Drupal\farm_geo\Traits\WktTrait; use Drupal\Tests\farm_test\Functional\FarmBrowserTestBase; use Drupal\Tests\jsonapi\Functional\JsonApiRequestTestTrait; use GuzzleHttp\RequestOptions; /** * Tests for the location api. * * @group farm */ class LocationAPITest extends FarmBrowserTestBase { use WktTrait; use JsonApiRequestTestTrait; use LocationFunctionalTestTrait; /** * {@inheritdoc} */ protected static $modules = [ 'basic_auth', 'farm_location', 'farm_location_test', 'farm_api', ]; /** * Test creating an asset via the API. * * Ensure that the geometry and location fields are not populated. */ public function testApiAssetPostResponse() { // Logout the user so we don't need a CSRF token. Use basic auth. $this->drupalLogout(); // Setup the request. $request_options[RequestOptions::HEADERS]['Accept'] = 'application/vnd.api+json'; $request_options[RequestOptions::HEADERS]['Content-Type'] = 'application/vnd.api+json'; $request_options[RequestOptions::HEADERS]['Authorization'] = 'Basic ' . base64_encode($this->user->name->value . ':' . $this->user->passRaw); $asset_uri = "base://api/asset/object"; // Create an asset with no intrinsic geometry. $post_data = [ 'data' => [ 'type' => 'asset--object', 'attributes' => [ 'name' => 'Test object', ], ], ]; $request_options[RequestOptions::BODY] = Json::encode($post_data); $response = $this->request('POST', Url::fromUri($asset_uri), $request_options); // Assert a valid response. $this->assertEquals(201, $response->getStatusCode()); $response_data = Json::decode((string) $response->getBody()); $this->assertArrayhasKey('data', $response_data); // Assert that there is no geometry. $this->assertArrayHasKey('attributes', $response_data['data']); $this->assertArrayHasKey('geometry', $response_data['data']['attributes']); $this->assertEmpty($response_data['data']['attributes']['geometry']); // Assert that there is no location. $this->assertArrayHasKey('relationships', $response_data['data']); $this->assertArrayHasKey('location', $response_data['data']['relationships']); $this->assertEmpty($response_data['data']['relationships']['location']['data']); // Create a fixed asset with intrinsic geometry. $post_data['data']['attributes']['is_fixed'] = TRUE; $post_data['data']['attributes']['intrinsic_geometry'] = $this->reduceWkt(\Drupal::service('geofield.wkt_generator')->wktGeneratePolygon(NULL, 5)); $request_options[RequestOptions::BODY] = Json::encode($post_data); $response = $this->request('POST', Url::fromUri($asset_uri), $request_options); // Assert a valid response. $this->assertEquals(201, $response->getStatusCode()); $response_data = Json::decode((string) $response->getBody()); $this->assertArrayhasKey('data', $response_data); // Assert that the intrinsic_geometry was used. $this->assertArrayHasKey('attributes', $response_data['data']); $this->assertArrayHasKey('geometry', $response_data['data']['attributes']); $this->assertArrayHasKey('value', $response_data['data']['attributes']['geometry']); $this->assertEquals($response_data['data']['attributes']['geometry']['value'], $post_data['data']['attributes']['intrinsic_geometry']); // Assert that there is no location. $this->assertArrayHasKey('relationships', $response_data['data']); $this->assertArrayHasKey('location', $response_data['data']['relationships']); $this->assertEmpty($response_data['data']['relationships']['location']['data']); } }