Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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()
Exemple #7
0
    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))
Exemple #8
0
    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))