TimestampAgoFormatterTest.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace Drupal\FunctionalTests\Datetime;
  3. use Drupal\Core\Entity\Entity\EntityFormDisplay;
  4. use Drupal\Core\Entity\Entity\EntityViewDisplay;
  5. use Drupal\field\Entity\FieldConfig;
  6. use Drupal\field\Entity\FieldStorageConfig;
  7. use Drupal\Tests\BrowserTestBase;
  8. /**
  9. * Tests the functionality of TimestampAgoFormatter core field formatter.
  10. *
  11. * @group field
  12. */
  13. class TimestampAgoFormatterTest extends BrowserTestBase {
  14. /**
  15. * An array of display options to pass to entity_get_display().
  16. *
  17. * @var array
  18. */
  19. protected $displayOptions;
  20. /**
  21. * A field storage to use in this test class.
  22. *
  23. * @var \Drupal\field\Entity\FieldStorageConfig
  24. */
  25. protected $fieldStorage;
  26. /**
  27. * The field used in this test class.
  28. *
  29. * @var \Drupal\field\Entity\FieldConfig
  30. */
  31. protected $field;
  32. /**
  33. * {@inheritdoc}
  34. */
  35. public static $modules = ['entity_test', 'field_ui'];
  36. /**
  37. * {@inheritdoc}
  38. */
  39. protected $defaultTheme = 'stark';
  40. /**
  41. * {@inheritdoc}
  42. */
  43. protected function setUp() {
  44. parent::setUp();
  45. $web_user = $this->drupalCreateUser([
  46. 'access administration pages',
  47. 'view test entity',
  48. 'administer entity_test content',
  49. 'administer entity_test fields',
  50. 'administer entity_test display',
  51. 'administer entity_test form display',
  52. 'view the administration theme',
  53. ]);
  54. $this->drupalLogin($web_user);
  55. $field_name = 'field_timestamp';
  56. $type = 'timestamp';
  57. $widget_type = 'datetime_timestamp';
  58. $formatter_type = 'timestamp_ago';
  59. $this->fieldStorage = FieldStorageConfig::create([
  60. 'field_name' => $field_name,
  61. 'entity_type' => 'entity_test',
  62. 'type' => $type,
  63. ]);
  64. $this->fieldStorage->save();
  65. $this->field = FieldConfig::create([
  66. 'field_storage' => $this->fieldStorage,
  67. 'bundle' => 'entity_test',
  68. 'required' => TRUE,
  69. ]);
  70. $this->field->save();
  71. EntityFormDisplay::load('entity_test.entity_test.default')
  72. ->setComponent($field_name, ['type' => $widget_type])
  73. ->save();
  74. $this->displayOptions = [
  75. 'type' => $formatter_type,
  76. 'label' => 'hidden',
  77. ];
  78. EntityViewDisplay::create([
  79. 'targetEntityType' => $this->field->getTargetEntityTypeId(),
  80. 'bundle' => $this->field->getTargetBundle(),
  81. 'mode' => 'full',
  82. 'status' => TRUE,
  83. ])->setComponent($field_name, $this->displayOptions)
  84. ->save();
  85. }
  86. /**
  87. * Tests the formatter settings.
  88. */
  89. public function testSettings() {
  90. $this->drupalGet('entity_test/structure/entity_test/display');
  91. $edit = [
  92. 'fields[field_timestamp][region]' => 'content',
  93. 'fields[field_timestamp][type]' => 'timestamp_ago',
  94. ];
  95. $this->drupalPostForm(NULL, $edit, t('Save'));
  96. $this->drupalPostForm(NULL, [], 'field_timestamp_settings_edit');
  97. $edit = [
  98. 'fields[field_timestamp][settings_edit_form][settings][future_format]' => 'ends in @interval',
  99. 'fields[field_timestamp][settings_edit_form][settings][past_format]' => 'started @interval ago',
  100. 'fields[field_timestamp][settings_edit_form][settings][granularity]' => 1,
  101. ];
  102. $this->drupalPostForm(NULL, $edit, 'Update');
  103. $this->drupalPostForm(NULL, [], 'Save');
  104. $this->assertSession()->pageTextContains('ends in 1 year');
  105. $this->assertSession()->pageTextContains('started 1 year ago');
  106. }
  107. }