# What this PR does
- add user locale field to mobile app user settings table + add a test
that sends `PATCH` requests to this endpoint
- change "you're going on call" push notification text to include
localized shift time. The general format is now:
```python
f"You're going on call in {time_until_going_oncall} for schedule
{schedule.name}, {formatted_shift}"
```
- `time_until_going_oncall` is a "human-readable" format of the time
until the start)
- `schedule.name` is self-explanatory
- `formatted_shift` this depends on the shift. If the shift starts and
ends on the same day, the format will be "HH:mm - HH:mm". Otherwise, if
the shift starts and ends on different days, the format will be
"YYYY-MM-DD HH:mm - YYYY-MM-DD HH:mm". **Note** that all datetime
related formatting will use the new `locale` field that we are now
storing in the mobile app user settings table. If no locale is yet
present we will fallback to "en"
## Which issue(s) this PR fixes
closes https://github.com/grafana/oncall/issues/2024
https://github.com/grafana/oncall-mobile-app/issues/187
## Checklist
- [x] Unit, integration, and e2e (if applicable) tests updated
- [ ] Documentation added (or `pr:no public docs` PR label added if not
required)
- [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not
required)
27 lines
1,021 B
Python
27 lines
1,021 B
Python
from django.utils import timezone
|
|
|
|
from common import l10n
|
|
|
|
REAL_LOCALE = "fr_CA"
|
|
FAKE_LOCALE = "potato"
|
|
dt = timezone.datetime(2022, 5, 4, 15, 14, 13, 12)
|
|
|
|
|
|
def test_format_localized_datetime():
|
|
assert l10n.format_localized_datetime(dt, REAL_LOCALE) == "2022-05-04 15 h 14"
|
|
|
|
# test that it catches the exception and falls back to some configured default
|
|
assert l10n.format_localized_datetime(dt, FAKE_LOCALE) == "5/4/22, 3:14\u202fPM"
|
|
|
|
# test that it properly handles None and falls back to some configured default
|
|
assert l10n.format_localized_datetime(dt, None) == "5/4/22, 3:14\u202fPM"
|
|
|
|
|
|
def test_format_localized_time():
|
|
assert l10n.format_localized_time(dt, REAL_LOCALE) == "15 h 14"
|
|
|
|
# test that it catches the exception and falls back to some configured default
|
|
assert l10n.format_localized_time(dt, FAKE_LOCALE) == "3:14\u202fPM"
|
|
|
|
# test that it properly handles None and falls back to some configured default
|
|
assert l10n.format_localized_time(dt, None) == "3:14\u202fPM"
|