refactor chiread tests with generic test class

This commit is contained in:
Kolbo 2020-07-10 00:44:49 +02:00
parent 008fdd6ea3
commit 12a5208ab2
2 changed files with 62 additions and 135 deletions

View file

@ -1,143 +1,79 @@
import pytest
# from unittest import mock
from unittest.mock import patch # , call, Mock
from fanficfare.six.moves.urllib.error import HTTPError
from unittest.mock import patch
from fanficfare.adapters.adapter_chireadscom import ChireadsComSiteAdapter as chiread
from fanficfare.configurable import Configuration
from fanficfare import exceptions
from tests.adapters.generic_adapter_test import GenericAdapterTestExtractChapterUrlsAndMetadata, GenericAdapterTestGetChapterText
from tests.conftest import chireads_html_return, chireads_html_with_chapters_return, chireads_html_chapter_return
SPECIFIC_TEST_DATA = {
'adapter': chiread,
'url': 'https://chireads.com/category/translatedtales/some-story/',
'sections': ["chireads.com"],
'specific_path_adapter': 'adapter_chireadscom.ChireadsComSiteAdapter',
'title': 'Shadow Hack',
'cover_image': 'https://chireads.com/wp-content/uploads/2020/04/Shadow-Hack-2.jpg',
'author': 'Great Lord of Cloudland',
'authorId': 'Great Lord of Cloudland',
'dateUpdated': '2020-06-27',
'intro': "Par coïncidence, Li Yunmu a découvert une super machine de lère des ténèbres de lhumanité. À partir de ce moment, sa vie ordinaire ne sera plus jamais la même ! Aptitude ? Talent inné ? Quest-ce que cest ? Ça se mange ? Je nai ni aptitude ni compétence innée, mais mon ombre peut monter en niveau en utilisant des Hack. Expérience, points de compétence, prouesse au combat …… .Tous pourraient être Hacké. Même endormi ou fatigué, je pourrais encore améliorer ses compétences. [Ding, ton ombre a tué une fourmi, tu as gagné des points dexpérience et des points daptitude.] [Ding, ton ombre a tué une libellule, elle a laissé tomber une boîte dimensionnelle.] Merde, même tuer des insectes peut également augmenter son expérience et obtenir des récompenses.Quoi de mieux !Light novel Shadow Hack en français /Traduction de Shadow Hack en Français / Shadow Hack FrTraduction en français : ZoroBonjour ou bonsoir à tous ! Mon nom est Zoro, j'arrive sur Chiread avec un novel, et quel novel ?! Shadow Hack, du fight, de la chance, du cheaté, et j'en passe. Vraiment, un gros kiff à lire à tout prix !",
'expected_chapters': {
0: {'title': 'Chapitre 1 Ombre mystérieuse',
'url': 'https://chireads.com/translatedtales/chapitre-1-ombre-mysterieuse/2020/02/08/'},
10: {'title': 'Chapitre 11 Bataille injuste',
'url': 'https://chireads.com/translatedtales/chapitre-11-bataille-injuste/2020/02/08/'},
100: {'title': 'Chapitre 101 La rancune de sœur Noujie',
'url': 'https://chireads.com/translatedtales/chapitre-101-la-rancune-de-soeur-noujie/2020/02/08/'},
},
'list_chapters_fixture': chireads_html_return,
'chapter_url': 'https://chireads.com/translatedtales/chapitre-1-some-title/2020/02/08/',
'expected_sentences': [
"Dans une petite pièce chaude, alors que Li Yunmu avait allumé son ordinateur, cette phrase est soudainement apparue devant lui.",
"Un véritable ordinateur de lère sombre aurait certainement un prix de départ de pièces de la cinquième dimension.",
"Comment un citoyen aussi vulgaire que lui-même pourrait-il avoir les qualifications nécessaires pour accéder aux pièces de la cinquième dimension de lAlliance ?",
"À ce moment, la silhouette de Li Yunmu est devenue sans vie !"
],
'chapter_fixture': chireads_html_chapter_return,
}
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter.setDescription')
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter.setCoverImage')
class TestExtractChapterUrlsAndMetadata:
class TestExtractChapterUrlsAndMetadata(GenericAdapterTestExtractChapterUrlsAndMetadata):
def setup_method(self):
self.url = 'https://chireads.com/category/translatedtales/some-story/'
self.configuration = Configuration(["chireads.com"], "EPUB", lightweight=True)
self.chireads = chiread(self.configuration, self.url)
self.expected_data = SPECIFIC_TEST_DATA
def test_raise_404_for_unexistant_story(self, mock_setCoverImage, mock_setDescription):
# When
with pytest.raises(exceptions.StoryDoesNotExist):
self.chireads.extractChapterUrlsAndMetadata()
super().setup_method(
SPECIFIC_TEST_DATA['adapter'],
SPECIFIC_TEST_DATA['url'],
SPECIFIC_TEST_DATA['sections'],
SPECIFIC_TEST_DATA['specific_path_adapter'],
SPECIFIC_TEST_DATA['list_chapters_fixture'])
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_metadata(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_return):
def test_get_novel_info_when_book(self, mock_fetchUrl):
# Given
mockFetchUrl.return_value = chireads_html_return
mock_fetchUrl.return_value = chireads_html_with_chapters_return
# When
self.chireads.extractChapterUrlsAndMetadata()
self.adapter.extractChapterUrlsAndMetadata()
# Then
assert self.chireads.story.getMetadata('title') == 'Shadow Hack'
assert self.adapter.get_chapters()[0]['title'] == 'Chapitre 01 : Matinée au village'
assert self.adapter.get_chapters()[0]['url'] == 'https://chireads.com/sur-le-web/chapitre-01-matinee-au-village/2017/08/17/'
assert self.adapter.get_chapters()[23]['title'] == 'Chapitre 1 : La créature magique, Souris Fantôme'
assert self.adapter.get_chapters()[23]['url'] == 'https://chireads.com/sur-le-web/chapitre-1-la-creature-magique-souris-fantome/2017/08/18/'
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_cover_image(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_return):
# Given
mockFetchUrl.return_value = chireads_html_return
# When
self.chireads.extractChapterUrlsAndMetadata()
# Then
mock_setCoverImage.assert_called_with(self.url, 'https://chireads.com/wp-content/uploads/2020/04/Shadow-Hack-2.jpg')
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_autor(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_return):
# Given
mockFetchUrl.return_value = chireads_html_return
# When
self.chireads.extractChapterUrlsAndMetadata()
# Then
assert self.chireads.story.getMetadata('author') == 'Great Lord of Cloudland'
assert self.chireads.story.getMetadata('authorId') == 'Great Lord of Cloudland'
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_dateUpdated(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_return):
# Given
mockFetchUrl.return_value = chireads_html_return
# When
self.chireads.extractChapterUrlsAndMetadata()
# Then
assert self.chireads.story.getMetadata('dateUpdated') == '2020-06-27'
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_novel_info(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_return):
# Given
mockFetchUrl.return_value = chireads_html_return
# When
self.chireads.extractChapterUrlsAndMetadata()
# Then
expected_intro = "Par coïncidence, Li Yunmu a découvert une super machine de lère des ténèbres de lhumanité. À partir de ce moment, sa vie ordinaire ne sera plus jamais la même ! Aptitude ? Talent inné ? Quest-ce que cest ? Ça se mange ? Je nai ni aptitude ni compétence innée, mais mon ombre peut monter en niveau en utilisant des Hack. Expérience, points de compétence, prouesse au combat …… .Tous pourraient être Hacké. Même endormi ou fatigué, je pourrais encore améliorer ses compétences. [Ding, ton ombre a tué une fourmi, tu as gagné des points dexpérience et des points daptitude.] [Ding, ton ombre a tué une libellule, elle a laissé tomber une boîte dimensionnelle.] Merde, même tuer des insectes peut également augmenter son expérience et obtenir des récompenses.Quoi de mieux !Light novel Shadow Hack en français /Traduction de Shadow Hack en Français / Shadow Hack FrTraduction en français : ZoroBonjour ou bonsoir à tous ! Mon nom est Zoro, j'arrive sur Chiread avec un novel, et quel novel ?! Shadow Hack, du fight, de la chance, du cheaté, et j'en passe. Vraiment, un gros kiff à lire à tout prix !"
mock_setDescription.assert_called_with(self.url, expected_intro)
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_novel_info(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_return):
# Given
mockFetchUrl.return_value = chireads_html_return
# When
self.chireads.extractChapterUrlsAndMetadata()
# Then
assert self.chireads.get_chapters()[0]['title'] == 'Chapitre 1 Ombre mystérieuse'
assert self.chireads.get_chapters()[0]['url'] == 'https://chireads.com/translatedtales/chapitre-1-ombre-mysterieuse/2020/02/08/'
assert self.chireads.get_chapters()[10]['title'] == 'Chapitre 11 Bataille injuste'
assert self.chireads.get_chapters()[10]['url'] == 'https://chireads.com/translatedtales/chapitre-11-bataille-injuste/2020/02/08/'
assert self.chireads.get_chapters()[100]['title'] == 'Chapitre 101 La rancune de sœur Noujie'
assert self.chireads.get_chapters()[100]['url'] == 'https://chireads.com/translatedtales/chapitre-101-la-rancune-de-soeur-noujie/2020/02/08/'
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_novel_info_when_book(self, mockFetchUrl, mock_setCoverImage, mock_setDescription, chireads_html_with_chapters_return):
# Given
mockFetchUrl.return_value = chireads_html_with_chapters_return
# When
self.chireads.extractChapterUrlsAndMetadata()
# Then
assert self.chireads.get_chapters()[0]['title'] == 'Chapitre 01 : Matinée au village'
assert self.chireads.get_chapters()[0]['url'] == 'https://chireads.com/sur-le-web/chapitre-01-matinee-au-village/2017/08/17/'
assert self.chireads.get_chapters()[23]['title'] == 'Chapitre 1 : La créature magique, Souris Fantôme'
assert self.chireads.get_chapters()[23]['url'] == 'https://chireads.com/sur-le-web/chapitre-1-la-creature-magique-souris-fantome/2017/08/18/'
class TestGetChapterText:
class TestGetChapterText(GenericAdapterTestGetChapterText):
def setup_method(self):
self.url = 'https://chireads.com/category/translatedtales/some-story/'
self.chapter_url = 'https://chireads.com/translatedtales/chapitre-1-some-title/2020/02/08/'
self.configuration = Configuration(["chireads.com"], "EPUB", lightweight=True)
self.chireads = chiread(self.configuration, self.url)
self.expected_data = SPECIFIC_TEST_DATA
@patch('fanficfare.adapters.adapter_chireadscom.ChireadsComSiteAdapter._fetchUrl')
def test_get_metadata(self, mockFetchUrl, chireads_html_chapter_return):
# Given
mockFetchUrl.return_value = chireads_html_chapter_return
super().setup_method(
SPECIFIC_TEST_DATA['adapter'],
SPECIFIC_TEST_DATA['url'],
SPECIFIC_TEST_DATA['sections'],
SPECIFIC_TEST_DATA['specific_path_adapter'],
SPECIFIC_TEST_DATA['chapter_fixture'])
# When
response = self.chireads.getChapterText(self.chapter_url)
# Then
expected = [
"Dans une petite pièce chaude, alors que Li Yunmu avait allumé son ordinateur, cette phrase est soudainement apparue devant lui.",
"Un véritable ordinateur de lère sombre aurait certainement un prix de départ de pièces de la cinquième dimension.",
"Comment un citoyen aussi vulgaire que lui-même pourrait-il avoir les qualifications nécessaires pour accéder aux pièces de la cinquième dimension de lAlliance ?",
"À ce moment, la silhouette de Li Yunmu est devenue sans vie !"
]
for p in expected:
assert p in response

View file

@ -1,9 +1,4 @@
import pytest
@pytest.fixture
def chireads_html_return():
return """
chireads_html_return = """
<!DOCTYPE html><html lang="fr-FR" class="no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="keywords" content="关键字" /> <meta name="description" content="网站描述" /> <meta name="renderer" content="webkit"> <meta name="force-rendering" content="webkit"> <link rel="shortcut icon" href="//chireads.com/favicon.ico"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,400i,600,700" data-ignore="true"> <link data-ignore="true" href="https://fonts.googleapis.com/css?family=Merriweather:700,400,400i" rel="stylesheet"> <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro' rel='stylesheet'><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98046692-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','UA-98046692-1');</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98046692-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','GA_TRACKING_ID',{'content_group1':'Shadow Hack | 我的影子会挂机'});</script><title>Shadow Hack | 我的影子会挂机 français - Chireads - web novel en français, Culture Chinoise et Light Novels, Romans fantastiques chinois et Light Novels </title>
<meta name="robots" content="noindex, follow" />
@ -168,9 +163,7 @@ def chireads_html_return():
"""
@pytest.fixture
def chireads_html_with_chapters_return():
return """
chireads_html_with_chapters_return ="""
<!DOCTYPE html><html lang="fr-FR" class="no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="keywords" content="关键字" /> <meta name="description" content="网站描述" /> <meta name="renderer" content="webkit"> <meta name="force-rendering" content="webkit"> <link rel="shortcut icon" href="//chireads.com/favicon.ico"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,400i,600,700" data-ignore="true"> <link data-ignore="true" href="https://fonts.googleapis.com/css?family=Merriweather:700,400,400i" rel="stylesheet"> <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro' rel='stylesheet'><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98046692-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','UA-98046692-1');</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98046692-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','GA_TRACKING_ID',{'content_group1':'Panlong | Coiling Dragon | 盘龙'});</script><title>Panlong | Coiling Dragon | 盘龙 français - Chireads - web novel en français, Culture Chinoise et Light Novels, Romans fantastiques chinois et Light Novels </title>
<meta name="robots" content="noindex, follow" />
<meta property="og:locale" content="fr_FR" />
@ -416,9 +409,7 @@ def chireads_html_with_chapters_return():
"""
@pytest.fixture
def chireads_html_chapter_return():
return """
chireads_html_chapter_return = """
<!DOCTYPE html><html lang="fr-FR" class="no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="keywords" content="关键字" /> <meta name="description" content="网站描述" /> <meta name="renderer" content="webkit"> <meta name="force-rendering" content="webkit"> <link rel="shortcut icon" href="//chireads.com/favicon.ico"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,400i,600,700" data-ignore="true"> <link data-ignore="true" href="https://fonts.googleapis.com/css?family=Merriweather:700,400,400i" rel="stylesheet"> <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro' rel='stylesheet'><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98046692-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','UA-98046692-1');</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98046692-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','GA_TRACKING_ID',{'content_group1':'Shadow Hack | 我的影子会挂机'});</script><title>Chapitre 1 &#8211; Ombre mystérieuse - Shadow Hack | 我的影子会挂机 français - Chireads - web novel en français, Culture Chinoise et Light Novels, Romans fantastiques chinois et Light Novels </title>
<meta name="robots" content="index, follow" />