Files
theHarvester/tests/discovery/test_githubcode.py
T
2025-01-26 06:28:18 +00:00

96 lines
3.4 KiB
Python

from unittest.mock import MagicMock
import pytest
from _pytest.mark.structures import MarkDecorator
from requests import Response
from theHarvester.discovery import githubcode
from theHarvester.discovery.constants import MissingKey
from theHarvester.lib.core import Core
pytestmark: MarkDecorator = pytest.mark.asyncio
class TestSearchGithubCode:
class OkResponse:
response = Response()
# Mocking the json method properly
def __init__(self):
self.response = Response()
self.response.status_code = 200
self.response.json = MagicMock(
return_value={
"items": [
{"text_matches": [{"fragment": "test1"}]},
{"text_matches": [{"fragment": "test2"}]},
]
}
)
class FailureResponse:
response = Response()
def __init__(self):
self.response = Response()
self.response.status_code = 401
self.response.json = MagicMock(return_value={})
class RetryResponse:
def __init__(self):
self.response = Response()
self.response.status_code = 403
self.response.json = MagicMock(return_value={})
class MalformedResponse:
response = Response()
def __init__(self):
self.response = Response()
self.response.status_code = 200
self.response.json = MagicMock(
return_value={
"items": [
{"fail": True},
{"text_matches": []},
{"text_matches": [{"weird": "result"}]},
]
}
)
async def test_missing_key(self):
with pytest.raises(MissingKey):
Core.github_key = MagicMock(return_value=None)
githubcode.SearchGithubCode(word="test", limit=500)
async def test_fragments_from_response(self):
Core.github_key = MagicMock(return_value="test_key")
test_class_instance = githubcode.SearchGithubCode(word="test", limit=500)
test_result = await test_class_instance.fragments_from_response(
self.OkResponse().response.json()
)
print("test_result: ", test_result)
assert test_result == ["test1", "test2"]
async def test_invalid_fragments_from_response(self):
Core.github_key = MagicMock(return_value="test_key")
test_class_instance = githubcode.SearchGithubCode(word="test", limit=500)
test_result = await test_class_instance.fragments_from_response(
self.MalformedResponse().response.json()
)
assert test_result == []
async def test_next_page(self):
Core.github_key = MagicMock(return_value="test_key")
test_class_instance = githubcode.SearchGithubCode(word="test", limit=500)
test_result = githubcode.SuccessResult(list(), next_page=2, last_page=4)
assert 2 == await test_class_instance.next_page_or_end(test_result)
async def test_last_page(self):
Core.github_key = MagicMock(return_value="test_key")
test_class_instance = githubcode.SearchGithubCode(word="test", limit=500)
test_result = githubcode.SuccessResult(list(), 0, 0)
assert await test_class_instance.next_page_or_end(test_result) is 0
if __name__ == "__main__":
pytest.main()