def test_item_validated_and_returned(self, item, verbose):
     """Verify that when the ValidationPipeline receives a correctly-constructed item, it returns the very same item after validating it.
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     same_item = pipeline.process_item(item, spider)
     self.assertEquals(same_item, item)
 def test_drop_person_missing_field(self, item, verbose):
     """Verify that the ValidationPipeline drops the PersonItem instance if it's missing one or more fields.
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     with self.assertRaises(DropItem):
         returned_item = pipeline.process_item(item, spider)
         self.assertIsNone(returned_item)
 def test_drop_tool_blank_reqd_field(self, item, verbose):
     """Verify that the ValidationPipeline drops a ToolItem instance if it has no tool_name or no tool_url.
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     clean_item = pipeline.process_item(item, spider)
     for tool_item in clean_item['tools']:
         for val in tool_item.values():
             self.assertTrue(val)
 def test_drop_tools_missing_field(self, item, verbose):
     """Verify that the ValidationPipeline deletes tool_items if they're missing one or more fields.
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     clean_item = pipeline.process_item(item, spider)
     for tool_item in clean_item['tools']:
         missing_fields = set(ToolItem.fields) - set(tool_item)
         self.assertFalse(missing_fields)
 def test_drop_tool_malformed_url(self, item, verbose):
     """Verify that the ValidationPipeline drops a ToolItem instance if it has a malformed tool_url.
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     clean_item = pipeline.process_item(item, spider)
     # The only remaining tools should be from the one 'correct' URL
     for tool_item in clean_item['tools']:
         tool_url = tool_item['tool_url']
         self.assertEquals(tool_url, 'http://plumbertools.org/pipebuster5000')
 def test_drop_person_blank_reqd_field(self, item, verbose):
     """Verify that the ValidationPipeline drops the PersonItem instance if one or more of the following fields are empty:
     name, article_url, pub_date, img_src
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     if '' in item['person'].values():
         with self.assertRaises(DropItem):
             returned_item = pipeline.process_item(item, spider)
             self.assertIsNone(returned_item)
     else:
         self.assertEquals(pipeline.process_item(item, spider), item)
 def test_drop_person_malformed_url_or_date(self, item, verbose):
     """Verify that the ValidationPipeline drops the PersonItem instance if it has a malformed url or date.
     """
     spider = UsesthisSpider('usesthis')
     pipeline = ValidationPipeline()
     pipeline._verbose = verbose
     try:
         with self.assertRaises(DropItem):
             returned_item = pipeline.process_item(item, spider)
             self.assertIsNone(returned_item)
     except AssertionError:
         self.assertEquals(returned_item['person'], PersonItem(
             name='Joe Schmoe',
             article_url='https://usesthis.com/interviews/joe.schmoe/',
             pub_date='2014-04-08',
             title='Plumber',
             img_src='https://usesthis.com/images/portraits/joe.schmoe.jpg',
             bio='Hi, my name is Joe. People call me "Joe the Plumber".',
             hardware='I use the PipeBuster5000. Best wrench on the market.',
             software='I couldn\'t care less about software.',
             dream='My dream setup would be a PipeBuster6000.',
         ))