import os
import unittest

from . import base

class TestNativeAuth0Test(base.Sample, base.Browser, unittest.TestCase):
    def setUp(self):
        super().setUp()
        self.client_id = os.environ.get("AUTH0_PKCE_CLIENT_ID")
        self.idp_domain = os.environ.get("AUTH0_DOMAIN")

        if not self.client_id or not self.idp_domain:
            self.skipTest("native auth0 is not configured properly")

    def test_login(self):
        # redirect_uri is http://
        os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = "1"

        self.run_sample(
            "native_spa_pkce_auth0.py", {
                "OAUTH_CLIENT_ID": self.client_id,
                "OAUTH_IDP_DOMAIN": self.idp_domain,
            }
        )
        authorize_url = self.wait_for_pattern("https://")
        redirect_uri = self.authorize_auth0(authorize_url, "http://")
        self.write(redirect_uri)
        last_line = self.wait_for_end()

        import ast
        response = ast.literal_eval(last_line)
        self.assertIn("access_token", response)
        self.assertIn("id_token", response)
        self.assertIn("scope", response)
        self.assertIn("openid", response["scope"])
        self.assertIn("expires_in", response)
        self.assertIn("expires_at", response)
        self.assertIn("token_type", response)
        self.assertEqual("Bearer", response["token_type"])