import sys
import unittest
from . import unittestsetup
from .unittestsetup import environment as environment
from oandapyV20 import API

access_token = None
accountID = None
account_cur = None
api = None


class TestOandapyV20(unittest.TestCase):
    """Tests regarding the client."""

    def setUp(self):
        """setup for all tests."""
        global access_token
        global accountID
        global account_cur
        global api
        # self.maxDiff = None
        try:
            accountID, account_cur, access_token = unittestsetup.auth()
            setattr(sys.modules["oandapyV20.oandapyV20"],
                    "TRADING_ENVIRONMENTS",
                    {"practice": {
                     "stream": "https://test.com",
                     "api": "https://test.com",
                     }})
            api = API(environment=environment,
                      access_token=access_token,
                      headers={"Content-Type": "application/json"})
        except Exception as e:
            print("%s" % e)
            exit(0)

    def test__oandapyv20_environment(self):
        """test the exception on a faulty environment."""
        with self.assertRaises(KeyError) as envErr:
            API(environment="faulty",
                access_token=access_token,
                headers={"Content-Type": "application/json"})

        self.assertTrue("Unknown environment" in "{}".format(envErr.exception))

    def test__requests_params(self):
        """request parameters."""
        request_params = {"timeout": 10}
        api = API(environment=environment,
                  access_token=access_token,
                  headers={"Content-Type": "application/json"},
                  request_params=request_params)
        self.assertTrue(api.request_params == request_params)

    def test__requests_exception(self):
        """force a requests exception."""
        from requests.exceptions import RequestException
        import oandapyV20.endpoints.accounts as accounts
        setattr(sys.modules["oandapyV20.oandapyV20"],
                "TRADING_ENVIRONMENTS",
                {"practice": {
                 "stream": "ttps://test.com",
                 "api": "ttps://test.com",
                 }})
        api = API(environment=environment,
                  access_token=access_token,
                  headers={"Content-Type": "application/json"})
        text = "No connection " \
               "adapters were found for 'ttps://test.com/v3/accounts'"
        r = accounts.AccountList()
        with self.assertRaises(RequestException) as oErr:
            api.request(r)

        self.assertEqual("{}".format(oErr.exception), text)


if __name__ == "__main__":

    unittest.main()