Browse Source

Added tests.

hotfix/merge
Marcos Pereira 7 years ago
parent
commit
b7c0321e4d
  1. 8
      .travis.yml
  2. 26
      keycloak/connection.py
  3. 1
      keycloak/exceptions.py
  4. 153
      keycloak/tests/test_connection.py
  5. 16
      keycloak/urls_patterns.py
  6. 1
      requirements.txt

8
.travis.yml

@ -0,0 +1,8 @@
language: python
python:
- "3.5"
- "pypy"
install:
- pip install -r requirements.txt
script:
python -m unittest discover

26
keycloak/connection.py

@ -1,10 +1,24 @@
"""
"""
import requests
from urllib.parse import urljoin, urlencode
# -*- coding: utf-8 -*-
#
# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from urllib.parse import urljoin
from .exceptions import *
import requests
class ConnectionManager(object):

1
keycloak/exceptions.py

@ -17,6 +17,7 @@
import requests
class KeycloakError(Exception):
def __init__(self, error_message="", response_code=None,
response_body=None):

153
keycloak/tests/test_connection.py

@ -0,0 +1,153 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from httmock import urlmatch, response, HTTMock, all_requests
from keycloak.connection import ConnectionManager
try:
import unittest
except ImportError:
import unittest2 as unittest
class TestConnection(unittest.TestCase):
def setUp(self):
self.__conn = ConnectionManager(
base_url="http://localhost/",
headers={},
timeout=60)
@all_requests
def response_content_success(self, url, request):
headers = {'content-type': 'application/json'}
content = b'response_ok'
return response(200, content, headers, None, 5, request)
def test_raw_get(self):
with HTTMock(self.response_content_success):
resp = self.__conn.raw_get("/known_path")
self.assertEqual(resp.content, b'response_ok')
self.assertEqual(resp.status_code, 200)
def test_raw_post(self):
@urlmatch(path="/known_path", method="post")
def response_post_success(url, request):
headers = {'content-type': 'application/json'}
content = 'response'.encode("utf-8")
return response(201, content, headers, None, 5, request)
with HTTMock(response_post_success):
resp = self.__conn.raw_post("/known_path",
{'field': 'value'})
self.assertEqual(resp.content, b'response')
self.assertEqual(resp.status_code, 201)
def test_raw_put(self):
@urlmatch(netloc="localhost", path="/known_path", method="put")
def response_put_success(url, request):
headers = {'content-type': 'application/json'}
content = 'response'.encode("utf-8")
return response(200, content, headers, None, 5, request)
with HTTMock(response_put_success):
resp = self.__conn.raw_put("/known_path",
{'field': 'value'})
self.assertEqual(resp.content, b'response')
self.assertEqual(resp.status_code, 200)
def test_raw_get_fail(self):
@urlmatch(netloc="localhost", path="/known_path", method="get")
def response_get_fail(url, request):
headers = {'content-type': 'application/json'}
content = "404 page not found".encode("utf-8")
return response(404, content, headers, None, 5, request)
with HTTMock(response_get_fail):
resp = self.__conn.raw_get("/known_path")
self.assertEqual(resp.content, b"404 page not found")
self.assertEqual(resp.status_code, 404)
def test_raw_post_fail(self):
@urlmatch(netloc="localhost", path="/known_path", method="post")
def response_post_fail(url, request):
headers = {'content-type': 'application/json'}
content = str(["Start can't be blank"]).encode("utf-8")
return response(404, content, headers, None, 5, request)
with HTTMock(response_post_fail):
resp = self.__conn.raw_post("/known_path",
{'field': 'value'})
self.assertEqual(resp.content, str(["Start can't be blank"]).encode("utf-8"))
self.assertEqual(resp.status_code, 404)
def test_raw_put_fail(self):
@urlmatch(netloc="localhost", path="/known_path", method="put")
def response_put_fail(url, request):
headers = {'content-type': 'application/json'}
content = str(["Start can't be blank"]).encode("utf-8")
return response(404, content, headers, None, 5, request)
with HTTMock(response_put_fail):
resp = self.__conn.raw_put("/known_path",
{'field': 'value'})
self.assertEqual(resp.content, str(["Start can't be blank"]).encode("utf-8"))
self.assertEqual(resp.status_code, 404)
def test_add_param_headers(self):
self.__conn.add_param_headers("test", "value")
self.assertEqual(self.__conn.get_headers(),
{"test": "value"})
def test_del_param_headers(self):
self.__conn.add_param_headers("test", "value")
self.__conn.del_param_headers("test")
self.assertEqual(self.__conn.get_headers(), {})
def test_clean_param_headers(self):
self.__conn.add_param_headers("test", "value")
self.assertEqual(self.__conn.get_headers(),
{"test": "value"})
self.__conn.clean_headers()
self.assertEqual(self.__conn.get_headers(), {})
def test_exist_param_headers(self):
self.__conn.add_param_headers("test", "value")
self.assertTrue(self.__conn.exist_param_headers("test"))
self.assertFalse(self.__conn.exist_param_headers("test_no"))
def test_get_param_headers(self):
self.__conn.add_param_headers("test", "value")
self.assertTrue(self.__conn.exist_param_headers("test"))
self.assertFalse(self.__conn.exist_param_headers("test_no"))
def test_get_headers(self):
self.__conn.add_param_headers("test", "value")
self.assertEqual(self.__conn.get_headers(),
{"test": "value"})
def test_set_headers(self):
self.__conn.set_headers({"test": "value"})
self.assertTrue(self.__conn.get_headers(), {"test": "value"})
self.assertFalse(self.__conn.exist_param_headers("test_no"))

16
keycloak/urls_patterns.py

@ -1,3 +1,19 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
URL_WELL_KNOWN = "realms/{realm-name}/.well-known/openid-configuration"
URL_AUTH = "realms/{realm-name}/protocol/openid-connect/auth"

1
requirements.txt

@ -1 +1,2 @@
requests==2.18.3
httmock==1.2.5
Loading…
Cancel
Save