def test_base_api_url_allows_trailing_slash(self):
        actual_api_url = settings.API_URL
        # set API_URL and then reload the client to generate
        # a new REQUEST_TOKEN_URL
        settings.API_URL = actual_api_url + "/"
        reload(api_client)

        username = "******"

        # mock the response, return token
        expected_token = generate_tokens()
        expected_user_data = {"pk": 1, "first_name": "My First Name", "last_name": "My last name"}

        responses.add(
            responses.POST,
            urljoin(actual_api_url, "oauth2/token/"),
            body=json.dumps(expected_token),
            status=200,
            content_type="application/json",
        )

        responses.add(
            responses.GET,
            urljoin(actual_api_url, "users/", username),
            body=json.dumps(expected_user_data),
            status=200,
            content_type="application/json",
        )

        # authenticate, should complete without error
        api_client.authenticate(username, "my-password")

        # revert changes
        settings.API_URL = actual_api_url
        reload(api_client)
    def test_success(self):
        username = "******"

        # mock the response, return token
        expected_token = generate_tokens()
        expected_user_data = {"pk": 1, "first_name": "My First Name", "last_name": "My last name"}

        responses.add(
            responses.POST,
            urljoin(settings.API_URL, "oauth2/token"),
            body=json.dumps(expected_token),
            status=200,
            content_type="application/json",
        )

        responses.add(
            responses.GET,
            urljoin(settings.API_URL, "users/", username),
            body=json.dumps(expected_user_data),
            status=200,
            content_type="application/json",
        )

        # authenticate, should return authentication data
        data = api_client.authenticate(username, "my-password")

        self.assertEqual(data["pk"], expected_user_data.get("pk"))
        self.assertDictEqual(data["token"], expected_token)
        self.assertDictEqual(data["user_data"], expected_user_data)
    def test_success(self):
        username = '******'

        # mock the response, return token
        expected_token = generate_tokens()
        expected_user_data = {
            'pk': 1,
            'first_name': 'My First Name',
            'last_name': 'My last name',
        }

        responses.add(
            responses.POST,
            urljoin(settings.API_URL, 'oauth2/token'),
            body=json.dumps(expected_token),
            status=200,
            content_type='application/json'
        )

        responses.add(
            responses.GET,
            urljoin(settings.API_URL, 'users/', username),
            body=json.dumps(expected_user_data),
            status=200,
            content_type='application/json'
        )

        # authenticate, should return authentication data
        data = api_client.authenticate(username, 'my-password')

        self.assertEqual(data['pk'], expected_user_data.get('pk'))
        self.assertDictEqual(data['token'], expected_token)
        self.assertDictEqual(data['user_data'], expected_user_data)
    def test_base_api_url_allows_trailing_slash(self):
        actual_api_url = settings.API_URL
        # set API_URL and then reload the client to generate
        # a new REQUEST_TOKEN_URL
        settings.API_URL = actual_api_url + '/'
        reload(api_client)

        username = '******'

        # mock the response, return token
        expected_token = generate_tokens()
        expected_user_data = {
            'pk': 1,
            'first_name': 'My First Name',
            'last_name': 'My last name',
        }

        responses.add(
            responses.POST,
            urljoin(actual_api_url, 'oauth2/token/'),
            body=json.dumps(expected_token),
            status=200,
            content_type='application/json'
        )

        responses.add(
            responses.GET,
            urljoin(actual_api_url, 'users/', username),
            body=json.dumps(expected_user_data),
            status=200,
            content_type='application/json'
        )

        # authenticate, should complete without error
        api_client.authenticate(username, 'my-password')

        # revert changes
        settings.API_URL = actual_api_url
        reload(api_client)