def test_get_newsitem_title_returns_title_when_news_item_is_not_none(self): news_item = NewsItem() news_item.title = 'foo' corpus = Corpus() corpus.news_item = news_item admin = CorpusAdmin(Corpus, AdminSite()) self.assertEquals('foo', admin.get_news_item_title(corpus))
def run(self, queue_item, classification): if classification == 'pos': corpus = Corpus() corpus.news_item = queue_item corpus.positive = True corpus.active = False corpus.save()
def test_changelist_view_returns_metrics_when_corpora_exist_and_query_is_on_the_added_at_date( self): news_item = NewsItem() news_item.title = 'foo' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = True corpus.added_at = '2018-12-02 21:00:00+00:00' corpus.save() superuser = self.create_superuser('superuser') request = self.mocked_authenticated_request( '/admin/rss/corpusmetric/?added_at__month=12&added_at__year=2018', superuser) response = self.admin.changelist_view(request) expected_metrics = [{'positive': True, 'total': 1}] expected_metrics_total = {'total': 1} self.assertEquals(expected_metrics, response.context_data['corpus_metrics']) self.assertEquals(expected_metrics_total, response.context_data['corpus_metrics_total'])
class CorpusTestCase(TestCase): corpus = None def setUp(self): news_item = NewsItem() self.corpus = Corpus() self.corpus.news_item = news_item def test_get_classification_returns_pos_when_positive_is_true(self): self.corpus.positive = True self.assertEquals('pos', self.corpus.get_classification()) def test_get_classification_returns_neg_when_positive_is_false(self): self.corpus.positive = False self.assertEquals('neg', self.corpus.get_classification()) def test_str_returns_newsitem_title_and_classification(self): self.corpus.positive = True self.corpus.news_item.title = 'foo' self.assertEquals('foo: POS', str(self.corpus))
def test_get_classifier_uses_unique_corpora(self): # mock the shuffle list method classify.shuffle = mock.MagicMock() # regenerate the command class being tested as we mocked an extra module above self.command = classify.Command() # create dummy news items and corpora with same title and classification for index in range(1, 3): news_item = NewsItem() news_item.title = 'foo' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = True corpus.save() # test that two corpora exist corpora = Corpus.objects.all() self.assertEquals(2, len(corpora)) # call the method being tested classifier = self.command.get_classifier() # shuffled the corpora with only one of the identical corpora classify.shuffle.assert_called_once_with([('foo', 'pos')])
def test_get_classifier_returns_naive_bayes_classifier_with_corpora_when_corpora_exist( self): # mock the shuffle list method classify.shuffle = mock.MagicMock() # regenerate the command class being tested as we mocked an extra module above self.command = classify.Command() # create a dummy news item and corpus news_item = NewsItem() news_item.title = 'foo' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = True corpus.save() # call the method being tested classifier = self.command.get_classifier() # shuffled the corpora classify.shuffle.assert_called_once_with([('foo', 'pos')]) # a classifier with corpora was created classify.NaiveBayesClassifier.assert_called_once_with([('foo', 'pos')]) # the method returned a non-empty result self.assertTrue(classifier != None)
def test_changelist_view_returns_metrics_when_accurate_and_inaccurate_newsitems_exist_and_finally_one_of_each_class(self): news_item = NewsItem() news_item.title = 'foo' news_item.score = 1 news_item.added_at = '2018-12-03 21:00:00+00:00' news_item.save() corpus = Corpus() corpus.positive = False corpus.news_item = news_item corpus.save() news_item = NewsItem() news_item.title = 'bar' news_item.score = 1 news_item.added_at = '2018-12-03 22:00:00+00:00' news_item.save() superuser = self.create_superuser('superuser') request = self.mocked_authenticated_request('/admin/rss/newsitemmetric/', superuser) response = self.admin.changelist_view(request) self.assertEquals(2, response.context_data['news_items_count']) self.assertEquals(0, response.context_data['news_items_unclassified']) self.assertEquals(2, response.context_data['classification_initial']['positive']) self.assertEquals(0, response.context_data['classification_initial']['negative']) self.assertEquals(1, response.context_data['classification_supervised']['positive']) self.assertEquals(1, response.context_data['classification_supervised']['negative']) self.assertEquals(0, response.context_data['corpus_count']['positive']) self.assertEquals(1, response.context_data['corpus_count']['negative']) self.assertEquals([{'accuracy': 50, 'added_at': '2018-12-03'}], response.context_data['accuracy'])
def corpus_create_negative(model_admin, request, query_set): for news_item in query_set: corpus = Corpus() corpus.news_item = news_item corpus.positive = False corpus.save() if query_set: enqueue_corpus_creation()
def test_get_accuracy_total_returns_0_percent_when_only_not_accurate_newsitems_exist( self): news_item = NewsItem() news_item.score = 1 news_item.added_at = '2018-11-24 01:00:00+00:00' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = False corpus.save() accuracy = self.newsitem_metric.get_accuracy_total(self.date_range) self.assertEquals(0.0, accuracy)
def test_get_accuracy_returns_0_percent_when_only_not_accurate_newsitems_exist( self): news_item = NewsItem() news_item.score = 1 news_item.added_at = '2018-11-24 01:00:00+00:00' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = False corpus.save() metrics = self.newsitem_metric.get_accuracy(self.date_range) self.assertEquals(1, len(metrics)) self.assertEquals(0, metrics[0]['accuracy']) self.assertEquals('2018-11-24', metrics[0]['added_at'])
def test_get_accuracy_total_uses_two_day_statistics_when_exist(self): news_item = NewsItem() news_item.score = 1 news_item.added_at = '2018-11-24 01:00:00+00:00' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = False corpus.save() news_item = NewsItem() news_item.score = 1 news_item.added_at = '2018-11-25 01:00:00+00:00' news_item.save() accuracy = self.newsitem_metric.get_accuracy_total(self.date_range) self.assertEquals(50.0, accuracy)
def test_get_classifier_uses_corpora_clean_of_stopwords(self): # mock the shuffle list method classify.shuffle = mock.MagicMock() # regenerate the command class being tested as we mocked an extra module above self.command = classify.Command() # create dummy news item (having title that contains stopwords) and corpora news_item = NewsItem() news_item.title = 'when foo then bar' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = True corpus.save() # call the method being tested classifier = self.command.get_classifier() # shuffled the corpora with only one of the identical corpora classify.shuffle.assert_called_once_with([('foo bar', 'pos')])
def test_get_accuracy_returns_two_day_statistics_when_newsitems_for_two_days_exist( self): news_item = NewsItem() news_item.score = 1 news_item.added_at = '2018-11-24 01:00:00+00:00' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = False corpus.save() news_item = NewsItem() news_item.score = 1 news_item.added_at = '2018-11-25 01:00:00+00:00' news_item.save() metrics = self.newsitem_metric.get_accuracy(self.date_range) self.assertEquals(2, len(metrics)) self.assertEquals('2018-11-24', metrics[0]['added_at']) self.assertEquals(0, metrics[0]['accuracy']) self.assertEquals('2018-11-25', metrics[1]['added_at']) self.assertEquals(100, metrics[1]['accuracy'])
def test_changelist_view_returns_negative_metrics_when_only_negative_corpora_exist( self): news_item = NewsItem() news_item.title = 'foo' news_item.save() corpus = Corpus() corpus.news_item = news_item corpus.positive = False corpus.save() superuser = self.create_superuser('superuser') request = self.mocked_authenticated_request('/admin/rss/corpusmetric/', superuser) response = self.admin.changelist_view(request) expected_metrics = [{'positive': False, 'total': 1}] expected_metrics_total = {'total': 1} self.assertEquals(expected_metrics, response.context_data['corpus_metrics']) self.assertEquals(expected_metrics_total, response.context_data['corpus_metrics_total'])
def setUp(self): news_item = NewsItem() self.corpus = Corpus() self.corpus.news_item = news_item