import pytest from unittest.mock import AsyncMock, MagicMock, patch from maigret.submit import Submitter, MaigretSite, MaigretEngine from aiohttp import ClientSession from maigret.sites import MaigretDatabase from maigret.settings import Settings import logging @pytest.mark.slow @pytest.mark.asyncio async def test_detect_known_engine(test_db, local_test_db): # Use the database fixture instead of mocking mock_db = test_db mock_settings = MagicMock() mock_logger = MagicMock() mock_args = MagicMock() mock_args.cookie_file = "" mock_args.proxy = "" # Mock the supposed usernames mock_settings.supposed_usernames = ["adam"] # Create the Submitter instance submitter = Submitter(test_db, mock_settings, mock_logger, mock_args) # Call the method with test URLs url_exists = "https://devforum.zoom.us/u/adam" url_mainpage = "https://devforum.zoom.us/" # Mock extract_username_dialog to return "adam" submitter.extract_username_dialog = MagicMock(return_value="adam") sites, resp_text = await submitter.detect_known_engine( url_exists, url_mainpage, session=None, follow_redirects=False, headers=None ) # Assertions assert len(sites) == 2 assert sites[0].name == "devforum.zoom.us" assert sites[0].url_main == "https://devforum.zoom.us/" assert sites[0].engine == "Discourse" assert sites[0].username_claimed == "adam" assert sites[0].username_unclaimed == "noonewouldeverusethis7" assert resp_text != "" await submitter.close() # Create the Submitter instance without engines submitter = Submitter(local_test_db, mock_settings, mock_logger, mock_args) sites, resp_text = await submitter.detect_known_engine( url_exists, url_mainpage, session=None, follow_redirects=False, headers=None ) assert len(sites) == 0 await submitter.close() @pytest.mark.slow @pytest.mark.asyncio async def test_check_features_manually_success(settings): # Setup db = MaigretDatabase() logger = logging.getLogger("test_logger") args = type( 'Args', (object,), {'proxy': None, 'cookie_file': None, 'verbose': False} )() submitter = Submitter(db, settings, logger, args) username = "KONAMI" url_exists = "https://play.google.com/store/apps/developer?id=KONAMI" # Execute presence_list, absence_list, status, random_username = ( await submitter.check_features_manually( username=username, url_exists=url_exists, session=ClientSession(), follow_redirects=False, headers=None, ) ) await submitter.close() # Assert assert status == "Found", "Expected status to be 'Found'" assert isinstance(presence_list, list), "Presence list should be a list" assert isinstance(absence_list, list), "Absence list should be a list" assert isinstance(random_username, str), "Random username should be a string" assert ( random_username != username ), "Random username should not be the same as the input username" assert sorted(presence_list) == sorted( [ ' title=', 'og:title', 'display: none;', '4;0', 'main-title', ] ) assert sorted(absence_list) == sorted( [ ' body {', ' ', '>