diff --git a/STEPS.md b/STEPS.md index 39ecd69..3e4a22d 100644 --- a/STEPS.md +++ b/STEPS.md @@ -481,6 +481,7 @@ Then the element ".visually-hidden" should not be displayed within a viewport > - Set field values for various input types including selects and WYSIWYG. > - Assert field existence, state, and selected options. > - Support for specialized widgets like color pickers and rich text editors. +> - Support for datetime field widgets with date, time, and datetime options.
@@ -511,6 +512,34 @@ When I fill in the WYSIWYG field "edit-body-0-value" with the "

This is a +

+ @When I fill in the datetime field :label with date :date and time :time + +
+Fill a datetime field with both date and time values +

+ +```gherkin +When I fill in the datetime field "Event datetime" with date "2024-07-15" and time "14:30:00" + +``` + +
+ +
+ @When I fill in the date field :label with date :date + +
+Fill a datetime field with date value +

+ +```gherkin +When I fill in the date field "Event datetime" with date "2024-07-15" + +``` + +
+
@When I check the checkbox :selector diff --git a/src/FieldTrait.php b/src/FieldTrait.php index b1c6321..fb5bdea 100644 --- a/src/FieldTrait.php +++ b/src/FieldTrait.php @@ -15,6 +15,7 @@ * - Set field values for various input types including selects and WYSIWYG. * - Assert field existence, state, and selected options. * - Support for specialized widgets like color pickers and rich text editors. + * - Support for datetime field widgets with date, time, and datetime options. */ trait FieldTrait { @@ -207,6 +208,61 @@ public function fieldFillWysiwyg(string $field, string $value): void { "); } + /** + * Fill a datetime field with both date and time values. + * + * @code + * When I fill in the datetime field "Event datetime" with date "2024-07-15" and time "14:30:00" + * @endcode + * + * @When I fill in the datetime field :label with date :date and time :time + */ + public function fieldFillDateTime(string $label, string $date, string $time): void { + $this->fieldFillDateTimeField($label, 'date', $date); + $this->fieldFillDateTimeField($label, 'time', $time); + } + + /** + * Fill a datetime field with date value. + * + * @code + * When I fill in the date field "Event datetime" with date "2024-07-15" + * @endcode + * + * @When I fill in the date field :label with date :date + */ + public function fieldFillDate(string $label, string $date): void { + $this->fieldFillDateTimeField($label, 'date', $date); + } + + /** + * Helper method to fill datetime field components. + * + * @param string $label + * The field label. + * @param string $field + * The field component: 'date' or 'time'. + * @param string $value + * The value to set. + * + * @throws \Exception + * If the field is not found. + */ + protected function fieldFillDateTimeField(string $label, string $field, string $value): void { + $xpath = sprintf( + '//*[self::span or self::label or self::h4][contains(normalize-space(.), "%s")]/ancestor::div[contains(@class,"form-item") or contains(@class,"field--widget-datetime-default")]//input[contains(@name,"[%s]")]', + $label, + $field + ); + + $page = $this->getSession()->getPage(); + $element = $page->find('xpath', $xpath); + if (!$element) { + throw new \Exception(sprintf('Date field with label "%s" value not found', $label)); + } + $element->setValue($value); + } + /** * Assert that a select has an option. * diff --git a/tests/behat/features/field_datetime.feature b/tests/behat/features/field_datetime.feature new file mode 100644 index 0000000..ce52c25 --- /dev/null +++ b/tests/behat/features/field_datetime.feature @@ -0,0 +1,30 @@ +Feature: Check that datetime fields are handled correctly in FieldTrait + As a Behat Steps library developer + I want to provide tools to interact with datetime fields + So that users can set date, time, or both values in their tests + + @api @datetime + Scenario: Set both date and time values on a datetime field + Given I am logged in as a user with the "administrator" role + When I go to "node/add/article" + And I fill in "Title" with "[TEST] Article with datetime field" + And I fill in the datetime field "Date and time" with date "2024-03-15" and time "14:30:00" + And I select "Published" from "edit-moderation-state-0-state" + And I press "Save" + Then the response status code should be 200 + And I should see the text "[TEST] Article with datetime field" + And I should see the text "Date and time" + And I should see the text "03/15/2024 - 14:30" + + @api @datetime + Scenario: Set date value on a date field + Given I am logged in as a user with the "administrator" role + When I go to "node/add/article" + And I fill in "Title" with "[TEST] Article with datetime field" + And I fill in the date field "Date only" with date "2024-03-15" + And I select "Published" from "edit-moderation-state-0-state" + And I press "Save" + Then the response status code should be 200 + And I should see the text "[TEST] Article with datetime field" + And I should see the text "Date" + And I should see the text "03/15/2024" diff --git a/tests/behat/fixtures/d10/config/sync/core.entity_form_display.node.article.default.yml b/tests/behat/fixtures/d10/config/sync/core.entity_form_display.node.article.default.yml index dc374a6..9f7292a 100644 --- a/tests/behat/fixtures/d10/config/sync/core.entity_form_display.node.article.default.yml +++ b/tests/behat/fixtures/d10/config/sync/core.entity_form_display.node.article.default.yml @@ -5,6 +5,8 @@ dependencies: config: - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -14,6 +16,7 @@ dependencies: module: - comment - content_moderation + - datetime - file - image - path @@ -47,6 +50,18 @@ content: region: content settings: { } third_party_settings: { } + field_date_and_time: + type: datetime_default + weight: 26 + region: content + settings: { } + third_party_settings: { } + field_date_only: + type: datetime_default + weight: 27 + region: content + settings: { } + third_party_settings: { } field_file: type: file_generic weight: 4 diff --git a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.default.yml b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.default.yml index f638b5d..c9529c9 100644 --- a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.default.yml +++ b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.default.yml @@ -6,6 +6,8 @@ dependencies: - core.entity_view_display.comment.comment.default - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -13,6 +15,7 @@ dependencies: - node.type.article module: - comment + - datetime - file - image - text @@ -45,6 +48,24 @@ content: third_party_settings: { } weight: 0 region: content + field_date_and_time: + type: datetime_default + label: above + settings: + timezone_override: '' + format_type: medium + third_party_settings: { } + weight: 7 + region: content + field_date_only: + type: datetime_default + label: above + settings: + timezone_override: '' + format_type: medium + third_party_settings: { } + weight: 8 + region: content field_file: type: file_default label: above diff --git a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.rss.yml b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.rss.yml index 47fe747..9f8bb78 100644 --- a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.rss.yml +++ b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.rss.yml @@ -6,6 +6,9 @@ dependencies: - core.entity_view_mode.node.rss - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only + - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags - node.type.article @@ -29,6 +32,8 @@ content: hidden: body: true comment: true + field_date_and_time: true + field_date_only: true field_file: true field_image: true field_tags: true diff --git a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_index.yml b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_index.yml index 17695fd..004f5f9 100644 --- a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_index.yml +++ b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_index.yml @@ -7,6 +7,8 @@ dependencies: - core.entity_view_mode.node.search_index - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -51,6 +53,8 @@ content: weight: 1 region: content hidden: + field_date_and_time: true + field_date_only: true field_file: true field_image: true links: true diff --git a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_result.yml b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_result.yml index 6358b4d..f7b0d1d 100644 --- a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_result.yml +++ b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.search_result.yml @@ -6,6 +6,8 @@ dependencies: - core.entity_view_mode.node.search_result - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -53,6 +55,8 @@ content: region: content hidden: comment: true + field_date_and_time: true + field_date_only: true field_file: true field_tags: true search_api_excerpt: true diff --git a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.teaser.yml b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.teaser.yml index 80946a4..4d3bf58 100644 --- a/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.teaser.yml +++ b/tests/behat/fixtures/d10/config/sync/core.entity_view_display.node.article.teaser.yml @@ -6,6 +6,9 @@ dependencies: - core.entity_view_mode.node.teaser - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only + - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags - image.style.medium @@ -58,6 +61,8 @@ content: region: content hidden: comment: true + field_date_and_time: true + field_date_only: true field_file: true field_image: true field_tags: true diff --git a/tests/behat/fixtures/d10/config/sync/field.field.node.article.field_date_and_time.yml b/tests/behat/fixtures/d10/config/sync/field.field.node.article.field_date_and_time.yml new file mode 100644 index 0000000..c7bace7 --- /dev/null +++ b/tests/behat/fixtures/d10/config/sync/field.field.node.article.field_date_and_time.yml @@ -0,0 +1,21 @@ +uuid: 330488f2-c295-406b-8c67-1b979f1d41ec +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_date_and_time + - node.type.article + module: + - datetime +id: node.article.field_date_and_time +field_name: field_date_and_time +entity_type: node +bundle: article +label: 'Date and time' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: datetime diff --git a/tests/behat/fixtures/d10/config/sync/field.field.node.article.field_date_only.yml b/tests/behat/fixtures/d10/config/sync/field.field.node.article.field_date_only.yml new file mode 100644 index 0000000..0fe182e --- /dev/null +++ b/tests/behat/fixtures/d10/config/sync/field.field.node.article.field_date_only.yml @@ -0,0 +1,21 @@ +uuid: 60dc4216-4910-400f-bb93-e66186384875 +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_date_only + - node.type.article + module: + - datetime +id: node.article.field_date_only +field_name: field_date_only +entity_type: node +bundle: article +label: 'Date only' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: datetime diff --git a/tests/behat/fixtures/d10/config/sync/field.storage.node.field_date_and_time.yml b/tests/behat/fixtures/d10/config/sync/field.storage.node.field_date_and_time.yml new file mode 100644 index 0000000..185d339 --- /dev/null +++ b/tests/behat/fixtures/d10/config/sync/field.storage.node.field_date_and_time.yml @@ -0,0 +1,20 @@ +uuid: 8c4bc0be-50c6-4722-b3a3-087e28686c89 +langcode: en +status: true +dependencies: + module: + - datetime + - node +id: node.field_date_and_time +field_name: field_date_and_time +entity_type: node +type: datetime +settings: + datetime_type: datetime +module: datetime +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/tests/behat/fixtures/d10/config/sync/field.storage.node.field_date_only.yml b/tests/behat/fixtures/d10/config/sync/field.storage.node.field_date_only.yml new file mode 100644 index 0000000..b5c9e43 --- /dev/null +++ b/tests/behat/fixtures/d10/config/sync/field.storage.node.field_date_only.yml @@ -0,0 +1,20 @@ +uuid: 7d5ec932-bb3f-4e6b-b4bb-1a703177286c +langcode: en +status: true +dependencies: + module: + - datetime + - node +id: node.field_date_only +field_name: field_date_only +entity_type: node +type: datetime +settings: + datetime_type: date +module: datetime +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/tests/behat/fixtures/d11/config/sync/core.entity_form_display.node.article.default.yml b/tests/behat/fixtures/d11/config/sync/core.entity_form_display.node.article.default.yml index dc374a6..9f7292a 100644 --- a/tests/behat/fixtures/d11/config/sync/core.entity_form_display.node.article.default.yml +++ b/tests/behat/fixtures/d11/config/sync/core.entity_form_display.node.article.default.yml @@ -5,6 +5,8 @@ dependencies: config: - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -14,6 +16,7 @@ dependencies: module: - comment - content_moderation + - datetime - file - image - path @@ -47,6 +50,18 @@ content: region: content settings: { } third_party_settings: { } + field_date_and_time: + type: datetime_default + weight: 26 + region: content + settings: { } + third_party_settings: { } + field_date_only: + type: datetime_default + weight: 27 + region: content + settings: { } + third_party_settings: { } field_file: type: file_generic weight: 4 diff --git a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.default.yml b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.default.yml index f638b5d..c9529c9 100644 --- a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.default.yml +++ b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.default.yml @@ -6,6 +6,8 @@ dependencies: - core.entity_view_display.comment.comment.default - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -13,6 +15,7 @@ dependencies: - node.type.article module: - comment + - datetime - file - image - text @@ -45,6 +48,24 @@ content: third_party_settings: { } weight: 0 region: content + field_date_and_time: + type: datetime_default + label: above + settings: + timezone_override: '' + format_type: medium + third_party_settings: { } + weight: 7 + region: content + field_date_only: + type: datetime_default + label: above + settings: + timezone_override: '' + format_type: medium + third_party_settings: { } + weight: 8 + region: content field_file: type: file_default label: above diff --git a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.rss.yml b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.rss.yml index 47fe747..9f8bb78 100644 --- a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.rss.yml +++ b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.rss.yml @@ -6,6 +6,9 @@ dependencies: - core.entity_view_mode.node.rss - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only + - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags - node.type.article @@ -29,6 +32,8 @@ content: hidden: body: true comment: true + field_date_and_time: true + field_date_only: true field_file: true field_image: true field_tags: true diff --git a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_index.yml b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_index.yml index 17695fd..004f5f9 100644 --- a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_index.yml +++ b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_index.yml @@ -7,6 +7,8 @@ dependencies: - core.entity_view_mode.node.search_index - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -51,6 +53,8 @@ content: weight: 1 region: content hidden: + field_date_and_time: true + field_date_only: true field_file: true field_image: true links: true diff --git a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_result.yml b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_result.yml index 6358b4d..f7b0d1d 100644 --- a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_result.yml +++ b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.search_result.yml @@ -6,6 +6,8 @@ dependencies: - core.entity_view_mode.node.search_result - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags @@ -53,6 +55,8 @@ content: region: content hidden: comment: true + field_date_and_time: true + field_date_only: true field_file: true field_tags: true search_api_excerpt: true diff --git a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.teaser.yml b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.teaser.yml index 80946a4..4d3bf58 100644 --- a/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.teaser.yml +++ b/tests/behat/fixtures/d11/config/sync/core.entity_view_display.node.article.teaser.yml @@ -6,6 +6,9 @@ dependencies: - core.entity_view_mode.node.teaser - field.field.node.article.body - field.field.node.article.comment + - field.field.node.article.field_date_and_time + - field.field.node.article.field_date_only + - field.field.node.article.field_file - field.field.node.article.field_image - field.field.node.article.field_tags - image.style.medium @@ -58,6 +61,8 @@ content: region: content hidden: comment: true + field_date_and_time: true + field_date_only: true field_file: true field_image: true field_tags: true diff --git a/tests/behat/fixtures/d11/config/sync/field.field.node.article.field_date_and_time.yml b/tests/behat/fixtures/d11/config/sync/field.field.node.article.field_date_and_time.yml new file mode 100644 index 0000000..c7bace7 --- /dev/null +++ b/tests/behat/fixtures/d11/config/sync/field.field.node.article.field_date_and_time.yml @@ -0,0 +1,21 @@ +uuid: 330488f2-c295-406b-8c67-1b979f1d41ec +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_date_and_time + - node.type.article + module: + - datetime +id: node.article.field_date_and_time +field_name: field_date_and_time +entity_type: node +bundle: article +label: 'Date and time' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: datetime diff --git a/tests/behat/fixtures/d11/config/sync/field.field.node.article.field_date_only.yml b/tests/behat/fixtures/d11/config/sync/field.field.node.article.field_date_only.yml new file mode 100644 index 0000000..0fe182e --- /dev/null +++ b/tests/behat/fixtures/d11/config/sync/field.field.node.article.field_date_only.yml @@ -0,0 +1,21 @@ +uuid: 60dc4216-4910-400f-bb93-e66186384875 +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_date_only + - node.type.article + module: + - datetime +id: node.article.field_date_only +field_name: field_date_only +entity_type: node +bundle: article +label: 'Date only' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: datetime diff --git a/tests/behat/fixtures/d11/config/sync/field.storage.node.field_date_and_time.yml b/tests/behat/fixtures/d11/config/sync/field.storage.node.field_date_and_time.yml new file mode 100644 index 0000000..185d339 --- /dev/null +++ b/tests/behat/fixtures/d11/config/sync/field.storage.node.field_date_and_time.yml @@ -0,0 +1,20 @@ +uuid: 8c4bc0be-50c6-4722-b3a3-087e28686c89 +langcode: en +status: true +dependencies: + module: + - datetime + - node +id: node.field_date_and_time +field_name: field_date_and_time +entity_type: node +type: datetime +settings: + datetime_type: datetime +module: datetime +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/tests/behat/fixtures/d11/config/sync/field.storage.node.field_date_only.yml b/tests/behat/fixtures/d11/config/sync/field.storage.node.field_date_only.yml new file mode 100644 index 0000000..b5c9e43 --- /dev/null +++ b/tests/behat/fixtures/d11/config/sync/field.storage.node.field_date_only.yml @@ -0,0 +1,20 @@ +uuid: 7d5ec932-bb3f-4e6b-b4bb-1a703177286c +langcode: en +status: true +dependencies: + module: + - datetime + - node +id: node.field_date_only +field_name: field_date_only +entity_type: node +type: datetime +settings: + datetime_type: date +module: datetime +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false