diff --git a/unittests/test_tool.py b/unittests/test_tool.py index 808cda21ff6dce4c266f72afb98127ef8b1a23bc..b88720f4da89dfa735e782a4d2e41ccc3b0f4d3c 100755 --- a/unittests/test_tool.py +++ b/unittests/test_tool.py @@ -650,95 +650,95 @@ def change_non_identifiable_prop(ident): raise RuntimeError("Did not find the property that should be changed.") -#@patch("caoscrawler.crawl.Crawler._get_entity_by_id", -# new=Mock(side_effect=mock_get_entity_by_id)) -#@patch("caoscrawler.crawl.Crawler._get_entity_by_name", -# new=Mock(side_effect=mock_get_entity_by_name)) -#@patch("caoscrawler.crawl.db.Container.insert") -#@patch("caoscrawler.crawl.db.Container.update") -#@patch("caoscrawler.crawl.UpdateCache.insert") -#def test_security_mode(updateCacheMock, upmock, insmock, ident): -# records_backup = deepcopy(ident._records) -# -# # trivial case: nothing to do -# crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.RETRIEVE, ident) -# crawler.synchronize(commit_changes=True, crawled_data=crawled_data) -# assert crawler.run_id is not None -# insmock.assert_not_called() -# upmock.assert_not_called() -# updateCacheMock.assert_not_called() -# -# # RETRIEVE: insert only -# crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.RETRIEVE, ident) -# # remove one element -# del ident._records[-1] -# # insert forbidden -# crawler.synchronize(commit_changes=True, crawled_data=crawled_data) -# assert crawler.run_id is not None -# insmock.assert_not_called() -# upmock.assert_not_called() -# assert updateCacheMock.call_count == 1 -# # reset counts -# reset_mocks([updateCacheMock, insmock, upmock]) -# # restore original ident -# ident._records = deepcopy(records_backup) -# -# # RETRIEVE: update only -# crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.RETRIEVE, ident) -# # change one element -# change_non_identifiable_prop(ident) -# crawler.synchronize(commit_changes=True, crawled_data=crawled_data) -# assert crawler.run_id is not None -# insmock.assert_not_called() -# upmock.assert_not_called() -# assert updateCacheMock.call_count == 1 -# # reset counts -# reset_mocks([updateCacheMock, insmock, upmock]) -# # restore original ident -# ident._records = deepcopy(records_backup) -# -# # INSERT: insert only -# crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.INSERT, ident) -# # remove one element -# del ident._records[-1] -# crawler.synchronize(commit_changes=True, crawled_data=crawled_data) -# assert crawler.run_id is not None -# insmock.assert_called_once() -# upmock.assert_not_called() -# updateCacheMock.assert_not_called() -# # reset counts -# reset_mocks([updateCacheMock, insmock, upmock]) -# # restore original ident -# ident._records = deepcopy(records_backup) -# -# # INSERT: update only -# crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.INSERT, ident) -# # change one element -# change_non_identifiable_prop(ident) -# crawler.synchronize(commit_changes=True, crawled_data=crawled_data) -# assert crawler.run_id is not None -# insmock.assert_not_called() -# upmock.assert_not_called() -# updateCacheMock.assert_called_once() -# # reset counts -# reset_mocks([updateCacheMock, insmock, upmock]) -# # restore original ident -# ident._records = deepcopy(records_backup) -# -# # INSERT: insert and update -# crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.INSERT, ident) -# # change two elements -# change_non_identifiable_prop(ident) -# change_identifiable_prop(ident) -# crawler.synchronize(commit_changes=True, crawled_data=crawled_data) -# assert crawler.run_id is not None -# insmock.asser_called_once() -# upmock.assert_not_called() -# updateCacheMock.assert_called_once() -# # reset counts -# reset_mocks([updateCacheMock, insmock, upmock]) -# # restore original ident -# ident._records = deepcopy(records_backup) +@patch("caoscrawler.crawl.Crawler._get_entity_by_id", + new=Mock(side_effect=mock_get_entity_by_id)) +@patch("caoscrawler.crawl.Crawler._get_entity_by_name", + new=Mock(side_effect=mock_get_entity_by_name)) +@patch("caoscrawler.crawl.db.Container.insert") +@patch("caoscrawler.crawl.db.Container.update") +@patch("caoscrawler.crawl.UpdateCache.insert") +def test_security_mode(updateCacheMock, upmock, insmock, ident): + records_backup = deepcopy(ident._records) + + # trivial case: nothing to do + crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.RETRIEVE, ident) + crawler.synchronize(commit_changes=True, crawled_data=crawled_data) + assert crawler.run_id is not None + insmock.assert_not_called() + upmock.assert_not_called() + updateCacheMock.assert_not_called() + + # RETRIEVE: insert only + crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.RETRIEVE, ident) + # remove one element + del ident._records[-1] + # insert forbidden + crawler.synchronize(commit_changes=True, crawled_data=crawled_data) + assert crawler.run_id is not None + insmock.assert_not_called() + upmock.assert_not_called() + assert updateCacheMock.call_count == 1 + # reset counts + reset_mocks([updateCacheMock, insmock, upmock]) + # restore original ident + ident._records = deepcopy(records_backup) + + # RETRIEVE: update only + crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.RETRIEVE, ident) + # change one element + change_non_identifiable_prop(ident) + crawler.synchronize(commit_changes=True, crawled_data=crawled_data) + assert crawler.run_id is not None + insmock.assert_not_called() + upmock.assert_not_called() + assert updateCacheMock.call_count == 1 + # reset counts + reset_mocks([updateCacheMock, insmock, upmock]) + # restore original ident + ident._records = deepcopy(records_backup) + + # INSERT: insert only + crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.INSERT, ident) + # remove one element + del ident._records[-1] + crawler.synchronize(commit_changes=True, crawled_data=crawled_data) + assert crawler.run_id is not None + insmock.assert_called_once() + upmock.assert_not_called() + updateCacheMock.assert_not_called() + # reset counts + reset_mocks([updateCacheMock, insmock, upmock]) + # restore original ident + ident._records = deepcopy(records_backup) + + # INSERT: update only + crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.INSERT, ident) + # change one element + change_non_identifiable_prop(ident) + crawler.synchronize(commit_changes=True, crawled_data=crawled_data) + assert crawler.run_id is not None + insmock.assert_not_called() + upmock.assert_not_called() + updateCacheMock.assert_called_once() + # reset counts + reset_mocks([updateCacheMock, insmock, upmock]) + # restore original ident + ident._records = deepcopy(records_backup) + + # INSERT: insert and update + crawler, crawled_data, debug_tree = prepare_crawler_with_sec_mode(SecurityMode.INSERT, ident) + # change two elements + change_non_identifiable_prop(ident) + change_identifiable_prop(ident) + crawler.synchronize(commit_changes=True, crawled_data=crawled_data) + assert crawler.run_id is not None + insmock.asser_called_once() + upmock.assert_not_called() + updateCacheMock.assert_called_once() + # reset counts + reset_mocks([updateCacheMock, insmock, upmock]) + # restore original ident + ident._records = deepcopy(records_backup) def test_create_reference_mapping():