.../BcTimestampNormalizerUnixTestTrait.php | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/core/modules/rest/tests/src/Functional/BcTimestampNormalizerUnixTestTrait.php b/core/modules/rest/tests/src/Functional/BcTimestampNormalizerUnixTestTrait.php new file mode 100644 index 0000000000..6f04ba3c68 --- /dev/null +++ b/core/modules/rest/tests/src/Functional/BcTimestampNormalizerUnixTestTrait.php @@ -0,0 +1,47 @@ +setTimestamp(123456789)->setTimezone(new \DateTimeZone("UTC"))->format(\DateTime::RFC3339), see https://www.drupal.org/node/2859657.', E_USER_DEPRECATED); + +/** + * Trait for ResourceTestBase subclasses formatting expected timestamp data. + */ +trait BcTimestampNormalizerUnixTestTrait { + + /** + * Formats a UNIX timestamp. + * + * Depending on the 'bc_timestamp_normalizer_unix' setting. The return will be + * an RFC3339 date string or the same timestamp that was passed in. + * + * @param int $timestamp + * The timestamp value to format. + * + * @return string|int + * The formatted RFC3339 date string or UNIX timestamp. + * + * @see \Drupal\serialization\Normalizer\TimestampItemNormalizer + */ + protected function formatExpectedTimestampItemValues($timestamp) { + // If the setting is enabled, just return the timestamp as-is now. + if ($this->config('serialization.settings')->get('bc_timestamp_normalizer_unix')) { + return ['value' => $timestamp]; + } + + // Otherwise, format the date string to the same that + // \Drupal\serialization\Normalizer\TimestampItemNormalizer will produce. + $date = new \DateTime(); + $date->setTimestamp($timestamp); + // Per \Drupal\Core\TypedData\Plugin\DataType\Timestamp::getDateTime(), they + // default to string representations in the UTC timezone. + $date->setTimezone(new \DateTimeZone('UTC')); + + // Format is also added to the expected return values. + return [ + 'value' => $date->format(\DateTime::RFC3339), + 'format' => \DateTime::RFC3339, + ]; + } + +}