From fe569ebd5a8d94e32befbc232e1500095a030547 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Mon, 15 Aug 2022 18:53:39 +0200
Subject: [PATCH] WIP: timezone

---
 .docker/docker-compose.yml  |  1 +
 .docker/tester_pycaosdb.ini |  2 ++
 tests/test_misc.py          | 36 ++++++++++++++++++++++++++++++++++--
 3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml
index a3c0bae..20f1a15 100644
--- a/.docker/docker-compose.yml
+++ b/.docker/docker-compose.yml
@@ -32,6 +32,7 @@ services:
       - "10080:10080"
     environment:
       DEBUG: 1
+      DOCKER_TZ: "Cuba"
       CAOSDB_CONFIG_AUTHTOKEN_CONFIG: "conf/core/authtoken.example.yaml"
       CAOSDB_CONFIG_TRANSACTION_BENCHMARK_ENABLED: "TRUE"
       CAOSDB_CONFIG__CAOSDB_INTEGRATION_TEST_SUITE_KEY: _CAOSDB_PYINTTEST_SUITE
diff --git a/.docker/tester_pycaosdb.ini b/.docker/tester_pycaosdb.ini
index 2159dec..b0d2e9f 100644
--- a/.docker/tester_pycaosdb.ini
+++ b/.docker/tester_pycaosdb.ini
@@ -18,6 +18,8 @@ test_authentication.admin_token_crud = /authtoken/admin_token_crud.txt
 test_authentication.admin_token_expired = /authtoken/admin_token_expired.txt
 test_authentication.admin_token_3_attempts = /authtoken/admin_token_3_attempts.txt
 
+; magic time zone of the server
+test_misc.test_time_zone.time_zone = Cuba
 
 [Connection]
 url = https://caosdb-server:10443/
diff --git a/tests/test_misc.py b/tests/test_misc.py
index 50397b7..326cd02 100644
--- a/tests/test_misc.py
+++ b/tests/test_misc.py
@@ -28,8 +28,7 @@ import caosdb as db
 from caosdb import (Container, Info, Property, Record, RecordType,
                     execute_query, administration as admin)
 from caosdb.utils.register_tests import set_test_key, clear_database
-from pytest import raises
-from pytest import mark
+from pytest import raises, mark, fixture
 
 set_test_key("_CAOSDB_PYINTTEST_SUITE")
 
@@ -422,3 +421,36 @@ def test_retrieve_wrong_role(clear_database):
                                 "intialized with a wrong class by this client "
                                 "or it has changed in the past and this "
                                 "client did't know about it yet.")
+
+
+@fixture
+def reset_time_zone():
+    yield None
+    server_time_zone = db.get_config().get("IntegrationTests",
+                                           "test_misc.test_time_zone.time_zone")
+    if server_time_zone is not None:
+        admin.set_server_property("TIMEZONE", server_time_zone)
+
+
+def test_time_zone(reset_time_zone):
+    server_time_zone = db.get_config().get("IntegrationTests",
+                                           "test_misc.test_time_zone.time_zone")
+
+    if server_time_zone is not None:
+        assert admin.get_server_property(
+            "TIMEZONE") == server_time_zone, "If this test fails locally, try to re-run it"
+
+    admin.set_server_property("TIMEZONE", "UTC")
+    assert db.Info().time_zone.offset == "+0000"
+    admin.set_server_property("TIMEZONE", "Etc/GMT+5")  # Standard Time NY
+    gmt_plus_5 = db.Info().time_zone.offset
+    assert gmt_plus_5 == "-0500"
+
+    # Today I learned: POSIX defines GMT+X as UTC-X (... no words...)
+    admin.set_server_property("TIMEZONE", "EST")
+    assert db.Info().time_zone.offset == gmt_plus_5
+
+    admin.set_server_property("TIMEZONE", "Etc/GMT-1")  # Standard Time Berlin
+    assert db.Info().time_zone.offset == "+0100"
+    admin.set_server_property("TIMEZONE", "Etc/GMT-14")  # Kiritimati
+    assert db.Info().time_zone.offset == "+1400"
-- 
GitLab