Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix timezone issues with recurring action datetime pickers (bsc#1225196) #8833

Merged
merged 2 commits into from
Jun 18, 2024

Conversation

cbbayburt
Copy link
Contributor

@cbbayburt cbbayburt commented May 28, 2024

Fixes multiple issues about timezone handling in recurring action details page and datetime pickers:

  • Fix the time displayed in the picker after selection (bsc#1225196)
  • In recurring action details, show "Created At" in the correct timezone instead of server's (DB's) timezone
  • Append server timezone to "Execution Time" in recurring action details

Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1225196

Documentation

  • No documentation needed: Bugfix

Test coverage

  • No tests: already covered

Links

https://bugzilla.suse.com/show_bug.cgi?id=1225196

Changelogs

Make sure the changelogs entries you are adding are compliant with https://github.com/uyuni-project/uyuni/wiki/Contributing#changelogs and https://github.com/uyuni-project/uyuni/wiki/Contributing#uyuni-projectuyuni-repository

If you don't need a changelog check, please mark this checkbox:

  • No changelog needed

If you uncheck the checkbox after the PR is created, you will need to re-run changelog_test (see below)

Re-run a test

If you need to re-run a test, please mark the related checkbox, it will be unchecked automatically once it has re-run:

  • Re-run test "changelog_test"
  • Re-run test "backend_unittests_pgsql"
  • Re-run test "java_pgsql_tests"
  • Re-run test "schema_migration_test_pgsql"
  • Re-run test "susemanager_unittests"
  • Re-run test "javascript_lint"
  • Re-run test "spacecmd_unittests"

Before you merge

Check How to branch and merge properly!

Copy link
Contributor

👋 Hello! Thanks for contributing to our project.
Acceptance tests will take some time (aprox. 1h), please be patient ☕
You can see the progress at the end of this page and at https://github.com/uyuni-project/uyuni/pull/8833/checks
Once tests finish, if they fail, you can check 👀 the cucumber report. See the link at the output of the action.
You can also check the artifacts section, which contains the logs at https://github.com/uyuni-project/uyuni/pull/8833/checks.

If you are unsure the failing tests are related to your code, you can check the "reference jobs". These are jobs that run on a scheduled time with code from master. If they fail for the same reason as your build, it means the tests or the infrastructure are broken. If they do not fail, but yours do, it means it is related to your code.

Reference tests:

KNOWN ISSUES

Sometimes the build can fail when pulling new jar files from download.opensuse.org . This is a known limitation. Given this happens rarely, when it does, all you need to do is rerun the test. Sorry for the inconvenience.

For more tips on troubleshooting, see the troubleshooting guide.

Happy hacking!
⚠️ You should not merge if acceptance tests fail to pass. ⚠️

@cbbayburt cbbayburt marked this pull request as draft May 28, 2024 19:21
@cbbayburt cbbayburt force-pushed the bsc1225196 branch 2 times, most recently from 3e14327 to 749af37 Compare May 28, 2024 19:36
@cbbayburt cbbayburt marked this pull request as ready for review May 28, 2024 19:38
// Creation time is always retrieved in server's timezone
// Parse the date and show it in user's timezone
const createdAt = localizedMoment(
Date.parse(`${details.createdAt} ${localizedMoment.serverTimeZoneAbbr}`)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like we could maybe standardize this away inside localizedMoment? Although it would be preferable if we could make details.createdAt an ISO string rather than a humanized date string, then we could pass it directly to localizedMoment. Would that be possible or does it seem like too much work?

If the latter, we could extend the interface we provide in localizedMoment, maybe something along these lines?

  Object.defineProperties(moment, {
    // ...
+   fromServerString: {
+     get() {
+       return function fromServerString(input: string): moment.Moment {
+         return moment.tz(input, config.serverTimeZone);
+       };
+     },
+   },
  });

What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I actually wanted to open this to discussion. The ideal solution would be to send ISO dates from the backend, but we would need to do a whole sweep since this is how we get the DB dates all around. OTOH, the current format is consistent, so I guess your suggestion is the best way for now. I haven't been able to make it work without parsing it with JS Date so far, but I'll try it and see if it works.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well the above internally uses Date anyway since we don't specify any format information. But if we know the server format ahead of time we could add that and make that check strict. That way we could use this for pages that use the current format, but use ISO for everything new we make and over time if we touch stuff, move that to ISO too.

Of course, if there was an easy way to swap everything to ISO, that would be preferred, but I suspect that would be a beast with many hidden surprises.

@Etheryte
Copy link
Member

When I create a new recurring action with a weekly schedule without touching any of the fields with this diff, I get an error about a null value when trying to look at the details of the created action.

Other than that this looks good, thanks a lot for taking the time to look into this.

@cbbayburt cbbayburt added the merge-candidate Meaning it needs to be considered for merging when the master branch is frozen label Jun 13, 2024
@admd admd merged commit 9bd789d into uyuni-project:master Jun 18, 2024
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
javascript_lint merge-candidate Meaning it needs to be considered for merging when the master branch is frozen needs-translation ui
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants