diff options
Diffstat (limited to 'qvisqve/authz_attempt_tests.py')
-rw-r--r-- | qvisqve/authz_attempt_tests.py | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/qvisqve/authz_attempt_tests.py b/qvisqve/authz_attempt_tests.py new file mode 100644 index 0000000..d46660d --- /dev/null +++ b/qvisqve/authz_attempt_tests.py @@ -0,0 +1,115 @@ +# Copyright (C) 2018 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +import unittest + +import qvisqve + + +class AuthorizationAttemptTests(unittest.TestCase): + + def test_raises_error_creating_attempt_id_before_all_fields_set(self): + gen = qvisqve.NonceGenerator() + attempt_id = gen.create_nonce() + + aa = qvisqve.AuthorizationAttempt() + subject_id = 'subject_id' + client_id = 'client_id' + state = 'state' + uri = 'https://facade/callback' + scope = 'scope' + + with self.assertRaises(qvisqve.AuthorizationAttemptError): + aa.set_attempt_id(attempt_id) + + aa.set_client_id(client_id) + with self.assertRaises(qvisqve.AuthorizationAttemptError): + aa.set_attempt_id(attempt_id) + + aa.set_state(state) + with self.assertRaises(qvisqve.AuthorizationAttemptError): + aa.set_attempt_id(attempt_id) + + aa.set_redirect_uri(uri) + with self.assertRaises(qvisqve.AuthorizationAttemptError): + aa.set_attempt_id(attempt_id) + + aa.set_scope(scope) + aa.set_subject_id(subject_id) + aa.set_attempt_id(attempt_id) + + self.assertEqual(aa.get_subject_id(), subject_id) + self.assertEqual(aa.get_client_id(), client_id) + self.assertEqual(aa.get_state(), state) + self.assertEqual(aa.get_redirect_uri(), uri) + self.assertEqual(aa.get_scope(), scope) + self.assertEqual(aa.get_attempt_id(), attempt_id) + + def test_has_not_authz_code_initially(self): + aa = qvisqve.AuthorizationAttempt() + self.assertEqual(aa.get_authorization_code(), None) + + def test_sets_authz_code(self): + aa = qvisqve.AuthorizationAttempt() + code = '12765' + aa.set_authorization_code(code) + self.assertEqual(aa.get_authorization_code(), code) + + +class AuthorizationAttemptsTests(unittest.TestCase): + + def setUp(self): + self.urlparams = { + 'scope': 'openid read', + 'client_id': 'client_id', + 'state': 'RANDOM', + 'redirect_uri': 'https://facade', + } + self.aas = qvisqve.AuthorizationAttempts() + + def test_creates_attempt(self): + aa = self.aas.create_attempt(self.urlparams) + attempt_id = aa.get_attempt_id() + self.assertNotEqual(attempt_id, None) + + self.assertEqual(aa.get_scope(), self.urlparams['scope']) + self.assertEqual(aa.get_client_id(), self.urlparams['client_id']) + self.assertEqual(aa.get_state(), self.urlparams['state']) + self.assertEqual(aa.get_redirect_uri(), self.urlparams['redirect_uri']) + + def test_finds_by_id(self): + aa = self.aas.create_attempt(self.urlparams) + attempt_id = aa.get_attempt_id() + self.assertEqual(aa, self.aas.find_by_id(attempt_id)) + + def test_returns_none_when_finding_by_a_non_existent_id(self): + aa = self.aas.create_attempt(self.urlparams) + attempt_id = aa.get_attempt_id() + nonexistent = attempt_id * 2 + self.assertEqual(self.aas.find_by_id(nonexistent), None) + + def test_finds_by_code(self): + aa = self.aas.create_attempt(self.urlparams) + code = 'xxx' + aa.set_authorization_code(code) + self.assertEqual(aa, self.aas.find_by_code(code)) + + def test_returns_none_when_finding_by_a_non_existent_code(self): + aa = self.aas.create_attempt(self.urlparams) + code = 'xxx' + aa.set_authorization_code(code) + nonexistent = 'yyy' + self.assertEqual(self.aas.find_by_code(nonexistent), None) |