def test_to_dict_returns_one_dictionary_when_cursor_has_one_result(self): source = Source() source.id = 1 source.name = 'foo_source' source.save() news_item = NewsItem() news_item.id = 1 news_item.title = 'foo' news_item.description = 'bar' news_item.url = 'https://www.google.com' news_item.added_at = '2018-11-23 01:00:00+00:00' news_item.source = source news_item.published = False news_item.score = 1 news_item.save() with connection.cursor() as cursor: cursor.execute('SELECT * FROM news_item') result = self.newsitem_metric.to_dict(cursor) self.assertEquals(1, len(result)) self.assertEquals([{ 'id': 1, 'title': 'foo', 'description': 'bar', 'url': 'https://www.google.com', 'added_at': datetime(2018, 11, 23, 1, 0), 'source_id': 1, 'published': False, 'score': 1 }], result)
def test_corpus_create_positive_creates_positive_corpora_and_enqueues_job_to_retrain_classifier_when_newsitems_in_query_set( self): news_item = NewsItem() news_item.title = 'foo' news_item.published = True news_item.save() query_set = [news_item] self.newsitem.corpus_create_positive(None, None, query_set) self.newsitem.enqueue_corpus_creation.assert_called_once() corpora = Corpus.objects.all() self.assertEquals(1, len(corpora)) self.assertEquals(True, corpora[0].positive)
def test_news_item_unpublish_unpublishes_newsitems_in_query_set(self): news_items = NewsItem.objects.all() self.assertEquals([], list(news_items)) news_item = NewsItem() news_item.title = 'foo' news_item.published = True query_set = [news_item] self.newsitem.news_item_unpublish(None, None, query_set) news_items = NewsItem.objects.all() self.assertEquals(1, len(news_items)) self.assertEquals(False, news_items[0].published)
def test_get_accuracy_does_not_include_unclassified_newsitems(self): news_item = NewsItem() news_item.score = None news_item.added_at = '2018-11-24 01:00:00+00:00' news_item.save() news_item = NewsItem() news_item.score = None news_item.published = True news_item.added_at = '2018-11-24 02:00:00+00:00' news_item.save() metrics = self.newsitem_metric.get_accuracy(self.date_range) self.assertEquals([], metrics)
def test_news_item_publish_and_corpus_create_positive_publishes_newsitems_and_creates_positive_corpora_when_newsitems_in_query_set( self): news_item = NewsItem() news_item.title = 'foo' news_item.published = False news_item.save() query_set = [news_item] self.newsitem.news_item_publish_and_corpus_create_positive( None, None, query_set) self.newsitem.enqueue_corpus_creation.assert_called_once() corpora = Corpus.objects.all() self.assertEquals(1, len(corpora)) self.assertEquals(True, corpora[0].positive) news_items = NewsItem.objects.all() self.assertEquals(1, len(news_items)) self.assertEquals(True, news_items[0].published)
def setUp(self): # retain the original imported packages classify.serializers_real = classify.serializers # mock the tread target methods self.thread_classify = mock.MagicMock() self.thread_train = mock.MagicMock() classify.threading.Thread = mock.MagicMock( side_effect=[self.thread_classify, self.thread_train]) # mock pika.BlockingConnection self.connection = mock.MagicMock() classify.pika.BlockingConnection = mock.MagicMock( return_value=self.connection) # mock pika.BlockingConnection.channel self.channel = mock.MagicMock() self.connection.channel = mock.MagicMock(return_value=self.channel) # mock ConnectionParameters classify.pika.ConnectionParameters = mock.MagicMock() # mock the ORM connection self.db_connection = mock.MagicMock() classify.connection = self.db_connection # mock the classifier classify.NaiveBayesClassifier = mock.MagicMock() classify.settings.AUTO_PUBLISH = False # a fake news item to be used as classification input news_item = NewsItem() news_item.title = 'foo' self.serialized_news_item = serializers.serialize('json', [news_item]) news_item = NewsItem() news_item.title = 'foo' news_item.published = 'foo' self.serialized_news_item_crap = serializers.serialize( 'json', [news_item]) # mock the logger self.logger = mock.MagicMock() classify.logging.getLogger = mock.MagicMock(return_value=self.logger) self.command = classify.Command()
def test_news_returns_http_response_with_template_and_positive_newsitems_when_positive_newsitems_exist(self): # create a positive news item news_item = NewsItem() news_item.title = 'foo' news_item.score = 1 news_item.published = True news_item.save() # make request to news view response = self.get_news() # returns an instance of HttpResponse self.assertTrue(type(response) is HttpResponse) # request didn't fail self.assertEquals(200, response.status_code) # response contains news items content = response.getvalue() self.assertTrue('news-item' in str(content))
def test_about_returns_http_response_with_stats(self): # create a news item news_item = NewsItem() news_item.title = 'foo' news_item.score = 1 news_item.published = False news_item.save() # create an active source source = Source() source.name = 'foo' source.url = 'http://www.foo.com' source.homepage = 'http://www.foo.com' source.save() # create an inactive source source = Source() source.name = 'bar' source.url = 'http://www.bar.com' source.homepage = 'http://www.bar.com' source.active = False source.save() # make request to news view response = self.get_about() # returns an instance of HttpResponse self.assertTrue(type(response) is HttpResponse) # request didn't fail self.assertEquals(200, response.status_code) # response does not contain any news items content = response.getvalue() self.assertTrue('Sources crawled</strong>: 1' in str(content)) self.assertTrue('News classified</strong>: 1' in str(content)) self.assertTrue('Corpora created</strong>: 0' in str(content)) self.assertTrue('Classification accuracy</strong>: 100%' in str(content))