test_mysql.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import hashlib
  2. from unittest.mock import MagicMock
  3. import pytest
  4. from embedchain.loaders.mysql import MySQLLoader
  5. @pytest.fixture
  6. def mysql_loader(mocker):
  7. with mocker.patch("mysql.connector.connection.MySQLConnection"):
  8. config = {
  9. "host": "localhost",
  10. "port": "3306",
  11. "user": "your_username",
  12. "password": "your_password",
  13. "database": "your_database",
  14. }
  15. loader = MySQLLoader(config=config)
  16. yield loader
  17. def test_mysql_loader_initialization(mysql_loader):
  18. assert mysql_loader.config is not None
  19. assert mysql_loader.connection is not None
  20. assert mysql_loader.cursor is not None
  21. def test_mysql_loader_invalid_config():
  22. with pytest.raises(ValueError, match="Invalid sql config: None"):
  23. MySQLLoader(config=None)
  24. def test_mysql_loader_setup_loader_successful(mysql_loader):
  25. assert mysql_loader.connection is not None
  26. assert mysql_loader.cursor is not None
  27. def test_mysql_loader_setup_loader_connection_error(mysql_loader, mocker):
  28. mocker.patch("mysql.connector.connection.MySQLConnection", side_effect=IOError("Mocked connection error"))
  29. with pytest.raises(ValueError, match="Unable to connect with the given config:"):
  30. mysql_loader._setup_loader(config={})
  31. def test_mysql_loader_check_query_successful(mysql_loader):
  32. query = "SELECT * FROM table"
  33. mysql_loader._check_query(query=query)
  34. def test_mysql_loader_check_query_invalid(mysql_loader):
  35. with pytest.raises(ValueError, match="Invalid mysql query: 123"):
  36. mysql_loader._check_query(query=123)
  37. def test_mysql_loader_load_data_successful(mysql_loader, mocker):
  38. mock_cursor = MagicMock()
  39. mocker.patch.object(mysql_loader, "cursor", mock_cursor)
  40. mock_cursor.fetchall.return_value = [(1, "data1"), (2, "data2")]
  41. query = "SELECT * FROM table"
  42. result = mysql_loader.load_data(query)
  43. assert "doc_id" in result
  44. assert "data" in result
  45. assert len(result["data"]) == 2
  46. assert result["data"][0]["meta_data"]["url"] == query
  47. assert result["data"][1]["meta_data"]["url"] == query
  48. doc_id = hashlib.sha256((query + ", ".join([d["content"] for d in result["data"]])).encode()).hexdigest()
  49. assert result["doc_id"] == doc_id
  50. assert mock_cursor.execute.called_with(query)
  51. def test_mysql_loader_load_data_invalid_query(mysql_loader):
  52. with pytest.raises(ValueError, match="Invalid mysql query: 123"):
  53. mysql_loader.load_data(query=123)