"""module contains test for db_utils""" import pytest from gn3.db_utils import parse_db_url @pytest.mark.unit_test @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¬avalidoption=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."