|
import unittest |
|
from unittest.mock import patch, MagicMock |
|
from my_ghost_writer import pymongo_operations_rw |
|
|
|
|
|
class TestPymongoOperationsRW(unittest.TestCase): |
|
@patch('my_ghost_writer.pymongo_operations_rw.pymongo_utils.get_thesaurus_collection') |
|
def test_get_document_by_word_found(self, mock_get_collection): |
|
mock_collection = MagicMock() |
|
mock_collection.find_one.return_value = {"word": "example", "meaning": "test", "_id": "someid"} |
|
mock_get_collection.return_value = mock_collection |
|
|
|
result = pymongo_operations_rw.get_document_by_word("example") |
|
self.assertEqual(result, {"word": "example", "meaning": "test"}) |
|
mock_collection.find_one.assert_called_with({"word": "example"}) |
|
|
|
@patch('my_ghost_writer.pymongo_operations_rw.pymongo_utils.get_thesaurus_collection') |
|
def test_get_document_by_word_not_found(self, mock_get_collection): |
|
mock_collection = MagicMock() |
|
mock_collection.find_one.return_value = None |
|
mock_get_collection.return_value = mock_collection |
|
|
|
with self.assertRaises(AssertionError): |
|
try: |
|
pymongo_operations_rw.get_document_by_word("notfound") |
|
except AssertionError as ae: |
|
self.assertEqual(str(ae), "word 'notfound' not found in thesaurus collection") |
|
raise ae |
|
|
|
@patch('my_ghost_writer.pymongo_operations_rw.app_logger') |
|
@patch('my_ghost_writer.pymongo_operations_rw.pymongo_utils.get_thesaurus_collection') |
|
def test_insert_document_success(self, mock_get_collection, mock_logger): |
|
mock_collection = MagicMock() |
|
mock_result = MagicMock() |
|
mock_result.inserted_id = "someid" |
|
mock_collection.insert_one.return_value = mock_result |
|
mock_get_collection.return_value = mock_collection |
|
|
|
pymongo_operations_rw.insert_document({"word": "example"}) |
|
mock_collection.insert_one.assert_called_with({"word": "example"}) |
|
mock_logger.info.assert_called() |
|
|
|
@patch('my_ghost_writer.pymongo_operations_rw.app_logger') |
|
@patch('my_ghost_writer.pymongo_operations_rw.pymongo_utils.get_thesaurus_collection') |
|
def test_insert_document_failure(self, mock_get_collection, mock_logger): |
|
mock_collection = MagicMock() |
|
mock_result = MagicMock() |
|
mock_result.inserted_id = None |
|
mock_collection.insert_one.return_value = mock_result |
|
mock_get_collection.return_value = mock_collection |
|
|
|
with self.assertRaises(IOError): |
|
try: |
|
pymongo_operations_rw.insert_document({"word": "fail"}) |
|
except IOError as e: |
|
self.assertEqual(str(e), """failed insert of document '{"word": "fail"}'""") |
|
raise e |
|
|
|
|
|
if __name__ == '__main__': |
|
unittest.main() |