tests/src/Functional/ExternalNormalizersTest.php | 2 ++ tests/src/Functional/FileUploadTest.php | 21 +++++++++++++++++++++ tests/src/Functional/JsonApiFunctionalTest.php | 2 ++ tests/src/Functional/JsonApiRegressionTest.php | 12 ++++++++++++ tests/src/Functional/NodeTest.php | 5 ----- tests/src/Functional/UserTest.php | 12 ++++++++++++ 6 files changed, 49 insertions(+), 5 deletions(-) diff --git a/tests/src/Functional/ExternalNormalizersTest.php b/tests/src/Functional/ExternalNormalizersTest.php index b28e125..e18d838 100644 --- a/tests/src/Functional/ExternalNormalizersTest.php +++ b/tests/src/Functional/ExternalNormalizersTest.php @@ -64,6 +64,8 @@ class ExternalNormalizersTest extends BrowserTestBase { ->grantPermission('create entity_test entity_test_with_bundle entities') ->save(); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + FieldStorageConfig::create([ 'field_name' => 'field_test', 'type' => 'string', diff --git a/tests/src/Functional/FileUploadTest.php b/tests/src/Functional/FileUploadTest.php index 8f16b82..0c2a336 100644 --- a/tests/src/Functional/FileUploadTest.php +++ b/tests/src/Functional/FileUploadTest.php @@ -204,6 +204,12 @@ class FileUploadTest extends ResourceTestBase { public function testPostFileUpload() { $uri = Url::fromUri('base:' . static::$postUri); + // DX: 405 when read-only mode is enabled. + $response = $this->fileRequest($uri, $this->testFileData); + $this->assertResourceErrorResponse(405, sprintf("JSON:API's read-only mode is enabled. Site administrators can enable writes at %s.", Url::fromUri('base:/admin/config/services/jsonapi')->setAbsolute()->toString(TRUE)->getGeneratedUrl()), $uri, $response); + + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // DX: 403 when unauthorized. $response = $this->fileRequest($uri, $this->testFileData); $this->assertResourceErrorResponse(403, $this->getExpectedUnauthorizedAccessMessage('POST'), $uri, $response); @@ -275,6 +281,12 @@ class FileUploadTest extends ResourceTestBase { $uri = Url::fromUri('base:' . '/jsonapi/entity_test/entity_test/' . $this->entity->uuid() . '/field_rest_file_test'); + // DX: 405 when read-only mode is enabled. + $response = $this->fileRequest($uri, $this->testFileData); + $this->assertResourceErrorResponse(405, sprintf("JSON:API's read-only mode is enabled. Site administrators can enable writes at %s.", Url::fromUri('base:/admin/config/services/jsonapi')->setAbsolute()->toString(TRUE)->getGeneratedUrl()), $uri, $response); + + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // DX: 403 when unauthorized. $response = $this->fileRequest($uri, $this->testFileData); $this->assertResourceErrorResponse(403, $this->getExpectedUnauthorizedAccessMessage('PATCH'), $uri, $response); @@ -367,6 +379,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testPostFileUploadInvalidHeaders() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -405,6 +418,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testPostFileUploadDuplicateFile() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -434,6 +448,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testFileUploadStrippedFilePath() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -479,6 +494,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testFileUploadUnicodeFilename() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -496,6 +512,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testFileUploadZeroByteFile() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -516,6 +533,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testFileUploadInvalidFileType() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -538,6 +556,7 @@ class FileUploadTest extends ResourceTestBase { $this->rebuildAll(); $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -560,6 +579,7 @@ class FileUploadTest extends ResourceTestBase { $this->rebuildAll(); $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); @@ -631,6 +651,7 @@ class FileUploadTest extends ResourceTestBase { */ public function testFileUploadNoExtensionSetting() { $this->setUpAuthorization('POST'); + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); $uri = Url::fromUri('base:' . static::$postUri); diff --git a/tests/src/Functional/JsonApiFunctionalTest.php b/tests/src/Functional/JsonApiFunctionalTest.php index d580370..b2d6f10 100644 --- a/tests/src/Functional/JsonApiFunctionalTest.php +++ b/tests/src/Functional/JsonApiFunctionalTest.php @@ -528,6 +528,8 @@ class JsonApiFunctionalTest extends JsonApiFunctionalTestBase { * Test POST, PATCH and DELETE. */ public function testWrite() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + $this->createDefaultContent(0, 3, FALSE, FALSE, static::IS_NOT_MULTILINGUAL, FALSE); // 1. Successful post. $collection_url = Url::fromRoute('jsonapi.node--article.collection.post'); diff --git a/tests/src/Functional/JsonApiRegressionTest.php b/tests/src/Functional/JsonApiRegressionTest.php index 6b673f7..eb3d918 100644 --- a/tests/src/Functional/JsonApiRegressionTest.php +++ b/tests/src/Functional/JsonApiRegressionTest.php @@ -146,6 +146,8 @@ class JsonApiRegressionTest extends JsonApiFunctionalTestBase { * @see https://www.drupal.org/project/jsonapi/issues/2976371 */ public function testBundlelessRelationshipMutationFromIssue2973681() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Set up data model. $this->drupalCreateContentType(['type' => 'page']); $this->createEntityReferenceField( @@ -231,6 +233,8 @@ class JsonApiRegressionTest extends JsonApiFunctionalTestBase { * @see https://www.drupal.org/project/jsonapi/issues/2968972 */ public function testDanglingReferencesInAnEntityReferenceFieldFromIssue2968972() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Set up data model. $this->drupalCreateContentType(['type' => 'journal_issue']); $this->drupalCreateContentType(['type' => 'journal_article']); @@ -518,6 +522,8 @@ class JsonApiRegressionTest extends JsonApiFunctionalTestBase { * @see https://www.drupal.org/project/jsonapi_extras/issues/3004582#comment-12817261 */ public function testDenormalizeAliasedRelationshipFromIssue2953207() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Since the JSON:API module does not have an explicit mechanism to set up // field aliases, create a strange data model so that automatic aliasing // allows us to test aliased relationships. @@ -697,6 +703,8 @@ class JsonApiRegressionTest extends JsonApiFunctionalTestBase { * @see https://www.drupal.org/project/jsonapi/issues/3021194 */ public function testPatchingDateTimeFieldsFromIssue3021194() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Set up data model. $this->assertTrue($this->container->get('module_installer')->install(['datetime'], TRUE), 'Installed modules.'); $this->drupalCreateContentType(['type' => 'page']); @@ -778,6 +786,8 @@ class JsonApiRegressionTest extends JsonApiFunctionalTestBase { * @see https://www.drupal.org/project/jsonapi/issues/3026030 */ public function testPostToIncludeUrlDoesNotReturnIncludeFromIssue3026030() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Set up data model. $this->drupalCreateContentType(['type' => 'page']); $this->rebuildAll(); @@ -813,6 +823,8 @@ class JsonApiRegressionTest extends JsonApiFunctionalTestBase { * @see https://www.drupal.org/project/jsonapi/issues/3026030 */ public function testPatchToIncludeUrlDoesNotReturnIncludeFromIssue3026030() { + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Set up data model. $this->drupalCreateContentType(['type' => 'page']); $this->rebuildAll(); diff --git a/tests/src/Functional/NodeTest.php b/tests/src/Functional/NodeTest.php index 2c4f235..81c8b54 100644 --- a/tests/src/Functional/NodeTest.php +++ b/tests/src/Functional/NodeTest.php @@ -445,9 +445,4 @@ class NodeTest extends ResourceTestBase { $this->assertTrue(in_array('user.node_grants:view', explode(' ', $response->getHeader('X-Drupal-Cache-Contexts')[0]), TRUE)); } - public function testRelationships() { - parent::testRelationships(); // TODO: Change the autogenerated stub - } - - } diff --git a/tests/src/Functional/UserTest.php b/tests/src/Functional/UserTest.php index 3f449e3..7b96783 100644 --- a/tests/src/Functional/UserTest.php +++ b/tests/src/Functional/UserTest.php @@ -222,6 +222,12 @@ class UserTest extends ResourceTestBase { $normalization['data']['attributes']['mail'] = 'new-email@example.com'; $request_options[RequestOptions::BODY] = Json::encode($normalization); + // DX: 405 when read-only mode is enabled. + $response = $this->request('PATCH', $url, $request_options); + $this->assertResourceErrorResponse(405, sprintf("JSON:API's read-only mode is enabled. Site administrators can enable writes at %s.", Url::fromUri('base:/admin/config/services/jsonapi')->setAbsolute()->toString(TRUE)->getGeneratedUrl()), $url, $response); + + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // DX: 422 when changing email without providing the password. $response = $this->request('PATCH', $url, $request_options); $this->assertResourceErrorResponse(422, 'mail: Your current password is missing or incorrect; it\'s required to change the Email.', NULL, $response, '/data/attributes/mail'); @@ -331,6 +337,12 @@ class UserTest extends ResourceTestBase { $normalization['data']['attributes']['mail'] = 'new-email@example.com'; $request_options[RequestOptions::BODY] = Json::encode($normalization); + // DX: 405 when read-only mode is enabled. + $response = $this->request('PATCH', $url, $request_options); + $this->assertResourceErrorResponse(405, sprintf("JSON:API's read-only mode is enabled. Site administrators can enable writes at %s.", Url::fromUri('base:/admin/config/services/jsonapi')->setAbsolute()->toString(TRUE)->getGeneratedUrl()), $url, $response); + + $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE); + // Try changing user 1's email. $user1 = $original_normalization; $user1['data']['attributes']['mail'] = 'another_email_address@example.com';