def testSuccessfulScenario(self): dal = self.given_dal() key_model = ApiKeyModel(dal, None) api_model = FFApi(key_model, validate_url, [FakeSite(), FakeSite()]) request = { "url": "http://www.fanfiction.net/s/5012016/1/Partners", } result = api_model.get(request) self.assertFalse(result.is_valid)
class FFApiTests(DalTestCase): def __init__(self, *args, **kwargs): super(FFApiTests, self).__init__(*args, **kwargs) self.api = None self.result = None def testMultipleSitesForSameUrl(self): self._given_api([TestSite(), TestSite()]) self._when_making_request_to("http://example.org") self._then_response_is_invalid() self._then_response_error_contains("multiple parsers available") def testZeroSitesForUrl(self): self._given_api([]) self._when_making_request_to("http://example.org") self._then_response_is_invalid() self._then_response_error_contains("no parser available") def testModelWithFanfictionNet(self): html = contents_of("partners1.html") self._given_api([FanfictionNetSite(FakeInternet(html))]) self._when_making_request_to( "http://www.fanfiction.net/s/5012016/1/Partners") self._then_response_is_valid() def testModelWithFanfictionNetAndInfiniteyApiKey(self): html = contents_of("partners1.html") self._given_api([FanfictionNetSite(FakeInternet(html))]) self._when_making_request( "http://www.fanfiction.net/s/5012016/1/Partners", "infinitekey") self._then_response_is_valid() def testModelWithArchiveOfOurOwn(self): html = contents_of("ao3_writteninthebody.html") self._given_api([ArchiveOfOurOwnSite(FakeInternet(html))]) self._when_making_request_to( "http://archiveofourown.org/works/5343467") self._then_response_is_valid() def testApiWithEvilUrlValidator(self): url_parameters = {"url": "totally_invalid_url"} api = FFApi( ApiKeyModel(self.given_dal(), None), evil_url_validate, [TestSite()]) evil_validator_result = evil_url_validate(url_parameters) url_validation_result = api._validate(url_parameters) self.assertFalse(url_validation_result) self.assertEqual(evil_validator_result, url_validation_result) def _given_api(self, sites): self.api = FFApi( ApiKeyModel(self.given_dal(), None), validate_url, sites) def _when_making_request_to(self, url): return self._when_making_request(url, "testkey") def _when_making_request(self, url, key): request = { "url": url, "key": key } self.result = self.api.get(request) def _then_response_is_valid(self): self.assertTrue(self.result.is_valid) def _then_response_is_invalid(self): self.assertFalse(self.result.is_valid) def _then_response_error_contains(self, expected_message): self.assertTrue(expected_message in self.result.json)