示例#1
0
    def test_get_cates_order_by_article_count(self):
        insert_amount = 10
        prefix = 'testcate'

        with self.app.test_request_context(), self.db.atomic():
            cates = [dict(id=prefix + str(i), name=prefix + str(i))
                     for i in range(insert_amount)]

            Category.insert_many(cates).execute()

            for index, cate in enumerate(cates):
                articles = [dict(id=str(index) + str(i), title='hello',
                                 text_type='md', source_text='# hello',
                                 category=cate['id'])
                            for i in range((index + 1) * 2)]

                Article.insert_many(articles).execute()

        resp = self.client.get(self.api_url_base + '/categories/',
                               query_string={'order': 'article_count',
                                             'desc': 'true'})
        self.assertResponseRestfulAndSuccess(resp)
        categories = self.get_json(resp)['categories']
        result_counts = [cate['article_count'] for cate in categories]
        expected_counts = sorted(result_counts, reverse=True)
        self.assertListEqual(result_counts, expected_counts)
示例#2
0
    def test_get_articles_without_private_article(self):
        insert_amount = 30
        with self.app.test_request_context(), self.db.atomic():
            prefix = 'testarticle'
            articles = [
                dict(id=prefix + str(i),
                     title=prefix,
                     text_type=prefix,
                     source_text=prefix) for i in range(insert_amount)
            ]
            Article.insert_many(articles).execute()
            prefix = 'testarticle-p'
            articles = [
                dict(id=prefix + str(i),
                     title=prefix,
                     text_type=prefix,
                     source_text=prefix,
                     public=False) for i in range(insert_amount)
            ]
            Article.insert_many(articles).execute()

        resp = self.client.get(self.api_url_base + '/articles/',
                               query_string={'limit': insert_amount * 2})
        self.assertResponseRestful(resp)

        articles = self.get_json(resp)['articles']
        self.assertEqual(len(articles), insert_amount)
示例#3
0
    def test_get_articles_order_by_id_desc(self):
        insert_amount = 30
        with self.app.test_request_context(), self.db.atomic():
            prefix = 'testarticle'
            articles = [
                dict(id=prefix + str(i),
                     title=prefix,
                     text_type=prefix,
                     source_text=prefix) for i in range(insert_amount)
            ]
            Article.insert_many(articles).execute()

        resp = self.client.get(self.api_url_base + '/articles/',
                               query_string={
                                   'limit': insert_amount,
                                   'order': 'id',
                                   'desc': 'true'
                               })
        self.assertResponseRestful(resp)

        expected_ids = sorted([article['id'] for article in articles],
                              reverse=True)
        result_ids = [
            article['id'] for article in self.get_json(resp)['articles']
        ]
        self.assertListEqual(expected_ids, result_ids)
示例#4
0
    def test_get_articles_filter_by_nonexist_category(self):
        from random import choice
        insert_amount_per_cate = 30
        category_amount = 3
        cate_prefix = 'cate'
        article_prefix = 'art'
        with self.app.test_request_context(), self.db.atomic():
            cates = [
                dict(id=cate_prefix + str(i), name=cate_prefix + str(i))
                for i in range(category_amount)
            ]
            Category.insert_many(cates).execute()

            cate_to_insert = choice(cates)['id']

            articles = [
                dict(id=article_prefix + str(i),
                     title=article_prefix,
                     text_type=article_prefix,
                     source_text=article_prefix,
                     category=cate_to_insert)
                for i in range(insert_amount_per_cate)
            ]
            Article.insert_many(articles).execute()

        resp = self.client.get(self.api_url_base + '/articles/',
                               query_string={
                                   'limit': insert_amount_per_cate,
                                   'category': cate_to_insert + '_'
                               })
        self.assertResponseRestful(resp)

        articles = self.get_json(resp)['articles']
        self.assertEqual(len(articles), 0)