mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-05 16:38:59 -04:00
Merge pull request #962 from GSA/fix_scheduled_jobs_time
fix scheduled jobs time
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
|
import datetime
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
from app.extensions import redis_client
|
from app.extensions import redis_client
|
||||||
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
||||||
|
from app.utils.csv import get_user_preferred_timezone
|
||||||
|
|
||||||
|
|
||||||
class JobApiClient(NotifyAdminAPIClient):
|
class JobApiClient(NotifyAdminAPIClient):
|
||||||
@@ -86,10 +90,26 @@ class JobApiClient(NotifyAdminAPIClient):
|
|||||||
def has_jobs(self, service_id):
|
def has_jobs(self, service_id):
|
||||||
return bool(self.get_jobs(service_id)["data"])
|
return bool(self.get_jobs(service_id)["data"])
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def convert_user_time_to_utc(cls, scheduled_for):
|
||||||
|
user_preferred_tz = get_user_preferred_timezone()
|
||||||
|
|
||||||
|
user_date = datetime.datetime.fromisoformat(scheduled_for)
|
||||||
|
scheduled_for = (
|
||||||
|
user_date.replace(tzinfo=ZoneInfo(user_preferred_tz))
|
||||||
|
.astimezone(ZoneInfo("UTC"))
|
||||||
|
.strftime("%Y-%m-%dT%H:%M:%S")
|
||||||
|
)
|
||||||
|
|
||||||
|
return scheduled_for
|
||||||
|
|
||||||
def create_job(self, job_id, service_id, scheduled_for=None):
|
def create_job(self, job_id, service_id, scheduled_for=None):
|
||||||
data = {"id": job_id}
|
data = {"id": job_id}
|
||||||
|
|
||||||
|
# make a datetime object in the user's preferred timezone
|
||||||
|
|
||||||
if scheduled_for:
|
if scheduled_for:
|
||||||
|
scheduled_for = JobApiClient.convert_user_time_to_utc(scheduled_for)
|
||||||
data.update({"scheduled_for": scheduled_for})
|
data.update({"scheduled_for": scheduled_for})
|
||||||
|
|
||||||
data = _attach_current_user(data)
|
data = _attach_current_user(data)
|
||||||
|
|||||||
@@ -117,6 +117,14 @@ def hide_from_search_engines(f):
|
|||||||
return decorated_function
|
return decorated_function
|
||||||
|
|
||||||
|
|
||||||
|
# Function used for debugging.
|
||||||
|
# Do print(hilite(message)) while debugging, then remove your print statements
|
||||||
|
def hilite(message):
|
||||||
|
ansi_green = "\033[32m"
|
||||||
|
ansi_reset = "\033[0m"
|
||||||
|
return f"{ansi_green}{message}{ansi_reset}"
|
||||||
|
|
||||||
|
|
||||||
# Function to merge two dict or lists with a JSON-like structure into one.
|
# Function to merge two dict or lists with a JSON-like structure into one.
|
||||||
# JSON-like means they can contain all types JSON can: all the main primitives
|
# JSON-like means they can contain all types JSON can: all the main primitives
|
||||||
# plus nested lists or dictionaries.
|
# plus nested lists or dictionaries.
|
||||||
|
|||||||
@@ -32,16 +32,24 @@ def test_client_creates_job_data_correctly(mocker, fake_uuid):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_convert_user_time_to_utc():
|
||||||
|
original_time = "2023-12-01T12:00:00"
|
||||||
|
utc_time = JobApiClient.convert_user_time_to_utc(original_time)
|
||||||
|
assert utc_time == "2023-12-01T17:00:00"
|
||||||
|
|
||||||
|
|
||||||
def test_client_schedules_job(mocker, fake_uuid):
|
def test_client_schedules_job(mocker, fake_uuid):
|
||||||
mocker.patch("app.notify_client.current_user", id="1")
|
mocker.patch("app.notify_client.current_user", id="1")
|
||||||
|
|
||||||
mock_post = mocker.patch("app.notify_client.job_api_client.JobApiClient.post")
|
mock_post = mocker.patch("app.notify_client.job_api_client.JobApiClient.post")
|
||||||
|
|
||||||
when = "2016-08-25T13:04:21.767198"
|
# The default timezone is US/Easter which is off by 4 hours in the summer from UTC
|
||||||
|
when_in_utc = "2016-08-25T17:04:21"
|
||||||
|
when = "2016-08-25T13:04:21"
|
||||||
|
|
||||||
JobApiClient().create_job(fake_uuid, 1, scheduled_for=when)
|
JobApiClient().create_job(fake_uuid, 1, scheduled_for=when)
|
||||||
|
|
||||||
assert mock_post.call_args[1]["data"]["scheduled_for"] == when
|
assert mock_post.call_args[1]["data"]["scheduled_for"] == when_in_utc
|
||||||
|
|
||||||
|
|
||||||
def test_client_gets_job_by_service_and_job(mocker):
|
def test_client_gets_job_by_service_and_job(mocker):
|
||||||
|
|||||||
Reference in New Issue
Block a user