示例#1
0
class TestYChartsClient(object):
    @patch("ychartspy.client.requests")
    def setup(self, patched_requests):
        self.client = YChartsClient()
        patched_requests.session.assert_called_once_with()
        patched_requests.session().get.assert_called_once_with("http://ycharts.com/login")

    def test_make_request_with_security(self):
        self.client.session.get.return_value = MockResponse()
        self.client._make_request("SPY", "price", "1", None, None, "security")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL, params=_make_security_params("SPY", "price")
        )

    def test_make_request_with_indicator(self):
        self.client.session.get.return_value = MockResponse()
        self.client._make_request("USRSG", "price", "1", None, None, "indicator")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(YCHARTS_DATA_URL, params=[
            ("securities", "type:indicator,id:I:USRSG,include:true"),
            ("calcs", "id:price,include:true"),
            ("zoom", "1")
        ])

    def test_get_security_metric(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric("AAPL", "pe_ratio", "1")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL, params=_make_security_params("AAPL", "pe_ratio")
        )
        eq_(response, RAW_DATA)

    @raises(Exception)
    def test_get_security_metric_raises_exception(self):
        self.client.session.get.return_value = MockResponse()
        self.client.get_security_metric("AAPL", "foo", "1")

    @raises(Exception)
    def test_get_security_metric_raises_exception_for_status(self):
        self.client.session.get.return_value = MockResponse(status_code=400)
        self.client.get_security_metric("AAPL", "pe_ratio", "1")

    def test_get_raw_data(self):
        data = self.client._get_raw_data(MockResponse())
        eq_(data, RAW_DATA)

    def test_get_security_metric_with_start_date(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric("AAPL", "pe_ratio", start_date="01/01/2014")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL,
            params=_make_security_params("AAPL", "pe_ratio", start_date="01/01/2014")
        )
        eq_(response, RAW_DATA)

    def test_get_security_metric_with_end_date(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric("aapl", "pe_ratio", end_date="01/01/2014")
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL,
            params=_make_security_params("aapl", "pe_ratio", end_date="01/01/2014")
        )
        eq_(response, RAW_DATA)

    def test_get_security_metric_with_start_and_end_date(self):
        self.client.session.get.return_value = MockResponse()
        response = self.client.get_security_metric(
            "aapl", "pe_ratio", end_date="01/01/2014", start_date="01/01/2013"
        )
        eq_(self.client.session.get.call_count, 2)
        self.client.session.get.assert_called_with(
            YCHARTS_DATA_URL,
            params=_make_security_params(
                "aapl", "pe_ratio", end_date="01/01/2014", start_date="01/01/2013"
            )
        )
        eq_(response, RAW_DATA)

    @raises(Exception)
    def test_get_security_metric_raises_exception_for_invalid_start_date(self):
        self.client.session.get.return_value = MockResponse()
        self.client.get_security_metric(
            "aapl", "pe_ratio", end_date="01/01/2014", start_date="01-01-2013"
        )

    @raises(Exception)
    def test_get_security_metric_raises_exception_for_invalid_end_date(self):
        self.client.session.get.return_value = MockResponse()
        self.client.get_security_metric(
            "aapl", "pe_ratio", end_date="2014/01/01", start_date="01/01/2013"
        )