about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-11-11 17:03:13 -0600
committerFrederick Muriuki Muriithi2024-11-11 17:03:13 -0600
commit75b1339e9cd9c1ee75e98a92c3c490b16f10077a (patch)
treed8ff73aed3af1235243800b38b36d19d89f30d04 /tests
parent5f30a202c152a1b0f8211e53a2973ee782ddc8f9 (diff)
downloadgenenetwork3-75b1339e9cd9c1ee75e98a92c3c490b16f10077a.tar.gz
Allow extra database connection options on URI
Update the database URI parsing to allow setting of extra connection
option on the URI string.
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/test_db_utils.py69
1 files changed, 63 insertions, 6 deletions
diff --git a/tests/unit/test_db_utils.py b/tests/unit/test_db_utils.py
index beb7169..3c7ce59 100644
--- a/tests/unit/test_db_utils.py
+++ b/tests/unit/test_db_utils.py
@@ -10,16 +10,73 @@ from gn3.db_utils import parse_db_url, database_connection
 @mock.patch("gn3.db_utils.parse_db_url")
 def test_database_connection(mock_db_parser, mock_sql):
     """test for creating database connection"""
-    mock_db_parser.return_value = ("localhost", "guest", "4321", "users", None)
+    mock_db_parser.return_value = {
+        "host": "localhost",
+        "user": "guest",
+        "password": "4321",
+        "database": "users",
+        "port": 3306
+    }
 
+    mock_sql.Error = Exception
     with database_connection("mysql://guest:4321@localhost/users") as _conn:
         mock_sql.connect.assert_called_with(
             db="users", user="guest", passwd="4321", host="localhost",
             port=3306)
 
+
 @pytest.mark.unit_test
-def test_parse_db_url():
-    """test for parsing db_uri env variable"""
-    results = parse_db_url("mysql://username:4321@localhost/test")
-    expected_results = ("localhost", "username", "4321", "test", None)
-    assert results == expected_results
+@pytest.mark.parametrize(
+    "sql_uri,expected",
+    (("mysql://theuser:passwd@thehost:3306/thedb",
+      {
+          "host": "thehost",
+          "port": 3306,
+          "user": "theuser",
+          "password": "passwd",
+          "database": "thedb"
+      }),
+     (("mysql://auser:passwd@somehost:3307/thedb?"
+       "unix_socket=/run/mysqld/mysqld.sock&connect_timeout=30"),
+      {
+          "host": "somehost",
+          "port": 3307,
+          "user": "auser",
+          "password": "passwd",
+          "database": "thedb",
+          "unix_socket": "/run/mysqld/mysqld.sock",
+          "connect_timeout": 30
+      }),
+     ("mysql://guest:4321@localhost/users",
+      {
+          "host": "localhost",
+          "port": 3306,
+          "user": "guest",
+          "password": "4321",
+          "database": "users"
+      }),
+     ("mysql://localhost/users",
+      {
+          "host": "localhost",
+          "port": 3306,
+          "user": None,
+          "password": None,
+          "database": "users"
+      })))
+def test_parse_db_url(sql_uri, expected):
+    """Test that valid URIs are passed into valid connection dicts"""
+    assert parse_db_url(sql_uri) == expected
+
+
+@pytest.mark.unit_test
+@pytest.mark.parametrize(
+    "sql_uri,invalidopt",
+    (("mysql://localhost/users?socket=/run/mysqld/mysqld.sock", "socket"),
+     ("mysql://localhost/users?connect_timeout=30&notavalidoption=value",
+      "notavalidoption")))
+def test_parse_db_url_with_invalid_options(sql_uri, invalidopt):
+    """Test that invalid options cause the function to raise an exception."""
+    with pytest.raises(AssertionError) as exc_info:
+        parse_db_url(sql_uri)
+
+    assert exc_info.value.args[0] == f"Invalid database connection option ({invalidopt}) provided."