Skip to content

Commit c9b40af

Browse files
tests: fixed broken tests
1 parent 5ad3c8f commit c9b40af

4 files changed

Lines changed: 90 additions & 33 deletions

File tree

enma/infra/adapters/repositories/nhentai.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ class CloudFlareConfig(BaseModel):
3131

3232
@field_validator('user_agent')
3333
def user_agent_validator(cls, value: str) -> str:
34-
if value == '': raise InvalidRequest(message='User Agent cant be empty.')
34+
if value == '':
35+
raise InvalidRequest(message='User Agent cant be empty.')
3536
return str(value)
3637

3738
@field_validator('cf_clearance')
3839
def cf_clearance_validator(cls, value: str) -> str:
39-
if value == '': raise InvalidRequest(message='CF Clearance cant be empty.')
40+
if value == '':
41+
raise InvalidRequest(message='CF Clearance cant be empty.')
4042
return str(value)
4143

4244
class NhentaiSourceConfig(BaseModel):
@@ -122,7 +124,8 @@ def __make_request(self,
122124
headers = headers if headers is not None else {}
123125
params = params if params is not None else {}
124126

125-
config = self.__config.cloudflare
127+
config = self.__config.cloudflare if self.__config is not None else None
128+
126129
user_agent = config.user_agent if config is not None else f"Enma/{__version__}"
127130
cookies = {'cf_clearance': config.cf_clearance} if config is not None else {}
128131

tests/test_nhentai_fetch_chapter_by_symbolic_link.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,19 @@
1111
from enma.application.core.handlers.error import NotFound
1212
from enma.application.use_cases.fetch_chapter_by_symbolic_link import FetchChapterBySymbolicLinkRequestDTO, FetchChapterBySymbolicLinkUseCase
1313
from enma.application.core.interfaces.use_case import DTO
14-
from enma.infra.adapters.repositories.nhentai import CloudFlareConfig, NHentai
14+
from enma.infra.adapters.repositories.nhentai import CloudFlareConfig, NHentai, NHentaiConfig
1515
from enma.domain.entities.manga import MIME, Author, Chapter, Genre, Image, Manga, SymbolicLink, Title
1616

1717
class TestFetchChapterWithSymbolicLink:
1818

19-
nhentai = NHentai(config=CloudFlareConfig(user_agent='mocked',
20-
cf_clearance='mocked'))
19+
nhentai = NHentai(
20+
config=NHentaiConfig(
21+
cloudflare=CloudFlareConfig(
22+
user_agent='mocked',
23+
cf_clearance='mocked'
24+
)
25+
)
26+
)
2127
sut = FetchChapterBySymbolicLinkUseCase(manga_repository=nhentai)
2228

2329
mocked_manga = Manga(title=Title(english="[Hikoushiki (CowBow)] Marine Senchou no Yopparai Archive | Marine's Drunken Archives (Houshou Marine) [English] [Watson] [Digital]",
@@ -30,10 +36,10 @@ class TestFetchChapterWithSymbolicLink:
3036
updated_at=datetime.datetime(2024, 1, 7, 0, 3, 25, tzinfo=datetime.timezone.utc),
3137
authors=[Author(name='cowbow')],
3238
genres=[Genre(name='sweating', id=1590)],
33-
thumbnail=Image(uri='https://i.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
34-
cover=Image(uri='https://i.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
35-
chapters=[Chapter(id=0, pages=[Image(uri='https://i.nhentai.net/galleries/2786266/1.jpg', name='0.jpg', width=1280, height=1807, mime=MIME.J),
36-
Image(uri='https://i.nhentai.net/galleries/2786266/2.jpg', name='1.jpg', width=1280, height=1807, mime=MIME.J)])])
39+
thumbnail=Image(uri='https://i1.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
40+
cover=Image(uri='https://i1.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
41+
chapters=[Chapter(id=0, pages=[Image(uri='https://i1.nhentai.net/galleries/2786266/1.jpg', name='0.jpg', width=1280, height=1807, mime=MIME.J),
42+
Image(uri='https://i1.nhentai.net/galleries/2786266/2.jpg', name='1.jpg', width=1280, height=1807, mime=MIME.J)])])
3743

3844
def test_fetch_chapter_by_symbolic_link(self):
3945
with patch('requests.get') as mock_method:

tests/test_nhentai_get_manga_use_case.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,19 @@
1313
from enma.infra.core.interfaces.nhentai_response import NHentaiResponse
1414
from enma.application.use_cases.get_manga import GetMangaRequestDTO, GetMangaUseCase
1515
from enma.application.core.interfaces.use_case import DTO
16-
from enma.infra.adapters.repositories.nhentai import CloudFlareConfig, NHentai
16+
from enma.infra.adapters.repositories.nhentai import CloudFlareConfig, NHentai, NHentaiConfig
1717
from enma.domain.entities.manga import MIME, Author, Chapter, Genre, Image, Manga, Title
1818

1919
class TestNHentaiGetDoujin:
2020

21-
nhentai = NHentai(config=CloudFlareConfig(user_agent='mocked',
22-
cf_clearance='mocked'))
21+
nhentai = NHentai(
22+
config=NHentaiConfig(
23+
cloudflare=CloudFlareConfig(
24+
user_agent='mocked',
25+
cf_clearance='mocked'
26+
)
27+
)
28+
)
2329
sut = GetMangaUseCase(manga_repository=nhentai)
2430

2531
mocked_manga = Manga(title=Title(english="[Hikoushiki (CowBow)] Marine Senchou no Yopparai Archive | Marine's Drunken Archives (Houshou Marine) [English] [Watson] [Digital]",
@@ -32,10 +38,10 @@ class TestNHentaiGetDoujin:
3238
updated_at=datetime.datetime(2024, 1, 7, 0, 3, 25, tzinfo=datetime.timezone.utc),
3339
authors=[Author(name='cowbow')],
3440
genres=[Genre(name='sweating', id=1590)],
35-
thumbnail=Image(uri='https://i.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
36-
cover=Image(uri='https://i.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
37-
chapters=[Chapter(id=0, pages=[Image(uri='https://i.nhentai.net/galleries/2786266/1.jpg', name='0.jpg', width=1280, height=1807, mime=MIME.J),
38-
Image(uri='https://i.nhentai.net/galleries/2786266/2.jpg', name='1.jpg', width=1280, height=1807, mime=MIME.J)])])
41+
thumbnail=Image(uri='https://i1.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
42+
cover=Image(uri='https://i1.nhentai.net/galleries/2786266/22.jpg', name='21.jpg', width=1280, height=1808, mime=MIME.J),
43+
chapters=[Chapter(id=0, pages=[Image(uri='https://i1.nhentai.net/galleries/2786266/1.jpg', name='0.jpg', width=1280, height=1807, mime=MIME.J),
44+
Image(uri='https://i1.nhentai.net/galleries/2786266/2.jpg', name='1.jpg', width=1280, height=1807, mime=MIME.J)])])
3945

4046
def test_success_doujin_retrieve(self):
4147
with patch('enma.infra.adapters.repositories.nhentai.NHentai.get') as mock_method:

tests/test_nhentai_source.py

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,41 @@
1616
nhentai_paginate_mocked,
1717
nhentai_author_mocked,
1818
nhentai_author_not_found_mocked)
19-
from enma.infra.adapters.repositories.nhentai import CloudFlareConfig, NHentai, Sort
19+
from enma.infra.adapters.repositories.nhentai import CloudFlareConfig, NHentai, NHentaiConfig, Sort
2020
from enma.domain.entities.manga import MIME, Author, Chapter, Genre, Image, SymbolicLink
2121
from enma.application.core.utils.logger import logger
2222

2323
class TestNHentaiUtils:
24-
sut = NHentai(config=CloudFlareConfig(user_agent='mock', cf_clearance='mock'))
24+
sut = NHentai(
25+
config=NHentaiConfig(
26+
cloudflare=CloudFlareConfig(
27+
user_agent='mocked',
28+
cf_clearance='mocked'
29+
)
30+
)
31+
)
2532

2633
def test_raise_error_if_passing_wrong_config(self):
2734
with pytest.raises(InvalidConfig) as err:
2835
self.sut.set_config(config={}) # type: ignore
2936

3037
def test_set_config_successfully(self):
31-
res = self.sut.set_config(config=CloudFlareConfig(user_agent='mocked', cf_clearance='mocked'))
38+
res = self.sut.set_config(config=NHentaiConfig(
39+
cloudflare=CloudFlareConfig(
40+
user_agent='mocked',
41+
cf_clearance='mocked'
42+
)
43+
))
3244
assert res is None
3345

3446
def test_set_config_must_raise_in_case_of_empty_values(self):
3547
with pytest.raises(InvalidRequest):
36-
self.sut.set_config(config=CloudFlareConfig(user_agent='', cf_clearance=''))
48+
self.sut.set_config(config=NHentaiConfig(
49+
cloudflare=CloudFlareConfig(
50+
user_agent='',
51+
cf_clearance=''
52+
)
53+
))
3754

3855
def test_should_run_normally_even_without_config(self):
3956
self.sut._NHentai__config = None # type: ignore
@@ -47,7 +64,12 @@ def test_make_a_request_successfully(self, request_mock: MagicMock):
4764
mock.json.return_value = {}
4865
request_mock.return_value = mock
4966

50-
self.sut.set_config(config=CloudFlareConfig(user_agent='mocked', cf_clearance='mocked'))
67+
self.sut.set_config(config=NHentaiConfig(
68+
cloudflare=CloudFlareConfig(
69+
user_agent='mocked',
70+
cf_clearance='mocked'
71+
)
72+
))
5173
res = self.sut._NHentai__make_request(url='https://www.google.com', headers={'add': 'header'}, params={'new': 'parameter'}) # type: ignore
5274

5375
assert res.status_code == 200
@@ -91,15 +113,15 @@ def test_should_filter_tags_correctly(self):
91113

92114
def test_making_page_uri(self):
93115
page = self.sut._NHentai__make_page_uri(type='page', media_id='1234', mime=MIME.J, page_number=1) # type: ignore
94-
assert page == 'https://i.nhentai.net/galleries/1234/1.jpg'
116+
assert page == 'https://i1.nhentai.net/galleries/1234/1.jpg'
95117

96118
def test_making_cover_uri(self):
97119
page = self.sut._NHentai__make_page_uri(type='cover', media_id='1234', mime=MIME.J, page_number=1) # type: ignore
98-
assert page == 'https://t.nhentai.net/galleries/1234/cover.jpg'
120+
assert page == 'https://t1.nhentai.net/galleries/1234/cover.jpg'
99121

100122
def test_making_thumbnail_uri(self):
101123
page = self.sut._NHentai__make_page_uri(type='thumbnail', media_id='1234', mime=MIME.J, page_number=1) # type: ignore
102-
assert page == 'https://t.nhentai.net/galleries/1234/thumb.jpg'
124+
assert page == 'https://t1.nhentai.net/galleries/1234/thumb.jpg'
103125

104126
def test_chapter_creator(self):
105127
images: list[NHentaiImage] = [{
@@ -131,7 +153,12 @@ def test_chapter_creator_with_symbolic_links(self):
131153

132154
class TestNHentaiSourceGetMethod:
133155

134-
sut = NHentai(config=CloudFlareConfig(user_agent='mock', cf_clearance='mock'))
156+
sut = NHentai(config=NHentaiConfig(
157+
cloudflare=CloudFlareConfig(
158+
user_agent='mocked',
159+
cf_clearance='mocked'
160+
)
161+
))
135162

136163
@patch('requests.get')
137164
def test_success_doujin_retrieve(self, sut_mock: MagicMock):
@@ -299,7 +326,12 @@ def test_images_mime_types_must_be_correct(self, mock_method: MagicMock):
299326
assert doujin.thumbnail.mime.value == 'jpg'
300327

301328
class TestNHentaiSourcePaginationMethod:
302-
sut = NHentai(config=CloudFlareConfig(user_agent='mock', cf_clearance='mock'))
329+
sut = NHentai(config=NHentaiConfig(
330+
cloudflare=CloudFlareConfig(
331+
user_agent='mocked',
332+
cf_clearance='mocked'
333+
)
334+
))
303335

304336
@patch('requests.get')
305337
def test_success_searching(self, mock_method: MagicMock):
@@ -340,7 +372,12 @@ def test_must_return_empty_search_result(self, mock_method: MagicMock):
340372

341373
class TestNHentaiSourceSearchMethod:
342374

343-
sut = NHentai(config=CloudFlareConfig(user_agent='mock', cf_clearance='mock'))
375+
sut = NHentai(config=NHentaiConfig(
376+
cloudflare=CloudFlareConfig(
377+
user_agent='mocked',
378+
cf_clearance='mocked'
379+
)
380+
))
344381

345382
@patch('requests.get')
346383
def test_success_searching(self, mock_method: MagicMock):
@@ -374,8 +411,8 @@ def test_success_searching(self, mock_method: MagicMock):
374411
params={'q': 'GATE',
375412
'sort': Sort.RECENT.value,
376413
'page': 2},
377-
headers={'User-Agent': 'mock'},
378-
cookies={'cf_clearance': 'mock'})
414+
headers={'User-Agent': 'mocked'},
415+
cookies={'cf_clearance': 'mocked'})
379416

380417
@patch('requests.get')
381418
def test_must_return_empty_search_result(self, mock_method: MagicMock):
@@ -396,7 +433,12 @@ def test_must_return_empty_search_result(self, mock_method: MagicMock):
396433

397434
class TestNHentaiSourceAuthorPageMethod:
398435

399-
sut = NHentai(config=CloudFlareConfig(user_agent='mock', cf_clearance='mock'))
436+
sut = NHentai(config=NHentaiConfig(
437+
cloudflare=CloudFlareConfig(
438+
user_agent='mocked',
439+
cf_clearance='mocked'
440+
)
441+
))
400442

401443
@patch('requests.get')
402444
def test_success_author_page_fetching(self, mock_method: MagicMock):
@@ -428,8 +470,8 @@ def test_success_author_page_fetching(self, mock_method: MagicMock):
428470

429471
mock_method.assert_called_once_with(url='https://nhentai.net/artist/akaneman',
430472
params={'page': 2},
431-
headers={'User-Agent': 'mock'},
432-
cookies={'cf_clearance': 'mock'})
473+
headers={'User-Agent': 'mocked'},
474+
cookies={'cf_clearance': 'mocked'})
433475

434476
@patch('requests.get')
435477
def test_must_return_empty_author_page_result(self, mock_method: MagicMock):

0 commit comments

Comments
 (0)