Skip to content

Commit

Permalink
add pipeline tests
Browse files Browse the repository at this point in the history
honzajavorek committed Jan 19, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 46d1e09 commit ff61d4a
Showing 15 changed files with 264 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/pipelines/broken_encoding_filter/passing.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p><em>Jsi absolvent VŠ a chceš nastartovat svoji kariéru v testingu? Láká tě práce v pohodovém týmu?</em></p><p><em>Chceš se posouvat vpřed a rozvíjet se dál? Pokud ano, jsi na správném místě.&nbsp;</em></p><p><em>Do týmu potřebujeme juniorního člověka, který má alespoň půlroční zkušenost s testováním a psaní automatických testů mu není cizí.&nbsp;</em></p><p><strong>Co u nás budeš dělat:</strong></p><ul><li><span style="color: inherit;">podílet se na automatizaci testování,</span></li><li><span style="color: inherit;">vyhodnocovat testů,</span></li><li><span style="color: inherit;">spolupracovat s projektovým manažerem a vývojáři.</span></li></ul><p><strong>A k tomu potřebujeme:</strong></p><ul><li><span style="color: inherit;">prokazatelné zkušenosti s testováním (min. 1/2 roku),</span></li><li><span style="color: inherit;">základní znalost SoapUI (editace a posílání requestů),</span></li><li><span style="color: inherit;">základní znalost DB (práce se selekcty),</span></li><li><span style="color: inherit;">praktickou zkušenost s psaním automatických testů,</span></li><li><span style="color: inherit;">základní zkušenost s vývojem v Java - výhodou,</span></li><li><span style="color: inherit;">odpovídající úrovni junior/medior/senior,</span></li><li><span style="color: inherit;">český a anglický jazyk na komunikativní úrovni,</span></li><li><span style="color: inherit;">zodpovědný přístup a kombinace samostatnosti a týmovosti.</span></li></ul><p><strong>Nabízíme:</strong></p><ul><li><span style="color: inherit;">příležitost pro rozvoj,</span></li><li><span style="color: inherit;">pohodový pracovní tým,</span></li><li><span style="color: inherit;">Home office - po domluvě,</span></li><li><span style="color: inherit;">týden dovolené navíc, stravenky, benefitní karta, plně hrazená multisportka, mobilní tarif, Sick days, narozeninový den,</span></li><li><span style="color: inherit;">společné večeře a další TB akce.</span></li></ul><p><em>Oslovili jsme tě? Tak na nic nečekej a pošli nám CV či LinkedIn profil.</em></p><p><br></p>
1 change: 1 addition & 0 deletions tests/pipelines/broken_encoding_filter/raising1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="description__text description__text--rich"><strong>JAVA DEVELOPER - PRAHA (HPP)<br><br></strong><strong> Souhrn</strong> V dob? nejistoty a zm?n je d?ležité pracovat pro stabilní firmu, kterou jen tak n?co nepohne a p?esn? to vám mohu nabídnout. Firma s kterou pracuji je gigant v oblasti financí a bankovnictví s HQ v Londýn?. A?koli p?vod pramení ve Velké Británii, práv? Praha je domovem jednoho z nejvýznamn?jších vývojových center, které se nachází na Praze 4.<br><br>Práce v této spole?nosti vás vždy posune o krok dál - a? už osobn? tak profesionáln?. Projekty jsou mezinárodního rázu a budete tak mít možnost pracovat také s kolegy z UK a USA. Na projektech budete mít možnost využít vaše dosavadní schopnosti a znalosti, ale zárove? vás budou podporovat v osvojování nových technologií, s kterými jste t?eba ješt? nepracovali. Každý projekt vám p?inese n?co nového. Krom? u?ení se na projektech m?žete také využít r?zné platformy rozši?ovat své znalosti skrz r?zné kurzy: soft skills, IT, finance, jazykové. V tuto chvíli máme pozice pro Java vývojá?e od junior? až po vedoucí týmu. <strong> Základní dovednosti<br></strong><li> Alespo? minimální komer?ní zkušenosti s Javou, idáln? Java SE 8 (dle seniority)</li> <li> Spring, Spring boot, hibernate</li> <li> Znalost návrhových vzor?, základy OOP, multithreading</li> <li> Profesionální úrove? Angli?tiny</li> <li> P?edchozí zkušenost s vedením týmu (na pozici vedoucí týmu)<br></li><strong> S ?ím m?žete po?ítat<br></strong><li> Projekty založené na nových technologiích</li> <li> Kurzy (jazykové, IT, finance, soft skills)</li> <li> Pružná pracovní doba (pevné hodiny mezi 9.30 a 16.00)</li> <li> Práce v mezinárodní, ekonomicky stabilní firm?</li> <li> Rozsáhlé možnosti profesního postupu</li> <li> 60 dní zdravotního volna za rok</li> <li> Další standardní benefity (p?ísp?vek na penzi, medicover, 25 dní dovolené etc.)<br></li><strong> Kontaktní osoba: Zuzana Zednikova (+420 228 883 020/ Click here to contact this recruiter ).<br><br></strong><strong> Contact Name:</strong> Zuzana Zednikova<br><strong> Reference:</strong> TJ/3086/17042020ZZ01_1587122036<br><strong> Job ID:</strong> 2819766</div>
1 change: 1 addition & 0 deletions tests/pipelines/broken_encoding_filter/raising2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="description__text description__text--rich"><strong>Souhrn</strong> V dob? nejistoty a zm?n je d?ležité pracovat pro stabilní firmu, kterou jen tak n?co nepohne a p?esn? to vám mohu nabídnout. Firma s kterou pracuji je gigant v oblasti financí a bankovnictví s HQ v Londýn?. A?koli p?vod pramení ve Velké Británii, práv? Praha je domovem jednoho z nejvýznamn?jších vývojových center, které se nachází na Praze 4.<br><br>Práce v této spole?nosti vás vždy posune o krok dál - a? už osobn? tak profesionáln?. Projekty jsou mezinárodního rázu a budete tak mít možnost pracovat také s kolegy z UK a USA. Na projektech budete mít možnost využít vaše dosavadní schopnosti a znalosti, ale zárove? vás budou podporovat v osvojování nových technologií, s kterými jste t?eba ješt? nepracovali. Každý projekt vám p?inese n?co nového. Krom? u?ení se na projektech m?žete také využít r?zné platformy rozši?ovat své znalosti skrz r?zné kurzy: soft skills, IT, finance, jazykové. V tuto chvíli máme pozice pro Java vývojá?e od junior? až po vedoucí týmu. <strong> Základní dovednosti<br></strong><li> Alespo? minimální komer?ní zkušenosti s Javou, idáln? Java SE 8 (dle seniority)</li> <li> Spring, Spring boot, hibernate</li> <li> Znalost návrhových vzor?, základy OOP, multithreading</li> <li> Profesionální úrove? Angli?tiny</li> <li> P?edchozí zkušenost s vedením týmu (na pozici vedoucí týmu)<br></li><strong> S ?ím m?žete po?ítat<br></strong><li> Projekty založené na nových technologiích</li> <li> Kurzy (jazykové, IT, finance, soft skills)</li> <li> Pružná pracovní doba (pevné hodiny mezi 9.30 a 16.00)</li> <li> Práce v mezinárodní, ekonomicky stabilní firm?</li> <li> Rozsáhlé možnosti profesního postupu</li> <li> 60 dní zdravotního volna za rok</li> <li> Další standardní benefity (p?ísp?vek na penzi, medicover, 25 dní dovolené etc.)<br></li><strong> Kontaktní osoba: Zuzana Zednikova (+420 228 883 020/ Click here to contact this recruiter ).<br><br></strong><strong> Contact Name:</strong> Zuzana Zednikova<br><strong> Reference:</strong> TJ/3086/16042020ZZ02_1587028971<br><strong> Job ID:</strong> 2819455</div>
1 change: 1 addition & 0 deletions tests/pipelines/broken_encoding_filter/raising3.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="description__text description__text--rich"><strong>JAVA DEVELOPER - PRAHA (HPP)<br><br></strong><strong> Souhrn</strong> V dob? nejistoty a zm?n je d?ležité pracovat pro stabilní firmu, kterou jen tak n?co nepohne a p?esn? to vám mohu nabídnout. Firma s kterou pracuji je gigant v oblasti financí a bankovnictví s HQ v Londýn?. A?koli p?vod pramení ve Velké Británii, práv? Praha je domovem jednoho z nejvýznamn?jších vývojových center, které se nachází na Praze 4.<br><br>Práce v této spole?nosti vás vždy posune o krok dál - a? už osobn? tak profesionáln?. Projekty jsou mezinárodního rázu a budete tak mít možnost pracovat také s kolegy z UK a USA. Na projektech budete mít možnost využít vaše dosavadní schopnosti a znalosti, ale zárove? vás budou podporovat v osvojování nových technologií, s kterými jste t?eba ješt? nepracovali. Každý projekt vám p?inese n?co nového. Krom? u?ení se na projektech m?žete také využít r?zné platformy rozši?ovat své znalosti skrz r?zné kurzy: soft skills, IT, finance, jazykové. V tuto chvíli máme pozice pro Java vývojá?e od junior? až po vedoucí týmu. <strong> Základní dovednosti<br></strong><li> Alespo? minimální komer?ní zkušenosti s Javou, idáln? Java SE 8 (dle seniority)</li> <li> Spring, Spring boot, hibernate</li> <li> Znalost návrhových vzor?, základy OOP, multithreading</li> <li> Profesionální úrove? Angli?tiny</li> <li> P?edchozí zkušenost s vedením týmu (na pozici vedoucí týmu)<br></li><strong> S ?ím m?žete po?ítat<br></strong><li> Projekty založené na nových technologiích</li> <li> Kurzy (jazykové, IT, finance, soft skills)</li> <li> Pružná pracovní doba (pevné hodiny mezi 9.30 a 16.00)</li> <li> Práce v mezinárodní, ekonomicky stabilní firm?</li> <li> Rozsáhlé možnosti profesního postupu</li> <li> 60 dní zdravotního volna za rok</li> <li> Další standardní benefity (p?ísp?vek na penzi, medicover, 25 dní dovolené etc.)<br></li><strong> Kontaktní osoba: Zuzana Zednikova (+420 228 883 020/ Click here to contact this recruiter ).<br><br></strong><strong> Contact Name:</strong> Zuzana Zednikova<br><strong> Reference:</strong> TJ/3086/24042020zz07_1587720144<br><strong> Job ID:</strong> 2821530</div>
49 changes: 49 additions & 0 deletions tests/pipelines/broken_encoding_filter/test_pipeline.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from pathlib import Path

import pytest
from scrapy import Spider

from juniorguru_plucker.items import Job
from juniorguru_plucker.pipelines.broken_encoding_filter import (
BrokenEncoding,
Pipeline,
)


fixtures_raising = [
pytest.param(path.read_text(), id=path.name)
for path in (Path(__file__).parent).rglob("*.html")
if path.name.startswith("raising")
]
assert len(fixtures_raising) > 0, "No fixtures found"


@pytest.mark.parametrize("description_html", fixtures_raising)
def test_broken_encoding_filter_raising(
item: Job,
spider: Spider,
description_html: str,
):
item["description_html"] = description_html

with pytest.raises(BrokenEncoding):
Pipeline().process_item(item, spider)


fixtures_passing = [
pytest.param(path.read_text(), id=path.name)
for path in (Path(__file__).parent).rglob("*.html")
if path.name.startswith("passing")
]
assert len(fixtures_passing) > 0, "No fixtures found"


@pytest.mark.parametrize("description_html", fixtures_passing)
def test_broken_encoding_filter_passing(
item: Job,
spider: Spider,
description_html: str,
):
item["description_html"] = description_html

Pipeline().process_item(item, spider)
27 changes: 27 additions & 0 deletions tests/pipelines/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from datetime import date

import pytest
from scrapy import Spider

from juniorguru_plucker.items import Job


@pytest.fixture
def item() -> Job:
return Job(
title="Junior Python Engineer",
first_seen_on=date.today(),
url="https://example.com/jobs/123",
company_name="Mergado",
employment_types=["full-time"],
description_html="...",
source="jobs-startupjobs",
source_urls=[
"https://www.startupjobs.cz/nabidka/38100/python-backend-developer-brno"
],
)


@pytest.fixture
def spider() -> Spider:
return Spider(name="sample")
10 changes: 10 additions & 0 deletions tests/pipelines/language_parser/cs.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<header>
<h1>Web developer</h1>
<h2 id="kdo-jsme-a-koho-hledame">Kdo jsme a koho hledáme?</h2>
<p>Baví nás e-commerce a proto jsme se před rokem pustili do tvorby aplikací pro <a href="https://www.shopify.com/">Shopify.com</a>. Provozujeme více aplikací, např. Candyrack, zaměřené na performance marketing a dnes je využívají stovky e-shopů z celého světa. Klademe důraz na UX, UI a support našich zákazníků. Jsme teprve na začátku budování týmu a hledáme posilu pro našeho programátora.</p>
<h2 id="nase-technologie">Naše technologie</h2>
<p>Aplikace jsou napsané v Djangu 2.2 (Python 3.7) a Reactu. Pro UI testy používáme <a href="https://www.cypress.io/">cypress.io</a> a v Pythonu unittest. Nechceme řešit operations, všechno tedy provozujeme na Heroku. Práci řešíme v Trellu, na GitHubu a na Slacku. Není důležité jestli něco z toho neumíš. Věříme v rychlé sdílení znalostí pomocí <a href="https://tuple.app/pair-programming-guide/the-case-for-pair-programming">párového programování</a>. Naše aplikace jsou velmi úzce svázané se Shopify pomocí jejich API, časem se ho tedy budeš muset naučit.</p>
<h2 id="co-ocekavame">Co očekáváme?</h2>
<p>Očekáváme alespoň základní znalost Pythonu, JavaScriptu, HTML a CSS - musíš mít chuť tvořit webové aplikace. And of course, you should be able to communicate in English.</p>
<h2 id="co-nabizime">Co nabízíme?</h2>
<p>Tvé finanční požadavky pro nás nejsou důležité, klíčový je tvůj přínos a jak mezi nás zapadneš. Klademe důraz na výsledky a rádi navíc oceníme iniciativu. Máme kancelář u Masarykova nádraží, ale jsme distribuovaný tým a naprostá většina diskuzí probíhá v Trellu. Pokud máš rád dobrou kávu jako my, naše druhá kancelář je za rohem, v EMA espresso baru :)</p>
1 change: 1 addition & 0 deletions tests/pipelines/language_parser/cs_classified_as_ca.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<section class="description"><div class="description__text description__text--rich">Pro našeho klienta, IT společnost se sídlem v Plzni * podílení se na vývoji aplikací<br><br><li> programování, analýza a návrhy individuálních řešení * součást mezinárodních realizačních týmů * možnost pracovních cest * atraktivní mzdové ohodnocení * skvělé příležitosti pro vlastní rozvoj * flexibilní pracovní doba</li><li> stravenky, nápoje na pracovišti a fruit days * kurzy anglického, německého a španělského jazyka * společné mimopracovní aktivity</li><li> dodatková dovolená + sick days * možnost využ</li></div><ul class="job-criteria__list"><li class="job-criteria__item"><h3 class="job-criteria__subheader">Seniority level</h3><span class="job-criteria__text job-criteria__text--criteria">Entry level</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Employment type</h3><span class="job-criteria__text job-criteria__text--criteria">Full-time</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Job function</h3><span class="job-criteria__text job-criteria__text--criteria">Engineering</span><span class="job-criteria__text job-criteria__text--criteria">Information Technology</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Industries</h3><span class="job-criteria__text job-criteria__text--criteria">Staffing and Recruiting</span><span class="job-criteria__text job-criteria__text--criteria">Retail</span><span class="job-criteria__text job-criteria__text--criteria">Financial Services</span></li></ul></section>
1 change: 1 addition & 0 deletions tests/pipelines/language_parser/cs_classified_as_ca2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<section class="description"><div class="description__text description__text--rich">Hledáš práci, ve které uplatníš svůj potenciál? Baví Tě front-endový vývoj v JavaScriptu? Chceš pracovat s moderními technologiemi a mít přátelský kolektiv?Pak hledáme právě Tebe!* 5 týdnů dovolené* Příspěvky ve formě Cafeterie* Jazykové a vzdělávací kurzy* Nové kanceláře* Nejmodernější technologie* Velmi příjemné pracovní prostředí* Možnost kariérního růstu* Stravenky* Příspěvky na pojištění* Místo výkonu práce: Olomouc*...</div><ul class="job-criteria__list"><li class="job-criteria__item"><h3 class="job-criteria__subheader">Seniority level</h3><span class="job-criteria__text job-criteria__text--criteria">Entry level</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Employment type</h3><span class="job-criteria__text job-criteria__text--criteria">Full-time</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Job function</h3><span class="job-criteria__text job-criteria__text--criteria">Sales</span><span class="job-criteria__text job-criteria__text--criteria">Management</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Industries</h3><span class="job-criteria__text job-criteria__text--criteria">Information Technology and Services</span><span class="job-criteria__text job-criteria__text--criteria">Staffing and Recruiting</span><span class="job-criteria__text job-criteria__text--criteria">Accounting</span></li></ul></section>
21 changes: 21 additions & 0 deletions tests/pipelines/language_parser/de.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<section class="mb32 fs-body2 fc-medium pr48">
<h2 class="fs-subheading mb16 fc-dark">Job description</h2>
<div>
<p><strong>UNSER HERZ SCHLÄGT FÜR BILDUNG! </strong></p>
<p><strong>DEINS FÜR IT? Clean Code, Clean Architecture und Design Pattern sagen dir was? - Klasse, dann bist du bei uns genau richtig!</strong></p>
<p><strong>Du</strong> teilst unsere Begeisterung, Menschen bei der Erweiterung ihrer beruflichen Kompetenzen und Integration in den Arbeitsmarkt zu unterstützen und bringst darüber hinaus ein hohes Maß an Einsatz- und Lernbereitschaft sowie Freude am Arbeiten im Team mit.</p>
<ul>
<li>Studium oder Ausbildung der Informatik oder eines verwandten Bereichs. <strong>Oder gleichwertige Kenntnisse, die im Bereich der privaten Programmierung erworben wurden.</strong></li>
<li>Erfahrung mit PHP- bzw. Symfony-Programmierung</li>
</ul>
<p><strong>Dein neues Aktionsfeld</strong></p>
<ul>
<li>Flexible Arbeitszeiten</li>
<li>Homeoffice, wenn du möchtest</li>
<li>Aktiv mitgestalten, statt nur auszuführen.</li>
<li>Nette Kollegen (echt jetzt)</li>
<li>Sinnvolle Tätigkeit: Wir stärken Menschen durch Bildung. Das ist unser Geschäftsmodell und unser Ziel.</li>
<li>Gute Verkehrsanbindung</li>
<li>Moderner Arbeitsplatz in Berlin und/oder im Homeoffice, von wo aus du willst. <strong>Auch 100% Homeoffice ist möglich! </strong></li>
</ul> </div>
</section>
1 change: 1 addition & 0 deletions tests/pipelines/language_parser/pl.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<section class="description"><div class="description__text description__text--rich"><ul><li>tworzenie i rozwój aplikacji w oparciu o wymagania biznesowe przy wykorzystaniu najlepszych praktyk programowania,</li><li> projektowanie responsywnych i nowoczesnych aplikacji front-endowych,</li><li> opracowywanie i obsługa testów jednostkowych oprogramowania,</li><li> dzielenie się wiedzą, przeprowadzanie code review,</li><li> przygotowanie/aktualizacja technicznej dokumentacji poprojektowej.</li><li> wykształcenia wyższego (preferowane kierunki informatyczne lub pokrewne),</li><li> min. 3-letnie doświadczenie komercyjne w tworzeniu aplikacji webowych</li><li> Znajomość i doświadczenie w pracy z technologiami:</li><li> HTML5, CSS3, bardzo dobra znajomość JavaScript (ES6/ES7), TypeScript, Bootstrap, ReactJS (Saga, Redux), jQuery, TSlint/JSLint, Webpack, Gulp/Grunt, Node.js, NPM, Preprocesor SASS/LESS, wzorców projektowych OOP, Webserwisy REST, W3C</li><li> znajomości systemu kontroli wersji Git,</li><li> znajomość zagadnień z optymalizacji i wydajności aplikacji,</li><li> znajomości j. angielskiego na poziomie umożliwiającym swobodną pracę z dokumentacją techniczną.<br><br></li><strong><u>Mile Widziane<br><br></u></strong><li> doświadczenie w pracy z Jenkins/Jira Confluence,</li><li> znajomość narzędzi ciągłej integracji CI/CD,</li><li> doświadczenie w pracy w zespole Scrum,</li><li> znajomość techniki TDD.</li><li> umowa o pracę,</li><li> pracę w doświadczonym zespole, przy rozwoju jednej z największych platform integracyjnych w kraju,</li><li> atrakcyjny pakiet socjalno-motywacyjny, w tym prywatną opiekę zdrowotną i Pracowniczy Program Emerytalny,</li><li> konkurencyjne wynagrodzenie,</li><li> pakiet benefitów,</li><li> profesjonalny system szkoleń.</li></ul></div><ul class="job-criteria__list"><li class="job-criteria__item"><h3 class="job-criteria__subheader">Seniority level</h3><span class="job-criteria__text job-criteria__text--criteria">Entry level</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Employment type</h3><span class="job-criteria__text job-criteria__text--criteria">Full-time</span></li><li class="job-criteria__item"><h3 class="job-criteria__subheader">Job function</h3><span class="job-criteria__text job-criteria__text--criteria">Engineering</span><span class="job-criteria__text job-criteria__text--criteria">Information Technology</span></li></ul></section>
31 changes: 31 additions & 0 deletions tests/pipelines/language_parser/test_pipeline.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from pathlib import Path

import pytest
from langdetect import DetectorFactory
from scrapy import Spider

from juniorguru_plucker.items import Job
from juniorguru_plucker.pipelines.language_parser import Pipeline


DetectorFactory.seed = 0 # prevent non-deterministic language detection


fixtures = [
pytest.param(path.read_text(), path.stem.split("_")[0], id=path.name)
for path in (Path(__file__).parent).rglob("*.html")
]
assert len(fixtures) > 0, "No fixtures found"


@pytest.mark.parametrize("description_html, expected_lang", fixtures)
def test_language_parser(
item: Job,
spider: Spider,
description_html: str,
expected_lang: str,
):
item["description_html"] = description_html
item = Pipeline().process_item(item, spider)

assert item["lang"] == expected_lang
24 changes: 24 additions & 0 deletions tests/pipelines/test_language_filter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import pytest
from scrapy import Spider

from juniorguru_plucker.items import Job
from juniorguru_plucker.pipelines.language_filter import (
IrrelevantLanguage,
Pipeline,
)


@pytest.mark.parametrize("lang", ["cs", "en"])
def test_language_filter(item: Job, spider: Spider, lang: str):
item["lang"] = lang
item = Pipeline().process_item(item, spider)

assert item["lang"] == lang


@pytest.mark.parametrize("lang", ["de", "fr", "pl"])
def test_language_filter_drops(item: Job, spider: Spider, lang: str):
item["lang"] = lang

with pytest.raises(IrrelevantLanguage, match=lang):
Pipeline().process_item(item, spider)
26 changes: 26 additions & 0 deletions tests/pipelines/test_required_fields_filter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import pytest
from scrapy import Field, Item, Spider

from juniorguru_plucker.pipelines.required_fields_filter import (
MissingRequiredFields,
Pipeline,
)


class Something(Item):
prop1 = Field()
prop2 = Field(required=True)
prop3 = Field()
prop4 = Field(required=True)


def test_required_fields_filter(spider: Spider):
item = Something(prop1="foo", prop2="moo", prop4="boo")
Pipeline().process_item(item, spider)


def test_required_fields_drops(spider: Spider):
item = Something()

with pytest.raises(MissingRequiredFields, match="prop2, prop4"):
Pipeline().process_item(item, spider)
69 changes: 69 additions & 0 deletions tests/pipelines/test_short_description_filter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import pytest
from scrapy import Spider

from juniorguru_plucker.items import Job
from juniorguru_plucker.pipelines.short_description_filter import (
Pipeline,
ShortDescription,
)


def test_short_description_filter(item: Job, spider: Spider):
item["description_html"] = """
<div class="description__text description__text--rich">Požadavky<br>
<br>Zkušenosti s programováním v Pythonu<br>Python 2x, Python 3x<br>
PostgreSQL/SQL server<br><br>Preferujeme<br>Django framework<br>
Vue.js<br>HTML5<br><br>Náplň práce<br><br>Do týmu "srdcařů" hledáme
Python developery do OLOMOUCE<br><br>Možnost spolupráce jak HPP tak
i DPP či freelance.<br><br>Jedná se o práci na dlouhodobých českých
i zahraničních projektech, vývoj sw na zakázku. Bližší informace
o našich projektech Vám rádi představíme osobně :-)<br><br>Nabízíme<br>
<br><strong><u>Nadstandardní Benefity<br><br></u></strong>cvičení s
fyzioterapeutem v pracovní době /abyste si protáhli záda od sezení
u PC/<br>stravenky 100 Kč<br>každých 6 měsíců přehodnocení platu<br>
příspěvek na nákup techniky<br>příspěvek na penzijní či jiné
připojištění<br>firemní telefonní číslo i pro blízkou rodinu s výhodným
tarifem<br>nadstandardní příplatky navíc za support na telefonu pro
zákazníky<br>systém kafeteria<br>a v neposlední řadě výborný pohodový
tým, férové jednání</div>
"""

assert len(item["description_html"]) > Pipeline.min_chars_count
Pipeline().process_item(item, spider)


def test_short_description_filter_drops(item: Job, spider: Spider):
item["description_html"] = """
<div class="description__text description__text--rich">
Nabízíme možnost vybrat si z variace projektů, na kterých využijete
nejmodernější technologie pro vývoj aplikací v oblasti zdravotnictví
a státních institucí (zdravotní pojišťovny, nemocnice, státní a veřejná
správa, finanční a kapitálové trhy). Pracovat můžete v distribuovaných
týmech zkušených i méně zkušených programátorů pod vedením zběhlých
ředitelů vývoje.* 5 týdnů dovolené* firemní notebook a telefon*
vzdělávací kurzy (odborné i...
</div>
"""

assert len(item["description_html"]) < Pipeline.min_chars_count
with pytest.raises(ShortDescription):
Pipeline().process_item(item, spider)


def test_short_description_filter_drops_regardless_html(item: Job, spider: Spider):
item["description_html"] = """
<div class="description__text description__text--rich">
<strong>Nabízíme možnost vybrat</strong> si z variace projektů,
na kterých <a href="https://www.example.com/example?q=1">využijete</a>
nejmodernější technologie pro vývoj aplikací v oblasti zdravotnictví
a státních institucí (zdravotní pojišťovny, nemocnice, státní a veřejná
správa, finanční a kapitálové trhy). Pracovat můžete v distribuovaných
týmech zkušených i méně zkušených programátorů pod vedením zběhlých
ředitelů vývoje.* 5 týdnů dovolené* firemní notebook a telefon*
vzdělávací kurzy (odborné i...
</div>
"""

assert len(item["description_html"]) > Pipeline.min_chars_count
with pytest.raises(ShortDescription):
Pipeline().process_item(item, spider)

0 comments on commit ff61d4a

Please sign in to comment.