Esempio n. 1
0
def get_news():
    """returns JSON with news model"""

    # checks is a specific company / stock symbol has been requested
    if request.json:
        # checks that a stock_symbol was provided with JSON
        stock_symbol = request.json.get('stock_symbol')
        if stock_symbol:
            # request for stock object
            returned_stock_details = Stock.query.get_or_404(stock_symbol)
            if returned_stock_details:
                # get news for stock
                returned_news = News.get_news(stock_symbol)
                # if no news was returned
                if returned_news is False:
                    return jsonify(news='no news obtained')
                
                # create a list with each item is a dictionary which is able to be jsonify'ed
                all_news = [news.serialize_news() for news in returned_news]
                return jsonify(news=all_news)

    # if no stock symbol passed as json
    returned_news = News.get_news()
    if returned_news is False:
        return jsonify(news='no news obtained')
    all_news = [news.serialize_news() for news in returned_news]
    return jsonify(news=all_news)
    def test_get_news_model_no_stock(self):
        """test adding news model"""

        # returns a list of 20 news objects
        articles = News.get_news()

        # tests random selection of articles that data is returned
        self.assertIsNotNone(articles[0].headline)
        self.assertIsNotNone(articles[5].headline)
        self.assertIsNotNone(articles[10].headline)
        self.assertIsNotNone(articles[19].headline)

        self.assertIsNotNone(articles[0].category)
        self.assertIsNotNone(articles[5].category)
        self.assertIsNotNone(articles[10].category)
        self.assertIsNotNone(articles[19].category)

        self.assertIsNotNone(articles[0].summary)
        self.assertIsNotNone(articles[5].summary)
        self.assertIsNotNone(articles[10].summary)
        self.assertIsNotNone(articles[19].summary)

        self.assertIsNotNone(articles[0].id)
        self.assertIsNotNone(articles[5].id)
        self.assertIsNotNone(articles[10].id)
        self.assertIsNotNone(articles[19].id)
    def test_news_repr(self):
        """test news repr"""
        a = News.get_news()
        n = a[0]

        self.assertEqual(
            repr(a[0]),
            f'< News: id={n.id}, category={n.category}, datetime={n.datetime}, headline={n.headline}, image={n.image}, related={n.related}, source={n.source}, summary={n.summary}, url={n.url} >'
        )
    def test_serialize_news(self):
        a = News.get_news()
        n = a[0]

        answer = {
            'category': n.category,
            'datetime': n.datetime,
            'headline': n.headline,
            'image': n.image,
            'related': n.related,
            'source': n.source,
            'summary': n.summary,
            'url': n.url,
        }

        self.assertEqual(n.serialize_news(), answer)
    def test_get_news_model_with_stock(self):
        """test adding news model with stock"""

        # returns a list of 6 news objects
        articles = News.get_news(stock_symbol='AAPL')

        # tests random selection of articles that data is returned
        self.assertIsNotNone(articles[0].headline)
        self.assertIsNotNone(articles[2].headline)
        self.assertIsNotNone(articles[5].headline)

        self.assertIsNotNone(articles[0].category)
        self.assertIsNotNone(articles[2].category)
        self.assertIsNotNone(articles[5].category)

        self.assertIsNotNone(articles[0].summary)
        self.assertIsNotNone(articles[2].summary)
        self.assertIsNotNone(articles[5].summary)

        self.assertIsNotNone(articles[0].id)
        self.assertIsNotNone(articles[2].id)
        self.assertIsNotNone(articles[5].id)