|
42 | 42 | import org.labkey.test.components.html.OptionSelect; |
43 | 43 | import org.labkey.test.pages.ImportDataPage; |
44 | 44 | import org.labkey.test.pages.ReactAssayDesignerPage; |
| 45 | +import org.labkey.test.pages.core.admin.BaseSettingsPage; |
45 | 46 | import org.labkey.test.pages.experiment.CreateSampleTypePage; |
46 | 47 | import org.labkey.test.pages.experiment.UpdateSampleTypePage; |
47 | 48 | import org.labkey.test.params.FieldDefinition; |
@@ -137,6 +138,75 @@ protected void doCleanup(boolean afterTest) |
137 | 138 | _userHelper.deleteUsers(false, USER_FOR_FILTERTEST.getEmail()); |
138 | 139 | } |
139 | 140 |
|
| 141 | + // Issue 52390: milliseconds are truncated from time fields on update or reshow |
| 142 | + @Test |
| 143 | + public void testDateAndTimeValueUpdates() throws Exception |
| 144 | + { |
| 145 | + var projectSettingsPage = goToProjectSettings(); |
| 146 | + projectSettingsPage.setDefaultDateDisplayInherited(false); |
| 147 | + projectSettingsPage.setDefaultDateDisplay(BaseSettingsPage.DATE_FORMAT.MMMM_dd_yyyy); |
| 148 | + projectSettingsPage.setDefaultDateTimeDisplayInherited(false); |
| 149 | + projectSettingsPage.setDefaultDateTimeDisplay(BaseSettingsPage.DATE_FORMAT.dd_MMM_yyyy, |
| 150 | + BaseSettingsPage.TIME_FORMAT.HH_mm_ss_SSS); |
| 151 | + projectSettingsPage.setDefaultTimeDisplayInherited(false); |
| 152 | + projectSettingsPage.setDefaultTimeDisplay(BaseSettingsPage.TIME_FORMAT.HH_mm_ss_SSS); |
| 153 | + projectSettingsPage.save(); |
| 154 | + |
| 155 | + final String sampleTypeName = "dateTimeEditSamples"; |
| 156 | + final FieldDefinition txtField = new FieldDefinition( |
| 157 | + TestDataGenerator.randomFieldName("text"), ColumnType.String).setRequired(true); |
| 158 | + final FieldDefinition dateField = new FieldDefinition( |
| 159 | + TestDataGenerator.randomFieldName("date", ":"), ColumnType.Date); |
| 160 | + final FieldDefinition timeField = new FieldDefinition( |
| 161 | + TestDataGenerator.randomFieldName("time", ":"), ColumnType.Time); |
| 162 | + final FieldDefinition dateTimeField = new FieldDefinition( |
| 163 | + TestDataGenerator.randomFieldName("dateTime", ":"), ColumnType.DateAndTime); |
| 164 | + final List<FieldDefinition> fields = List.of(txtField, dateField, timeField, dateTimeField); |
| 165 | + |
| 166 | + SampleTypeDefinition sampleTypeDefinition = new SampleTypeDefinition(sampleTypeName).setFields(fields); |
| 167 | + sampleTypeDefinition.create(createDefaultConnection(), getProjectName()); |
| 168 | + |
| 169 | + goToProjectHome(); |
| 170 | + waitAndClickAndWait(Locator.linkWithText(sampleTypeName)); |
| 171 | + var dataRegion = DataRegionTable.DataRegion(getDriver()).withName("Material").waitFor(); |
| 172 | + var updatePage = dataRegion.clickInsertNewRow(); |
| 173 | + String date = "January 01 2025"; |
| 174 | + String time = "23:56:54:123"; |
| 175 | + String dateTime = "06-May-1986 23:58:34.123"; |
| 176 | + updatePage.setField("Name", "sample01"); |
| 177 | + updatePage.setField(dateField.getName(), date); |
| 178 | + updatePage.setField(timeField.getName(), time); |
| 179 | + updatePage.setField(dateTimeField.getName(), dateTime); |
| 180 | + updatePage.submitExpectingError(); |
| 181 | + |
| 182 | + checker().wrapAssertion(()-> Assertions.assertThat(updatePage.getTextInputValue(dateField.getName())) |
| 183 | + .isEqualTo("2025-01-01")); // expect reformat of date |
| 184 | + checker().wrapAssertion(()-> Assertions.assertThat(updatePage.getTextInputValue(timeField.getName())) |
| 185 | + .as("expect time to retain milliseconds") |
| 186 | + .isEqualTo(time)); |
| 187 | + checker().wrapAssertion(()-> Assertions.assertThat(updatePage.getTextInputValue(dateTimeField.getName())) |
| 188 | + .as("expect dateTime to post back as entered") |
| 189 | + .isEqualTo(dateTime)); |
| 190 | + checker().screenShotIfNewError("unexpected data update"); |
| 191 | + |
| 192 | + // fill in the required text field and submit |
| 193 | + updatePage.setField(txtField.getName(), "sample01"); |
| 194 | + updatePage.submit(); |
| 195 | + |
| 196 | + var afterSubmit = DataRegionTable.DataRegion(getDriver()).withName("Material").waitFor(); |
| 197 | + var rowData = afterSubmit.getRowDataAsText(0); |
| 198 | + checker().withScreenshot("unexpected data persisted") |
| 199 | + .wrapAssertion(()-> Assertions.assertThat(rowData) |
| 200 | + .as("Issue 52390 expect date, time, dateTime to be shown as entered") |
| 201 | + .contains(date, time, dateTime)); |
| 202 | + |
| 203 | + var cleanupDateFormatsPage = goToProjectSettings(); |
| 204 | + cleanupDateFormatsPage.setDefaultDateDisplayInherited(true); |
| 205 | + cleanupDateFormatsPage.setDefaultDateTimeDisplayInherited(true); |
| 206 | + cleanupDateFormatsPage.setDefaultTimeDisplayInherited(true); |
| 207 | + cleanupDateFormatsPage.save(); |
| 208 | + } |
| 209 | + |
140 | 210 | @Test |
141 | 211 | public void testCreateSampleTypeNoExpression() |
142 | 212 | { |
|
0 commit comments