Bert Leunis pushed to branch feature/CHANNELMGR-1391 at cms-community / hippo-addon-channel-manager
Commits: f62023f1 by Bert Leunis at 2018-03-13T13:51:59+01:00 CHANNELMGR-1391 improve handling of date string value Many thanks to the unit test! - - - - - 4ea1adb6 by Bert Leunis at 2018-03-13T13:52:48+01:00 CHANNELMGR-1391 show validation per date field Also in case of multiple fields, the error message appears per field instance. - - - - - 5 changed files: - content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java - content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java - frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js - frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html - frontend-ng/src/i18n/en.json Changes: ===================================== content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java ===================================== --- a/content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java +++ b/content-service/src/main/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldType.java @@ -61,7 +61,7 @@ public class DateFieldType extends PrimitiveFieldType { } final Calendar calendar = ISO8601.parse(value); - if (calendar != null && calendar.getTime().equals(PropertyValueProvider.EMPTY_DATE)) { + if (calendar == null || calendar.getTime().equals(PropertyValueProvider.EMPTY_DATE)) { return new FieldValue(StringUtils.EMPTY); } ===================================== content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java ===================================== --- a/content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java +++ b/content-service/src/test/java/org/onehippo/cms/channelmanager/content/documenttype/field/type/DateFieldTypeTest.java @@ -23,8 +23,6 @@ import java.util.List; import java.util.Optional; import javax.jcr.Node; -import javax.jcr.PropertyType; -import javax.jcr.Value; import org.apache.jackrabbit.value.ValueFactoryImpl; import org.hippoecm.repository.util.JcrUtils; @@ -98,6 +96,34 @@ public class DateFieldTypeTest { assertThat(node.getProperty(PROPERTY).getString(), equalTo("" + newValue)); } + @Test + public void testGetFieldValueForNullValue() { + final PrimitiveFieldType fieldType = new DateFieldType(); + final FieldValue fieldValue = fieldType.getFieldValue(null); + assertThat(fieldValue.getValue(), equalTo("")); + } + + @Test + public void testGetFieldValueForBlankValue() { + final PrimitiveFieldType fieldType = new DateFieldType(); + final FieldValue fieldValue = fieldType.getFieldValue(" "); + assertThat(fieldValue.getValue(), equalTo("")); + } + + @Test + public void testGetFieldValueForUnparsableValue() { + final PrimitiveFieldType fieldType = new DateFieldType(); + final FieldValue fieldValue = fieldType.getFieldValue("doesnotparse"); + assertThat(fieldValue.getValue(), equalTo("")); + } + + @Test + public void testGetFieldValueForParsableValue() { + final PrimitiveFieldType fieldType = new DateFieldType(); + final FieldValue fieldValue = fieldType.getFieldValue("2015-08-24T06:53:00.000Z"); + assertThat(fieldValue.getValue(), equalTo("2015-08-24T06:53:00.000Z")); + } + // TODO: what is considered an invalid value? /* @Test ===================================== frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js ===================================== --- a/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js +++ b/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.controller.js @@ -126,6 +126,12 @@ class DateFieldController { return index > 0 ? `${fieldName}[${index + 1}]` : fieldName; } + getFieldError(index) { + const fieldName = this.getFieldName(index); + const field = this.form[fieldName]; + return field.$error; + } + valueChanged() { this._updateFieldValues(); this.FieldService.startDraftTimer(this.getFieldName(), this.fieldValues); ===================================== frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html ===================================== --- a/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html +++ b/frontend-ng/src/app/channel/sidePanels/rightSidePanel/contentEditor/fields/dateField/dateField.html @@ -36,13 +36,17 @@ </md-icon> </label> - <md-datepicker ng-model="dateValue.date" - ng-change="$ctrl.valueChanged()" - name="{{::$ctrl.getFieldName($index)}}" - aria-label="{{::$ctrl.fieldType.displayName}}" - ng-required="::$ctrl.fieldType.required" - ng-focus="$ctrl.focusDateField($event)" - ng-blur="$ctrl.blurDateField($event)"/> + <md-datepicker ng-model="dateValue.date" + ng-change="$ctrl.valueChanged()" + name="{{::$ctrl.getFieldName($index)}}" + aria-label="{{::$ctrl.fieldType.displayName}}" + ng-required="::$ctrl.fieldType.required" + ng-focus="$ctrl.focusDateField($event)" + ng-blur="$ctrl.blurDateField($event)"/> + <div ng-messages="$ctrl.getFieldError($index)"> + <div ng-message="valid">{{ ::'ERROR_INVALID_DATE' | translate }}</div> + <div ng-message="required">{{ ::'ERROR_FIELD_REQUIRED' | translate:$ctrl.fieldType }}</div> + </div> </md-input-container> <md-input-container class="qa-field"> ===================================== frontend-ng/src/i18n/en.json ===================================== --- a/frontend-ng/src/i18n/en.json +++ b/frontend-ng/src/i18n/en.json @@ -69,6 +69,7 @@ "ERROR_FIELD_LONG_PATTERN": "Use numbers only", "ERROR_FIELD_REQUIRED": "{{displayName}} is a required field", "ERROR_INVALID_DATA": "Unable to save. The document contains invalid content", + "ERROR_INVALID_DATE": "Enter a valid date", "ERROR_INVALID_TEMPLATE_QUERY": "The template query '{{templateQuery}}' failed to execute", "ERROR_MENU_LOAD_FAILED": "Failed to load menu", "ERROR_MENU_LOCKED_BY": "Menu locked by '{{lockedBy}}'", View it on GitLab: https://code.onehippo.org/cms-community/hippo-addon-channel-manager/compare/8d569627e313094ab5350ea311649e52222ad406...4ea1adb6f14f2564c1cabe86fb2f8a603f9a3e67 --- View it on GitLab: https://code.onehippo.org/cms-community/hippo-addon-channel-manager/compare/8d569627e313094ab5350ea311649e52222ad406...4ea1adb6f14f2564c1cabe86fb2f8a603f9a3e67 You're receiving this email because of your account on code.onehippo.org.
_______________________________________________ Hippocms-svn mailing list Hippocms-svn@lists.onehippo.org https://lists.onehippo.org/mailman/listinfo/hippocms-svn