diff --git a/tests/test_poller.py b/tests/test_poller.py index 6a6b6b38..ef170734 100644 --- a/tests/test_poller.py +++ b/tests/test_poller.py @@ -1,7 +1,7 @@ import os +import pytest from twisted.internet.defer import Deferred -from twisted.trial import unittest from zope.interface.verify import verifyObject from scrapyd.config import Config @@ -10,52 +10,52 @@ from scrapyd.utils import get_spider_queues -class QueuePollerTest(unittest.TestCase): - def setUp(self): - d = self.mktemp() - eggs_dir = os.path.join(d, "eggs") - dbs_dir = os.path.join(d, "dbs") - os.makedirs(eggs_dir) - os.makedirs(dbs_dir) - os.makedirs(os.path.join(eggs_dir, "mybot1")) - os.makedirs(os.path.join(eggs_dir, "mybot2")) - config = Config(values={"eggs_dir": eggs_dir, "dbs_dir": dbs_dir}) - self.queues = get_spider_queues(config) - self.poller = QueuePoller(config) +@pytest.fixture() +def poller(tmpdir): + eggs_dir = os.path.join(tmpdir, "eggs") + dbs_dir = os.path.join(tmpdir, "dbs") + os.makedirs(os.path.join(eggs_dir, "mybot1")) + os.makedirs(os.path.join(eggs_dir, "mybot2")) + config = Config(values={"eggs_dir": eggs_dir, "dbs_dir": dbs_dir}) + return QueuePoller(config) - def test_interface(self): - verifyObject(IPoller, self.poller) - def test_poll_next(self): - cfg = {"mybot1": "spider1", "mybot2": "spider2"} - priority = 0 - for prj, spd in cfg.items(): - self.queues[prj].add(spd, priority) +def test_interface(poller): + verifyObject(IPoller, poller) - d1 = self.poller.next() - d2 = self.poller.next() - self.assertIsInstance(d1, Deferred) - self.assertFalse(hasattr(d1, "result")) +def test_poll_next(poller): + queues = get_spider_queues(poller.config) - # poll once - self.poller.poll() + cfg = {"mybot1": "spider1", "mybot2": "spider2"} + priority = 0 + for prj, spd in cfg.items(): + queues[prj].add(spd, priority) - self.assertTrue(hasattr(d1, "result")) - self.assertTrue(getattr(d1, "called", False)) + d1 = poller.next() + d2 = poller.next() - # which project got run: project1 or project2? - self.assertTrue(d1.result.get("_project")) + assert isinstance(d1, Deferred) + assert not hasattr(d1, "result") - prj = d1.result["_project"] + # poll once + poller.poll() - self.assertEqual(d1.result["_spider"], cfg.pop(prj)) + assert hasattr(d1, "result") + assert getattr(d1, "called", False) - self.queues[prj].pop() + # which project got run: project1 or project2? + assert d1.result.get("_project") - # poll twice - # check that the other project's spider got to run - self.poller.poll() - prj, spd = cfg.popitem() + prj = d1.result["_project"] - self.assertEqual(d2.result, {"_project": prj, "_spider": spd}) + assert d1.result["_spider"] == cfg.pop(prj) + + queues[prj].pop() + + # poll twice + # check that the other project's spider got to run + poller.poll() + prj, spd = cfg.popitem() + + assert d2.result == {"_project": prj, "_spider": spd}