oncall-engine/engine/common/tests/test_l10n.py
Joey Orlando 572131b921
add user locale field to mobile app user settings table + change going on call push notification text (#2131)
# 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)
2023-06-14 12:19:58 -04:00

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"