Esempio n. 1
0
class TestArticlesStorage(unittest.TestCase):
    '''
    Tests for Articles module.
    '''
    def setup_test(self):
        '''
        Make ourselves a way to quickly setup articles storage.
        '''

        self.article_0 = Article(0, "Some title 0", "2016-09-22",
                                 "Some body text 0",
                                 ['tag0', 'tag1', 'tag2', 'tag3'])

        self.article_1 = Article(1, "Some title 1", "2016-09-22",
                                 "Some body text 1",
                                 ['tag0', 'tag4', 'tag5', 'tag6'])

        self.article_2 = Article(2, "Some title 2", "2016-09-23",
                                 "Some body text 2",
                                 ['tag0', 'tag1', 'tag2', 'tag3'])

        self.article_3 = Article(3, "Some title 3", "2016-09-23",
                                 "Some body text 3",
                                 ['tag0', 'tag1', 'tag2', 'tag3'])

        self.article_4 = Article(4, "Some title 4", "2016-09-23",
                                 "Some body text 4",
                                 ['tag0', 'tag1', 'tag2', 'tag3'])

        self.articles = Articles()

    def teardown_test(self):
        self.articles = None

    def test_article_add(self):
        '''
        Test function Articles.add() when it successfully adds a new article.
        '''

        # Setup test
        self.setup_test()

        result = self.articles.add(self.article_0)
        compare(self.article_0, result)

        # Teardown test
        self.teardown_test()

    def test_article_add_existing(self):
        '''
        Test function Articles.add() throws exception when it fails to add a new article when article with such id already exists.
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)

        with self.assertRaises(Exception):
            self.articles.add(self.article_0)

        # Teardown test
        self.teardown_test()

    def test_get_all(self):
        '''
        Test function Articles.get_all
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)
        self.articles.add(self.article_1)

        expected = OrderedDict()
        expected[0] = self.article_0
        expected[1] = self.article_1

        result = self.articles.get_all()

        compare(expected, result)

        # Teardown test
        self.teardown_test()

    def test_get(self):
        '''
        Test that fucntion Articles.get() resturns correct item
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)

        result = self.articles.get(0)
        compare(result, self.article_0)

        # Teardown test
        self.teardown_test()

    def test_get_non_existing(self):
        '''
        Test that function Articles.get() throws exception when requested item is not there
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)

        with self.assertRaises(Exception):
            self.articles.get(1)

        # Teardown test
        self.teardown_test()

    def test_get_article_ids(self):
        '''
        Test that function Articles.get_article_ids(date, n) returns correct list of article ids for a given date. 
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)
        self.articles.add(self.article_1)
        self.articles.add(self.article_2)
        self.articles.add(self.article_3)
        self.articles.add(self.article_4)

        result = self.articles.get_article_ids('2016-09-23')
        expected = [2, 3, 4]

        self.assertEqual(result, expected)

        # Teardown test
        self.teardown_test()

    def test_get_count(self):
        '''
        Test that function Articles.get_count(tag_name, date) returns the number of occurrences of the given tag_name across all articles submitted on the given date.
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)
        self.articles.add(self.article_1)
        self.articles.add(self.article_2)
        self.articles.add(self.article_3)
        self.articles.add(self.article_4)

        result = self.articles.get_count('tag0', '2016-09-23')

        self.assertEqual(result, 3)

        # Teardown test
        self.teardown_test()

    def test_get_last_article_ids(self):
        '''
        Test that function Articles.get_last_article_ids(tag_name, date, n) returns the last n article ids that have tag_name on the given date.
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)
        self.articles.add(self.article_1)
        self.articles.add(self.article_2)
        self.articles.add(self.article_3)
        self.articles.add(self.article_4)

        result = self.articles.get_last_article_ids('tag0', '2016-09-23', 2)
        expected = [3, 4]

        self.assertEqual(result, expected)

        # Teardown test
        self.teardown_test()

    def test_get_related_tags(self):
        '''
        Test that function Articles.get_related_tags(tag_name, date) returns the list of tags that are on the articles that the current tag is on for the same day.
        '''

        # Setup test
        self.setup_test()
        self.articles.add(self.article_0)
        self.articles.add(self.article_1)
        self.articles.add(self.article_2)
        self.articles.add(self.article_3)
        self.articles.add(self.article_4)

        result = self.articles.get_related_tags('tag0', '2016-09-22')
        result.sort()
        expected = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5', 'tag6']
        expected.sort()

        self.assertEqual(result, expected)

        # Teardown test
        self.teardown_test()