From ad1e8d322e98c50793749e87e56ace9cccc0ef18 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Mon, 21 Nov 2016 18:57:26 +0100 Subject: add test stub for PixelatedAuthSessionWrapper --- service/test/unit/resources/test_auth.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 service/test/unit/resources/test_auth.py (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py new file mode 100644 index 00000000..5f65e199 --- /dev/null +++ b/service/test/unit/resources/test_auth.py @@ -0,0 +1,30 @@ +import unittest + +from mockito import mock + +from test.unit.resources import DummySite +from twisted.web.test.requesthelper import DummyRequest +from pixelated.resources.auth import PixelatedAuthSessionWrapper + + +class TestRootResource(unittest.TestCase): + + def setUp(self): + self.portal = mock() + self.mock_root_resource = mock() + self.anonymous_resource = mock() + self.credential_factories = mock() + + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.mock_root_resource, self.anonymous_resource, self.credential_factories) + self.web = DummySite(self.session_wrapper) + + def test_should_use_login_resource_when_the_user_is_not_logged_in (self): + request = DummyRequest(['']) + self.session_wrapper.getChildWithDefault('/', request) + + def assert_response(_): + self.assertEquals(len(matches), 1) + + d.addCallback(assert_response) + return d + -- cgit v1.2.3 From d5de22115b4d091469f1abad8d8b9ae7651caa3b Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 22 Nov 2016 16:16:20 +0100 Subject: fix first test for auth session wrapper --- service/test/unit/resources/test_auth.py | 44 +++++++++++++---------- service/test/unit/resources/test_root_resource.py | 2 +- 2 files changed, 26 insertions(+), 20 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 5f65e199..ac2529dd 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,30 +1,36 @@ -import unittest - -from mockito import mock - +from mockito import mock, when, any as ANY +from pixelated.resources.auth import PixelatedAuthSessionWrapper +from pixelated.resources.login_resource import LoginResource +from pixelated.resources.root_resource import RootResource from test.unit.resources import DummySite +from twisted.cred.checkers import ANONYMOUS +from twisted.internet.defer import succeed +from twisted.trial import unittest +from twisted.web.resource import IResource from twisted.web.test.requesthelper import DummyRequest -from pixelated.resources.auth import PixelatedAuthSessionWrapper -class TestRootResource(unittest.TestCase): +class TestPixelatedAuthSessionWrapper(unittest.TestCase): def setUp(self): - self.portal = mock() - self.mock_root_resource = mock() - self.anonymous_resource = mock() - self.credential_factories = mock() + self.portal_mock = mock() + self.root_resource_mock = mock() + self.anonymous_resource_mock = mock() + credential_factories_mock = mock() - self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.mock_root_resource, self.anonymous_resource, self.credential_factories) - self.web = DummySite(self.session_wrapper) + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource_mock, self.anonymous_resource_mock, credential_factories_mock) - def test_should_use_login_resource_when_the_user_is_not_logged_in (self): - request = DummyRequest(['']) - self.session_wrapper.getChildWithDefault('/', request) + def test_should_use_login_resource_when_the_user_is_not_logged_in(self): + request = DummyRequest([]) + request.prepath = [''] + request.path = '/' + when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, ANONYMOUS, lambda: None))) - def assert_response(_): - self.assertEquals(len(matches), 1) + deferred_resource = self.session_wrapper.getChildWithDefault('/', request) + d = deferred_resource.d - d.addCallback(assert_response) - return d + def assert_anonymous_resource(resource): + self.assertIs(resource, self.anonymous_resource_mock) + d.addCallback(assert_anonymous_resource) + return d diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 4ff11ce8..7a7b2005 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -1,4 +1,3 @@ -import unittest import re from mock import MagicMock, patch @@ -7,6 +6,7 @@ from mockito import mock, when, any as ANY from pixelated.application import UserAgentMode from pixelated.resources.features_resource import FeaturesResource from test.unit.resources import DummySite +from twisted.trial import unittest from twisted.web.test.requesthelper import DummyRequest from pixelated.resources.root_resource import RootResource, MODE_STARTUP, MODE_RUNNING -- cgit v1.2.3 From 68c2667fc568055c7bf6a676e1f12e61154fbab6 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 22 Nov 2016 16:20:53 +0100 Subject: add test for logged-in resource --- service/test/unit/resources/test_auth.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index ac2529dd..adff1083 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -14,19 +14,20 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): def setUp(self): self.portal_mock = mock() + self.user_uuid_mock = mock() self.root_resource_mock = mock() self.anonymous_resource_mock = mock() credential_factories_mock = mock() self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource_mock, self.anonymous_resource_mock, credential_factories_mock) + self.request = DummyRequest([]) + self.request.prepath = [''] + self.request.path = '/' - def test_should_use_login_resource_when_the_user_is_not_logged_in(self): - request = DummyRequest([]) - request.prepath = [''] - request.path = '/' + def test_should_proxy_to_login_resource_when_the_user_is_not_logged_in(self): when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, ANONYMOUS, lambda: None))) - deferred_resource = self.session_wrapper.getChildWithDefault('/', request) + deferred_resource = self.session_wrapper.getChildWithDefault('/', self.request) d = deferred_resource.d def assert_anonymous_resource(resource): @@ -34,3 +35,15 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): d.addCallback(assert_anonymous_resource) return d + + def test_should_proxy_to_root_resource_when_the_user_is_logged_in(self): + when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, self.user_uuid_mock, lambda: None))) + + deferred_resource = self.session_wrapper.getChildWithDefault('/', self.request) + d = deferred_resource.d + + def assert_root_resource(resource): + self.assertIs(resource, self.root_resource_mock) + + d.addCallback(assert_root_resource) + return d -- cgit v1.2.3 From 59644fafb501422295d430912d8711a7d11195b5 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 10:02:38 +0100 Subject: fix archive resource unit test --- service/test/unit/resources/test_archive_resource.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_archive_resource.py b/service/test/unit/resources/test_archive_resource.py index 28078222..186078a5 100644 --- a/service/test/unit/resources/test_archive_resource.py +++ b/service/test/unit/resources/test_archive_resource.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest import json from mockito import mock, when, verify from test.unit.resources import DummySite @@ -15,11 +15,16 @@ class TestArchiveResource(unittest.TestCase): def test_render_POST_should_archive_mails(self): request = DummyRequest(['/mails/archive']) request.method = 'POST' + idents = ['1', '2'] content = mock() when(content).read().thenReturn(json.dumps({'idents': ['1', '2']})) - when(self.mail_service).archive_mail('1').thenReturn(defer.Deferred()) - when(self.mail_service).archive_mail('2').thenReturn(defer.Deferred()) + d1 = defer.Deferred() + d1.callback(None) + when(self.mail_service).archive_mail('1').thenReturn(d1) + d2 = defer.Deferred() + d2.callback(None) + when(self.mail_service).archive_mail('2').thenReturn(d2) request.content = content d = self.web.get(request) -- cgit v1.2.3 From 20df0b4236b9939776bf15d955d36501566cb486 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 11:12:26 +0100 Subject: readability --- service/test/unit/resources/test_archive_resource.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_archive_resource.py b/service/test/unit/resources/test_archive_resource.py index 186078a5..1876f897 100644 --- a/service/test/unit/resources/test_archive_resource.py +++ b/service/test/unit/resources/test_archive_resource.py @@ -19,12 +19,8 @@ class TestArchiveResource(unittest.TestCase): content = mock() when(content).read().thenReturn(json.dumps({'idents': ['1', '2']})) - d1 = defer.Deferred() - d1.callback(None) - when(self.mail_service).archive_mail('1').thenReturn(d1) - d2 = defer.Deferred() - d2.callback(None) - when(self.mail_service).archive_mail('2').thenReturn(d2) + when(self.mail_service).archive_mail('1').thenReturn(defer.succeed(None)) + when(self.mail_service).archive_mail('2').thenReturn(defer.succeed(None)) request.content = content d = self.web.get(request) -- cgit v1.2.3 From 819d3b0c974fe1b937adbdc5205d7810b88faa4e Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 11:13:13 +0100 Subject: fix mails resource unit test --- service/test/unit/resources/test_mails_resource.py | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_mails_resource.py b/service/test/unit/resources/test_mails_resource.py index 2d9cb33c..bdd15657 100644 --- a/service/test/unit/resources/test_mails_resource.py +++ b/service/test/unit/resources/test_mails_resource.py @@ -14,7 +14,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from mock import patch from mockito import mock, when, verify, any as ANY @@ -39,17 +39,16 @@ class TestMailsResource(unittest.TestCase): @patch('leap.common.events.register') def test_render_GET_should_unicode_mails_search_query(self, mock_register): - request = DummyRequest(['/mails']) + request = DummyRequest([]) non_unicode_search_term = 'coração' request.addArg('q', non_unicode_search_term) request.addArg('w', 25) request.addArg('p', 1) unicodified_search_term = u'coração' - when(self.mail_service).mails(unicodified_search_term, 25, 1).thenReturn(defer.Deferred()) + when(self.mail_service).mails(unicodified_search_term, 25, 1).thenReturn(defer.succeed(([], 0))) mails_resource = MailsResource(self.services_factory) - mails_resource.isLeaf = True web = DummySite(mails_resource) d = web.get(request) @@ -61,15 +60,13 @@ class TestMailsResource(unittest.TestCase): @patch('leap.common.events.register') def test_render_PUT_should_store_draft_with_attachments(self, mock_register): - request = DummyRequest(['/mails']) + request = DummyRequest([]) request.method = 'PUT' - content = mock() - when(content).read().thenReturn('{"attachments": [{"ident": "some fake attachment id"}]}') - when(self.mail_service).attachment('some fake attachment id').thenReturn(defer.Deferred()) - request.content = content + request.content = mock() + when(request.content).read().thenReturn('{"attachments": [{"ident": "some fake attachment id"}]}') + when(self.mail_service).attachment('some fake attachment id').thenReturn(defer.succeed({'content': mock()})) mails_resource = MailsResource(self.services_factory) - mails_resource.isLeaf = True web = DummySite(mails_resource) d = web.get(request) @@ -81,19 +78,17 @@ class TestMailsResource(unittest.TestCase): @patch('leap.common.events.register') def test_render_POST_should_send_email_with_attachments(self, mock_register): - request = DummyRequest(['/mails']) + request = DummyRequest([]) request.method = 'POST' - content = mock() - when(content).read().thenReturn('{"attachments": [{"ident": "some fake attachment id"}]}') + request.content = mock() + when(request.content).read().thenReturn('{"attachments": [{"ident": "some fake attachment id"}]}') when(self.mail_service).attachment('some fake attachment id').thenReturn(defer.succeed({"content": "some content"})) as_dictable = mock() when(as_dictable).as_dict().thenReturn({}) when(self.mail_service).send_mail({"attachments": [{"ident": "some fake attachment id", "raw": "some content"}]})\ .thenReturn(defer.succeed(as_dictable)) - request.content = content mails_resource = MailsResource(self.services_factory) - mails_resource.isLeaf = True web = DummySite(mails_resource) d = web.get(request) -- cgit v1.2.3 From ced565121604f9834f83ec485538bb2e2a0c9232 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 11:31:22 +0100 Subject: replace stdlib's unittest with trials's unittest for all unittest --- service/test/unit/adapter/mailstore/test_body_parser.py | 2 +- service/test/unit/adapter/search/test_search.py | 2 +- service/test/unit/adapter/test_contacts.py | 2 +- service/test/unit/adapter/test_draft_service.py | 2 +- service/test/unit/adapter/test_status.py | 2 +- service/test/unit/adapter/test_tag.py | 2 +- service/test/unit/bitmask_libraries/test_abstract_leap.py | 2 +- service/test/unit/bitmask_libraries/test_certs.py | 2 +- service/test/unit/bitmask_libraries/test_smtp_client_certificate.py | 2 +- service/test/unit/config/test_register.py | 2 +- service/test/unit/config/test_services.py | 2 +- service/test/unit/config/test_sessions.py | 1 + service/test/unit/config/test_site.py | 2 +- service/test/unit/maintenance/test_commands.py | 2 +- service/test/unit/resources/test_attachments_resource.py | 2 +- service/test/unit/resources/test_helpers.py | 2 +- service/test/unit/resources/test_sandbox_resource.py | 2 +- service/test/unit/resources/test_user_settings_resource.py | 2 +- service/test/unit/support/mail_generator_test.py | 2 +- service/test/unit/support/test_encrypted_file_storage.py | 2 +- service/test/unit/support/test_functional.py | 2 +- service/test/unit/support/test_markov.py | 2 +- service/test/unit/support/test_replier.py | 2 +- service/test/unit/test_application.py | 2 +- service/test/unit/test_welcome_mail.py | 2 +- 25 files changed, 25 insertions(+), 24 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/adapter/mailstore/test_body_parser.py b/service/test/unit/adapter/mailstore/test_body_parser.py index 155b326c..cff0b09e 100644 --- a/service/test/unit/adapter/mailstore/test_body_parser.py +++ b/service/test/unit/adapter/mailstore/test_body_parser.py @@ -14,7 +14,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from mock import patch from pixelated.adapter.mailstore.body_parser import BodyParser diff --git a/service/test/unit/adapter/search/test_search.py b/service/test/unit/adapter/search/test_search.py index be37257c..1465961d 100644 --- a/service/test/unit/adapter/search/test_search.py +++ b/service/test/unit/adapter/search/test_search.py @@ -16,7 +16,7 @@ # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from pixelated.adapter.mailstore.leap_mailstore import LeapMail from pixelated.adapter.search import SearchEngine from tempdir import TempDir diff --git a/service/test/unit/adapter/test_contacts.py b/service/test/unit/adapter/test_contacts.py index 3510faf5..83383755 100644 --- a/service/test/unit/adapter/test_contacts.py +++ b/service/test/unit/adapter/test_contacts.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from pixelated.adapter.search.contacts import address_duplication_filter from pixelated.adapter.search.contacts import extract_mail_address diff --git a/service/test/unit/adapter/test_draft_service.py b/service/test/unit/adapter/test_draft_service.py index c2516013..e18589eb 100644 --- a/service/test/unit/adapter/test_draft_service.py +++ b/service/test/unit/adapter/test_draft_service.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest from twisted.internet import defer from pixelated.adapter.mailstore.leap_mailstore import LeapMail diff --git a/service/test/unit/adapter/test_status.py b/service/test/unit/adapter/test_status.py index 5cd0fa1e..4624dcee 100644 --- a/service/test/unit/adapter/test_status.py +++ b/service/test/unit/adapter/test_status.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from pixelated.adapter.model.status import Status diff --git a/service/test/unit/adapter/test_tag.py b/service/test/unit/adapter/test_tag.py index a4fa819e..e6d2771d 100644 --- a/service/test/unit/adapter/test_tag.py +++ b/service/test/unit/adapter/test_tag.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from pixelated.adapter.model.tag import Tag diff --git a/service/test/unit/bitmask_libraries/test_abstract_leap.py b/service/test/unit/bitmask_libraries/test_abstract_leap.py index 237a1152..2fed2a4c 100644 --- a/service/test/unit/bitmask_libraries/test_abstract_leap.py +++ b/service/test/unit/bitmask_libraries/test_abstract_leap.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . import tempfile -import unittest +from twisted.trial import unittest from uuid import uuid4 import os diff --git a/service/test/unit/bitmask_libraries/test_certs.py b/service/test/unit/bitmask_libraries/test_certs.py index 9885759e..300830be 100644 --- a/service/test/unit/bitmask_libraries/test_certs.py +++ b/service/test/unit/bitmask_libraries/test_certs.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest from pixelated.bitmask_libraries.certs import LeapCertificate from pixelated.config import leap_config diff --git a/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py b/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py index 241dcbae..1ed08653 100644 --- a/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py +++ b/service/test/unit/bitmask_libraries/test_smtp_client_certificate.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . import os -import unittest +from twisted.trial import unittest import tempdir import leap.common.certs as certs from mockito import mock, unstub, when, any as ANY diff --git a/service/test/unit/config/test_register.py b/service/test/unit/config/test_register.py index ca1e3a01..1d7918c4 100644 --- a/service/test/unit/config/test_register.py +++ b/service/test/unit/config/test_register.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest from mock import patch, Mock from pixelated.register import validate_username, validate_password, _set_provider, register diff --git a/service/test/unit/config/test_services.py b/service/test/unit/config/test_services.py index ed221261..6361a3da 100644 --- a/service/test/unit/config/test_services.py +++ b/service/test/unit/config/test_services.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from mock import Mock, ANY, patch from mockito import mock, verify diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py index 7ac6f8d1..5c5cf9be 100644 --- a/service/test/unit/config/test_sessions.py +++ b/service/test/unit/config/test_sessions.py @@ -53,6 +53,7 @@ class SessionTest(AbstractLeapTest): session.close() mail_fetcher_mock.stopService.assert_called_once() + @defer.inlineCallbacks def test_that_sync_defers_to_soledad(self): with patch('pixelated.config.sessions.reactor.callFromThread', new=_execute_func) as _: with patch('pixelated.config.sessions.LeapSession._create_incoming_mail_fetcher') as mail_fetcher_mock: diff --git a/service/test/unit/config/test_site.py b/service/test/unit/config/test_site.py index b8b23ef0..6911b4a5 100644 --- a/service/test/unit/config/test_site.py +++ b/service/test/unit/config/test_site.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest from mockito import mock from pixelated.config.site import PixelatedSite from twisted.protocols.basic import LineReceiver diff --git a/service/test/unit/maintenance/test_commands.py b/service/test/unit/maintenance/test_commands.py index 812c1bc2..0a8ffe53 100644 --- a/service/test/unit/maintenance/test_commands.py +++ b/service/test/unit/maintenance/test_commands.py @@ -13,7 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest import email from pixelated.maintenance import delete_all_mails, load_mails diff --git a/service/test/unit/resources/test_attachments_resource.py b/service/test/unit/resources/test_attachments_resource.py index 06ae765f..15f38406 100644 --- a/service/test/unit/resources/test_attachments_resource.py +++ b/service/test/unit/resources/test_attachments_resource.py @@ -1,5 +1,5 @@ import json -import unittest +from twisted.trial import unittest from mock import patch, MagicMock from mockito import mock, when, verify, any as ANY diff --git a/service/test/unit/resources/test_helpers.py b/service/test/unit/resources/test_helpers.py index a17ce755..25a52da2 100644 --- a/service/test/unit/resources/test_helpers.py +++ b/service/test/unit/resources/test_helpers.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest import re from pixelated.resources import respond_json, respond_json_deferred diff --git a/service/test/unit/resources/test_sandbox_resource.py b/service/test/unit/resources/test_sandbox_resource.py index 98b88b2d..4f263af1 100644 --- a/service/test/unit/resources/test_sandbox_resource.py +++ b/service/test/unit/resources/test_sandbox_resource.py @@ -1,5 +1,5 @@ import os -import unittest +from twisted.trial import unittest from twisted.internet import defer from twisted.web.test.requesthelper import DummyRequest diff --git a/service/test/unit/resources/test_user_settings_resource.py b/service/test/unit/resources/test_user_settings_resource.py index 30a3c4cd..e9748e72 100644 --- a/service/test/unit/resources/test_user_settings_resource.py +++ b/service/test/unit/resources/test_user_settings_resource.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest import json import ast diff --git a/service/test/unit/support/mail_generator_test.py b/service/test/unit/support/mail_generator_test.py index 9d604378..dd6da522 100644 --- a/service/test/unit/support/mail_generator_test.py +++ b/service/test/unit/support/mail_generator_test.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . from mailbox import mbox -import unittest +from twisted.trial import unittest import pkg_resources import random from mock import patch diff --git a/service/test/unit/support/test_encrypted_file_storage.py b/service/test/unit/support/test_encrypted_file_storage.py index 69b82f3d..8083430e 100644 --- a/service/test/unit/support/test_encrypted_file_storage.py +++ b/service/test/unit/support/test_encrypted_file_storage.py @@ -15,7 +15,7 @@ # along with Pixelated. If not, see . import os import shutil -import unittest +from twisted.trial import unittest from pixelated.support.encrypted_file_storage import EncryptedFileStorage diff --git a/service/test/unit/support/test_functional.py b/service/test/unit/support/test_functional.py index ad3cb16c..0b117032 100644 --- a/service/test/unit/support/test_functional.py +++ b/service/test/unit/support/test_functional.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Affero General Public License -import unittest +from twisted.trial import unittest from pixelated.support.functional import to_unicode diff --git a/service/test/unit/support/test_markov.py b/service/test/unit/support/test_markov.py index f0b0277d..911cef30 100644 --- a/service/test/unit/support/test_markov.py +++ b/service/test/unit/support/test_markov.py @@ -15,7 +15,7 @@ # along with Pixelated. If not, see . -import unittest +from twisted.trial import unittest from pixelated.support.markov import MarkovGenerator import random diff --git a/service/test/unit/support/test_replier.py b/service/test/unit/support/test_replier.py index 5e1c234a..ef9b321c 100644 --- a/service/test/unit/support/test_replier.py +++ b/service/test/unit/support/test_replier.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest from pixelated.support import replier diff --git a/service/test/unit/test_application.py b/service/test/unit/test_application.py index 80d9ec14..67c044c2 100644 --- a/service/test/unit/test_application.py +++ b/service/test/unit/test_application.py @@ -1,4 +1,4 @@ -import unittest +from twisted.trial import unittest from leap.common.events import catalog as events from mock import patch, MagicMock, ANY diff --git a/service/test/unit/test_welcome_mail.py b/service/test/unit/test_welcome_mail.py index 6462dceb..7eb65903 100644 --- a/service/test/unit/test_welcome_mail.py +++ b/service/test/unit/test_welcome_mail.py @@ -16,7 +16,7 @@ import os import re -import unittest +from twisted.trial import unittest from mockito import verify, mock from mockito.matchers import Matcher from email import message_from_file -- cgit v1.2.3 From 8640658dca9c2a37f01922a127749af7eec7501e Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 16:52:05 +0100 Subject: remove an unnecessary patch --- service/test/unit/config/test_sessions.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py index 5c5cf9be..abae46d8 100644 --- a/service/test/unit/config/test_sessions.py +++ b/service/test/unit/config/test_sessions.py @@ -55,11 +55,10 @@ class SessionTest(AbstractLeapTest): @defer.inlineCallbacks def test_that_sync_defers_to_soledad(self): - with patch('pixelated.config.sessions.reactor.callFromThread', new=_execute_func) as _: - with patch('pixelated.config.sessions.LeapSession._create_incoming_mail_fetcher') as mail_fetcher_mock: - session = self._create_session() - yield session.sync() - self.soledad_session.sync.assert_called_once() + with patch('pixelated.config.sessions.LeapSession._create_incoming_mail_fetcher') as mail_fetcher_mock: + session = self._create_session() + yield session.sync() + self.soledad_session.sync.assert_called_once() def test_session_registers_to_generated_keys(self): email = 'someone@somedomain.tld' @@ -159,4 +158,6 @@ class SessionTest(AbstractLeapTest): def _execute_func(func): + print 'in _execute_func, before executing', func func() + print 'in _execute_func, after executing', func -- cgit v1.2.3 From 3d9d3a407de9e179d4f7be055a24c02fcf9bb418 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 17:40:24 +0100 Subject: remove another unnecessary patch --- service/test/unit/config/test_sessions.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py index abae46d8..b2aa2939 100644 --- a/service/test/unit/config/test_sessions.py +++ b/service/test/unit/config/test_sessions.py @@ -55,10 +55,9 @@ class SessionTest(AbstractLeapTest): @defer.inlineCallbacks def test_that_sync_defers_to_soledad(self): - with patch('pixelated.config.sessions.LeapSession._create_incoming_mail_fetcher') as mail_fetcher_mock: - session = self._create_session() - yield session.sync() - self.soledad_session.sync.assert_called_once() + session = self._create_session() + yield session.sync() + self.soledad_session.sync.assert_called_once() def test_session_registers_to_generated_keys(self): email = 'someone@somedomain.tld' @@ -158,6 +157,4 @@ class SessionTest(AbstractLeapTest): def _execute_func(func): - print 'in _execute_func, before executing', func func() - print 'in _execute_func, after executing', func -- cgit v1.2.3 From 2884195e96728c0432a8e8d0d2f747ae2baefd06 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 23 Nov 2016 17:59:31 +0100 Subject: mock out event registration for failing test in SnapCI --- service/test/unit/config/test_sessions.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'service/test/unit') diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py index b2aa2939..98e5c69e 100644 --- a/service/test/unit/config/test_sessions.py +++ b/service/test/unit/config/test_sessions.py @@ -53,8 +53,9 @@ class SessionTest(AbstractLeapTest): session.close() mail_fetcher_mock.stopService.assert_called_once() + @patch('pixelated.config.sessions.register') @defer.inlineCallbacks - def test_that_sync_defers_to_soledad(self): + def test_that_sync_defers_to_soledad(self, *unused): session = self._create_session() yield session.sync() self.soledad_session.sync.assert_called_once() -- cgit v1.2.3 From c39921ef6ba7ed299a125b530b770b0e1ec16203 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 24 Nov 2016 10:56:59 +0100 Subject: add test for unauthorized resource --- service/test/unit/resources/test_auth.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index adff1083..80f1ebb0 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -3,9 +3,12 @@ from pixelated.resources.auth import PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource from test.unit.resources import DummySite +from twisted.cred import error from twisted.cred.checkers import ANONYMOUS -from twisted.internet.defer import succeed +from twisted.internet.defer import succeed, fail +from twisted.python import failure from twisted.trial import unittest +from twisted.web._auth.wrapper import UnauthorizedResource from twisted.web.resource import IResource from twisted.web.test.requesthelper import DummyRequest @@ -47,3 +50,15 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): d.addCallback(assert_root_resource) return d + + def test_should_proxy_to_unauthorized_resource_when_login_fails(self): + when(self.portal_mock).login(ANY(), None, IResource).thenReturn(fail(failure.Failure(error.UnhandledCredentials('dummy message')))) + + deferred_resource = self.session_wrapper.getChildWithDefault('/', self.request) + d = deferred_resource.d + + def assert_unauthorized_resource(resource): + self.assertIsInstance(resource, UnauthorizedResource) + + d.addCallback(assert_unauthorized_resource) + return d -- cgit v1.2.3 From b00b7ff5d828099e8f0190fee44ad1daf2054717 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 24 Nov 2016 16:41:49 +0100 Subject: add public root resource to serve static files --- service/test/unit/resources/test_root_resource.py | 44 ++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 7a7b2005..082f2b22 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -1,14 +1,42 @@ +import os import re from mock import MagicMock, patch from mockito import mock, when, any as ANY +import pixelated from pixelated.application import UserAgentMode from pixelated.resources.features_resource import FeaturesResource from test.unit.resources import DummySite +from twisted.cred.checkers import ANONYMOUS +from twisted.internet.defer import succeed from twisted.trial import unittest +from twisted.web.resource import IResource +from twisted.web.static import File from twisted.web.test.requesthelper import DummyRequest -from pixelated.resources.root_resource import RootResource, MODE_STARTUP, MODE_RUNNING +from pixelated.resources.root_resource import PublicRootResource, RootResource, MODE_STARTUP, MODE_RUNNING + + +class TestPublicRootResource(unittest.TestCase): + + def setUp(self): + self.portal_mock = mock() + assets_path = os.path.abspath( + os.path.join(os.path.abspath(pixelated.__file__), '..', '..', '..', 'web-ui', 'public') + ) + services_factory = mock() + self.public_root_resource = PublicRootResource(services_factory, assets_path=assets_path) + self.web = DummySite(self.public_root_resource) + self.request = DummyRequest(['assets', 'dummy.json']) + + def test_assets_should_be_available(self): + d = self.web.get(self.request) + + def assert_response(_): + self.assertEqual(200, self.request.responseCode) + + d.addCallback(assert_response) + return d class TestRootResource(unittest.TestCase): @@ -103,6 +131,20 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d + def test_GET_should_return_404_for_non_existing_resource(self): + request = DummyRequest(['/non-existing-child']) + request.method = 'GET' + + request.getCookie = MagicMock(return_value='stubbed csrf token') + + d = self.web.get(request) + + def assert_not_found(_): + self.assertEqual(404, request.responseCode) + + d.addCallback(assert_not_found) + return d + def test_should_404_non_existing_resource_with_valid_csrf(self): request = DummyRequest(['/non-existing-child']) request.method = 'POST' -- cgit v1.2.3 From 7802cf70c3b2ec3c14fd735dc211b00914c731cb Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 24 Nov 2016 17:01:15 +0100 Subject: add login resource as child of public root resource --- service/test/unit/resources/test_root_resource.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 082f2b22..9b3042a8 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -25,15 +25,25 @@ class TestPublicRootResource(unittest.TestCase): os.path.join(os.path.abspath(pixelated.__file__), '..', '..', '..', 'web-ui', 'public') ) services_factory = mock() - self.public_root_resource = PublicRootResource(services_factory, assets_path=assets_path) + self.public_root_resource = PublicRootResource(services_factory, assets_path=assets_path, provider=mock()) self.web = DummySite(self.public_root_resource) - self.request = DummyRequest(['assets', 'dummy.json']) def test_assets_should_be_available(self): - d = self.web.get(self.request) + request = DummyRequest(['assets', 'dummy.json']) + d = self.web.get(request) + + def assert_response(_): + self.assertEqual(200, request.responseCode) + + d.addCallback(assert_response) + return d + + def test_login_should_be_available(self): + request = DummyRequest(['login']) + d = self.web.get(request) def assert_response(_): - self.assertEqual(200, self.request.responseCode) + self.assertEqual(200, request.responseCode) d.addCallback(assert_response) return d -- cgit v1.2.3 From e313d7c8880192ab3261cdd8cb263f5eef28d40a Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Fri, 25 Nov 2016 15:50:50 +0100 Subject: make credentialsFactories parameter to auth session wrapper optional --- service/test/unit/resources/test_auth.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 80f1ebb0..10650e53 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -20,9 +20,8 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): self.user_uuid_mock = mock() self.root_resource_mock = mock() self.anonymous_resource_mock = mock() - credential_factories_mock = mock() - self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource_mock, self.anonymous_resource_mock, credential_factories_mock) + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource_mock, self.anonymous_resource_mock) self.request = DummyRequest([]) self.request.prepath = [''] self.request.path = '/' -- cgit v1.2.3 From 8dbd0210911475ec48d23e741de192a09e23f101 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Fri, 25 Nov 2016 15:52:52 +0100 Subject: pass url *fragment* as path argument to getChildWithDefault --- service/test/unit/resources/test_auth.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 10650e53..05d07130 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -29,7 +29,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): def test_should_proxy_to_login_resource_when_the_user_is_not_logged_in(self): when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, ANONYMOUS, lambda: None))) - deferred_resource = self.session_wrapper.getChildWithDefault('/', self.request) + deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) d = deferred_resource.d def assert_anonymous_resource(resource): @@ -41,7 +41,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): def test_should_proxy_to_root_resource_when_the_user_is_logged_in(self): when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, self.user_uuid_mock, lambda: None))) - deferred_resource = self.session_wrapper.getChildWithDefault('/', self.request) + deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) d = deferred_resource.d def assert_root_resource(resource): @@ -53,7 +53,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): def test_should_proxy_to_unauthorized_resource_when_login_fails(self): when(self.portal_mock).login(ANY(), None, IResource).thenReturn(fail(failure.Failure(error.UnhandledCredentials('dummy message')))) - deferred_resource = self.session_wrapper.getChildWithDefault('/', self.request) + deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) d = deferred_resource.d def assert_unauthorized_resource(resource): -- cgit v1.2.3 From b97e47d564cc4bbd6b0f0ac2cccc0fa46490c764 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Fri, 25 Nov 2016 15:53:53 +0100 Subject: don't mock the root resource in auth wrapper test --- service/test/unit/resources/test_auth.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 05d07130..2b85a3cf 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -18,10 +18,11 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): def setUp(self): self.portal_mock = mock() self.user_uuid_mock = mock() - self.root_resource_mock = mock() + services_factory = mock() + self.root_resource = RootResource(services_factory) self.anonymous_resource_mock = mock() - self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource_mock, self.anonymous_resource_mock) + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource, self.anonymous_resource_mock) self.request = DummyRequest([]) self.request.prepath = [''] self.request.path = '/' @@ -45,7 +46,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): d = deferred_resource.d def assert_root_resource(resource): - self.assertIs(resource, self.root_resource_mock) + self.assertIs(resource, self.root_resource) d.addCallback(assert_root_resource) return d -- cgit v1.2.3 From 77cc41204e3cd8144187ad8cf50fffb3d00080f1 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Mon, 28 Nov 2016 12:00:06 +0100 Subject: split inbox resource out of root resource --- service/test/unit/resources/test_root_resource.py | 107 ++++++++++++++-------- 1 file changed, 69 insertions(+), 38 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 9b3042a8..2c74d7b9 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -14,39 +14,7 @@ from twisted.trial import unittest from twisted.web.resource import IResource from twisted.web.static import File from twisted.web.test.requesthelper import DummyRequest -from pixelated.resources.root_resource import PublicRootResource, RootResource, MODE_STARTUP, MODE_RUNNING - - -class TestPublicRootResource(unittest.TestCase): - - def setUp(self): - self.portal_mock = mock() - assets_path = os.path.abspath( - os.path.join(os.path.abspath(pixelated.__file__), '..', '..', '..', 'web-ui', 'public') - ) - services_factory = mock() - self.public_root_resource = PublicRootResource(services_factory, assets_path=assets_path, provider=mock()) - self.web = DummySite(self.public_root_resource) - - def test_assets_should_be_available(self): - request = DummyRequest(['assets', 'dummy.json']) - d = self.web.get(request) - - def assert_response(_): - self.assertEqual(200, request.responseCode) - - d.addCallback(assert_response) - return d - - def test_login_should_be_available(self): - request = DummyRequest(['login']) - d = self.web.get(request) - - def assert_response(_): - self.assertEqual(200, request.responseCode) - - d.addCallback(assert_response) - return d +from pixelated.resources.root_resource import InboxResource, RootResource, MODE_STARTUP, MODE_RUNNING class TestRootResource(unittest.TestCase): @@ -63,12 +31,13 @@ class TestRootResource(unittest.TestCase): self.mail_service.account_email = self.MAIL_ADDRESS root_resource = RootResource(self.services_factory) - root_resource._html_template = "$account_email" - root_resource._mode = root_resource self.web = DummySite(root_resource) self.root_resource = root_resource def test_render_GET_should_template_account_email(self): + self.root_resource._inbox_resource._html_template = "$account_email" + self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['']) request.addCookie = lambda key, value: 'stubbed' @@ -126,6 +95,8 @@ class TestRootResource(unittest.TestCase): request.requestHeaders.setRawHeaders('x-xsrf-token', [csrf_token]) def test_should_unauthorize_child_resource_ajax_requests_when_csrf_mismatch(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['/child']) request.method = 'POST' self._mock_ajax_csrf(request, 'stubbed csrf token') @@ -141,10 +112,25 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d + def test_GET_should_return_503_for_uninitialized_resource(self): + request = DummyRequest(['/sandbox/']) + request.method = 'GET' + + request.getCookie = MagicMock(return_value='stubbed csrf token') + + d = self.web.get(request) + + def assert_unavailable(_): + self.assertEqual(503, request.responseCode) + + d.addCallback(assert_unavailable) + return d + def test_GET_should_return_404_for_non_existing_resource(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['/non-existing-child']) request.method = 'GET' - request.getCookie = MagicMock(return_value='stubbed csrf token') d = self.web.get(request) @@ -156,10 +142,11 @@ class TestRootResource(unittest.TestCase): return d def test_should_404_non_existing_resource_with_valid_csrf(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['/non-existing-child']) request.method = 'POST' self._mock_ajax_csrf(request, 'stubbed csrf token') - request.getCookie = MagicMock(return_value='stubbed csrf token') d = self.web.get(request) @@ -175,7 +162,7 @@ class TestRootResource(unittest.TestCase): request = DummyRequest(['features']) request.getCookie = MagicMock(return_value='irrelevant -- stubbed') - self.root_resource._child_resources.add('features', FeaturesResource()) + self.root_resource.putChild('features', FeaturesResource()) self.root_resource._mode = MODE_RUNNING d = self.web.get(request) @@ -187,6 +174,8 @@ class TestRootResource(unittest.TestCase): return d def test_should_unauthorize_child_resource_non_ajax_POST_requests_when_csrf_input_mismatch(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['mails']) request.method = 'POST' request.addArg('csrftoken', 'some csrf token') @@ -204,3 +193,45 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d + + def test_assets_should_be_publicly_available(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + + request = DummyRequest(['assets', 'dummy.json']) + d = self.web.get(request) + + def assert_response(_): + self.assertEqual(200, request.responseCode) + + d.addCallback(assert_response) + return d + + def test_login_should_be_publicly_available(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + + request = DummyRequest(['login']) + d = self.web.get(request) + + def assert_response(_): + self.assertEqual(200, request.responseCode) + + d.addCallback(assert_response) + return d + + def test_root_should_be_handled_by_inbox_resource(self): + request = DummyRequest([]) + request.prepath = [''] + request.path = '/' + # TODO: setup mocked portal + + resource = self.root_resource.getChildWithDefault(request.prepath[-1], request) + self.assertIsInstance(resource, InboxResource) + + def test_inbox_should_not_be_public(self): + request = DummyRequest([]) + request.prepath = [''] + request.path = '/' + # TODO: setup mocked portal + + resource = self.root_resource.getChildWithDefault(request.prepath[-1], request) + self.assertIsInstance(resource, InboxResource) -- cgit v1.2.3 From b50db20c0a6603a3ea5f0b704baee1983fc34c1d Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 29 Nov 2016 10:16:38 +0100 Subject: return resource instead of username/avatarId as avatar --- service/test/unit/resources/test_auth.py | 43 ++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 2b85a3cf..6bd0338a 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,34 +1,55 @@ from mockito import mock, when, any as ANY -from pixelated.resources.auth import PixelatedAuthSessionWrapper +from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource from test.unit.resources import DummySite from twisted.cred import error -from twisted.cred.checkers import ANONYMOUS +from twisted.cred.checkers import ANONYMOUS, AllowAnonymousAccess +from twisted.cred.portal import Portal from twisted.internet.defer import succeed, fail from twisted.python import failure from twisted.trial import unittest from twisted.web._auth.wrapper import UnauthorizedResource -from twisted.web.resource import IResource +from twisted.web.resource import IResource, getChildForRequest from twisted.web.test.requesthelper import DummyRequest +class TestPixelatedRealm(unittest.TestCase): + + def setUp(self): + self.authenticated_root_resource = mock() + self.public_root_resource = mock() + self.realm = PixelatedRealm(self.authenticated_root_resource, self.public_root_resource) + + def test_anonymous_user_gets_anonymous_resource(self): + interface, avatar, logout_handler = self.realm.requestAvatar(ANONYMOUS, None, IResource) + self.assertEqual(interface, IResource) + self.assertIs(avatar, self.public_root_resource) + + def test_authenticated_user_gets_root_resource(self): + interface, avatar, logout_handler = self.realm.requestAvatar('username', None, IResource) + self.assertEqual(interface, IResource) + self.assertIs(avatar, self.authenticated_root_resource) + + class TestPixelatedAuthSessionWrapper(unittest.TestCase): def setUp(self): - self.portal_mock = mock() - self.user_uuid_mock = mock() + self.realm_mock = mock() services_factory = mock() + session_checker = SessionChecker(services_factory) + self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) + self.user_uuid_mock = mock() self.root_resource = RootResource(services_factory) self.anonymous_resource_mock = mock() - self.session_wrapper = PixelatedAuthSessionWrapper(self.portal_mock, self.root_resource, self.anonymous_resource_mock) + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource_mock) self.request = DummyRequest([]) self.request.prepath = [''] self.request.path = '/' def test_should_proxy_to_login_resource_when_the_user_is_not_logged_in(self): - when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, ANONYMOUS, lambda: None))) + when(self.realm_mock).requestAvatar(ANONYMOUS, None, IResource).thenReturn((IResource, self.anonymous_resource_mock, lambda: None)) deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) d = deferred_resource.d @@ -40,7 +61,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): return d def test_should_proxy_to_root_resource_when_the_user_is_logged_in(self): - when(self.portal_mock).login(ANY(), None, IResource).thenReturn(succeed((IResource, self.user_uuid_mock, lambda: None))) + when(self.realm_mock).requestAvatar(ANY(), None, IResource).thenReturn((IResource, self.root_resource, lambda: None)) deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) d = deferred_resource.d @@ -51,14 +72,14 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): d.addCallback(assert_root_resource) return d - def test_should_proxy_to_unauthorized_resource_when_login_fails(self): - when(self.portal_mock).login(ANY(), None, IResource).thenReturn(fail(failure.Failure(error.UnhandledCredentials('dummy message')))) + def test_should_X_when_unauthenticated_user_requests_non_public_resource(self): + when(self.realm_mock).requestAvatar(ANONYMOUS, None, IResource).thenReturn((IResource, self.anonymous_resource_mock, lambda: None)) deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) d = deferred_resource.d def assert_unauthorized_resource(resource): - self.assertIsInstance(resource, UnauthorizedResource) + self.assertIs(resource, self.anonymous_resource_mock) d.addCallback(assert_unauthorized_resource) return d -- cgit v1.2.3 From 3f97f5c444ea4caa01111f3902871975430d9d97 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 29 Nov 2016 17:34:41 +0100 Subject: add inbox resource --- service/test/unit/resources/test_inbox_resource.py | 72 ++++++++++++++++++++++ service/test/unit/resources/test_root_resource.py | 19 ++---- 2 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 service/test/unit/resources/test_inbox_resource.py (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_inbox_resource.py b/service/test/unit/resources/test_inbox_resource.py new file mode 100644 index 00000000..03fe6f1a --- /dev/null +++ b/service/test/unit/resources/test_inbox_resource.py @@ -0,0 +1,72 @@ +import re + +from mock import MagicMock, patch +from mockito import mock, when, any as ANY + +from pixelated.application import UserAgentMode +from pixelated.resources.features_resource import FeaturesResource +from test.unit.resources import DummySite +from twisted.trial import unittest +from twisted.web.test.requesthelper import DummyRequest +from pixelated.resources.inbox_resource import InboxResource, MODE_STARTUP, MODE_RUNNING + + +class TestInboxResource(unittest.TestCase): + MAIL_ADDRESS = 'test_user@pixelated-project.org' + + def setUp(self): + mail_service = mock() + mail_service.account_email = self.MAIL_ADDRESS + + services = mock() + services.mail_service = mail_service + + services_factory = mock() + services_factory.mode = mock() + when(services_factory).services(ANY()).thenReturn(services) + + self.inbox_resource = InboxResource(services_factory) + self.web = DummySite(self.inbox_resource) + + def test_render_GET_should_template_account_email(self): + self.inbox_resource._html_template = "$account_email" + self.inbox_resource.initialize() + + request = DummyRequest(['']) + request.addCookie = lambda key, value: 'stubbed' + + d = self.web.get(request) + + def assert_response(_): + expected = "{0}".format(self.MAIL_ADDRESS) + matches = re.findall(expected, request.written[0]) + self.assertEquals(len(matches), 1) + + d.addCallback(assert_response) + return d + + def _test_should_renew_xsrf_cookie(self): + request = DummyRequest(['']) + request.addCookie = MagicMock() + generated_csrf_token = 'csrf_token' + mock_sha = MagicMock() + mock_sha.hexdigest = MagicMock(return_value=generated_csrf_token) + + with patch('hashlib.sha256', return_value=mock_sha): + d = self.web.get(request) + + def assert_csrf_cookie(_): + request.addCookie.assert_called_once_with('XSRF-TOKEN', generated_csrf_token) + + d.addCallback(assert_csrf_cookie) + return d + + # TODO should this be here or just in the root resource test? + def test_should_renew_xsrf_cookie_on_startup_mode(self): + self.inbox_resource._mode = MODE_STARTUP + self._test_should_renew_xsrf_cookie() + + # TODO should this be here or just in the root resource test? + def test_should_renew_xsrf_cookie_on_running_mode(self): + self.inbox_resource._mode = MODE_RUNNING + self._test_should_renew_xsrf_cookie() diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 2c74d7b9..079793b5 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -11,7 +11,7 @@ from test.unit.resources import DummySite from twisted.cred.checkers import ANONYMOUS from twisted.internet.defer import succeed from twisted.trial import unittest -from twisted.web.resource import IResource +from twisted.web.resource import IResource, getChildForRequest from twisted.web.static import File from twisted.web.test.requesthelper import DummyRequest from pixelated.resources.root_resource import InboxResource, RootResource, MODE_STARTUP, MODE_RUNNING @@ -34,22 +34,11 @@ class TestRootResource(unittest.TestCase): self.web = DummySite(root_resource) self.root_resource = root_resource - def test_render_GET_should_template_account_email(self): - self.root_resource._inbox_resource._html_template = "$account_email" - self.root_resource.initialize(provider=mock(), authenticator=mock()) - + def test_root_should_delegate_to_inbox(self): request = DummyRequest(['']) request.addCookie = lambda key, value: 'stubbed' - - d = self.web.get(request) - - def assert_response(_): - expected = "{0}".format(self.MAIL_ADDRESS) - matches = re.findall(expected, request.written[0]) - self.assertEquals(len(matches), 1) - - d.addCallback(assert_response) - return d + child_resource = getChildForRequest(self.root_resource, request) + self.assertIsInstance(child_resource, InboxResource) def _test_should_renew_xsrf_cookie(self): request = DummyRequest(['']) -- cgit v1.2.3 From 798858c79c0b10565f42365c6cdbf7d0549d0a2e Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 29 Nov 2016 17:40:15 +0100 Subject: assert login url is delegated correctly --- service/test/unit/resources/test_root_resource.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 079793b5..8d658d7e 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -7,6 +7,7 @@ from mockito import mock, when, any as ANY import pixelated from pixelated.application import UserAgentMode from pixelated.resources.features_resource import FeaturesResource +from pixelated.resources.login_resource import LoginResource from test.unit.resources import DummySite from twisted.cred.checkers import ANONYMOUS from twisted.internet.defer import succeed @@ -14,7 +15,11 @@ from twisted.trial import unittest from twisted.web.resource import IResource, getChildForRequest from twisted.web.static import File from twisted.web.test.requesthelper import DummyRequest -from pixelated.resources.root_resource import InboxResource, RootResource, MODE_STARTUP, MODE_RUNNING +from pixelated.resources.root_resource import InboxResource, PublicRootResource, RootResource, MODE_STARTUP, MODE_RUNNING + + +class TestPublicRootResource(unittest.TestCase): + pass class TestRootResource(unittest.TestCase): @@ -34,12 +39,19 @@ class TestRootResource(unittest.TestCase): self.web = DummySite(root_resource) self.root_resource = root_resource - def test_root_should_delegate_to_inbox(self): + def test_root_url_should_delegate_to_inbox(self): request = DummyRequest(['']) request.addCookie = lambda key, value: 'stubbed' child_resource = getChildForRequest(self.root_resource, request) self.assertIsInstance(child_resource, InboxResource) + def test_login_url_should_delegate_to_login_resource(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['login']) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.root_resource, request) + self.assertIsInstance(child_resource, LoginResource) + def _test_should_renew_xsrf_cookie(self): request = DummyRequest(['']) request.addCookie = MagicMock() -- cgit v1.2.3 From 9b5d5a797c9f407183d1b9a6a2aea552a06c5ea1 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 29 Nov 2016 17:47:07 +0100 Subject: make login resource part of the public root resource --- service/test/unit/resources/test_root_resource.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 8d658d7e..06eaf1ad 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -19,7 +19,17 @@ from pixelated.resources.root_resource import InboxResource, PublicRootResource, class TestPublicRootResource(unittest.TestCase): - pass + + def setUp(self): + self.public_root_resource = PublicRootResource(mock()) + self.web = DummySite(self.public_root_resource) + + def test_login_url_should_delegate_to_login_resource(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['login']) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.public_root_resource, request) + self.assertIsInstance(child_resource, LoginResource) class TestRootResource(unittest.TestCase): @@ -35,9 +45,8 @@ class TestRootResource(unittest.TestCase): when(self.services_factory).services(ANY()).thenReturn(self.services) self.mail_service.account_email = self.MAIL_ADDRESS - root_resource = RootResource(self.services_factory) - self.web = DummySite(root_resource) - self.root_resource = root_resource + self.root_resource = RootResource(self.services_factory) + self.web = DummySite(self.root_resource) def test_root_url_should_delegate_to_inbox(self): request = DummyRequest(['']) -- cgit v1.2.3 From 6d82cddcb9a6f217dcb341e248124f00e613b48c Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 29 Nov 2016 17:59:58 +0100 Subject: test root resource delegation on a bit higher level --- service/test/unit/resources/test_auth.py | 46 +++++++++++--------------------- 1 file changed, 16 insertions(+), 30 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 6bd0338a..793069dd 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,7 +1,7 @@ from mockito import mock, when, any as ANY from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource -from pixelated.resources.root_resource import RootResource +from pixelated.resources.root_resource import PublicRootResource, RootResource from test.unit.resources import DummySite from twisted.cred import error from twisted.cred.checkers import ANONYMOUS, AllowAnonymousAccess @@ -41,45 +41,31 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) self.user_uuid_mock = mock() self.root_resource = RootResource(services_factory) - self.anonymous_resource_mock = mock() + self.anonymous_resource = PublicRootResource(services_factory) - self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource_mock) + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource) self.request = DummyRequest([]) self.request.prepath = [''] self.request.path = '/' - def test_should_proxy_to_login_resource_when_the_user_is_not_logged_in(self): - when(self.realm_mock).requestAvatar(ANONYMOUS, None, IResource).thenReturn((IResource, self.anonymous_resource_mock, lambda: None)) - - deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) + def test_root_url_should_delegate_to_public_root_resource_for_unauthenticated_user(self): + when(self.realm_mock).requestAvatar(ANONYMOUS, None, IResource).thenReturn((IResource, self.anonymous_resource, lambda: None)) + request = DummyRequest(['']) + deferred_resource = getChildForRequest(self.session_wrapper, request) d = deferred_resource.d - def assert_anonymous_resource(resource): - self.assertIs(resource, self.anonymous_resource_mock) + def assert_public_root_resource(resource): + self.assertIsInstance(resource, PublicRootResource) - d.addCallback(assert_anonymous_resource) - return d + return d.addCallback(assert_public_root_resource) - def test_should_proxy_to_root_resource_when_the_user_is_logged_in(self): + def test_root_url_should_delegate_to_protected_root_resource_for_authenticated_user(self): when(self.realm_mock).requestAvatar(ANY(), None, IResource).thenReturn((IResource, self.root_resource, lambda: None)) - - deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) - d = deferred_resource.d - - def assert_root_resource(resource): - self.assertIs(resource, self.root_resource) - - d.addCallback(assert_root_resource) - return d - - def test_should_X_when_unauthenticated_user_requests_non_public_resource(self): - when(self.realm_mock).requestAvatar(ANONYMOUS, None, IResource).thenReturn((IResource, self.anonymous_resource_mock, lambda: None)) - - deferred_resource = self.session_wrapper.getChildWithDefault('', self.request) + request = DummyRequest(['']) + deferred_resource = getChildForRequest(self.session_wrapper, request) d = deferred_resource.d - def assert_unauthorized_resource(resource): - self.assertIs(resource, self.anonymous_resource_mock) + def assert_protected_root_resource(resource): + self.assertIsInstance(resource, RootResource) - d.addCallback(assert_unauthorized_resource) - return d + return d.addCallback(assert_protected_root_resource) -- cgit v1.2.3 From b785705033d70725eb979f54bb3c248c82d648af Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 29 Nov 2016 18:17:16 +0100 Subject: mock out usage or ZMQ --- service/test/unit/resources/test_root_resource.py | 25 +++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 06eaf1ad..0db3bdbe 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -54,7 +54,8 @@ class TestRootResource(unittest.TestCase): child_resource = getChildForRequest(self.root_resource, request) self.assertIsInstance(child_resource, InboxResource) - def test_login_url_should_delegate_to_login_resource(self): + @patch('pixelated.config.sessions.register') + def test_login_url_should_delegate_to_login_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) request.addCookie = lambda key, value: 'stubbed' @@ -104,7 +105,8 @@ class TestRootResource(unittest.TestCase): request.requestHeaders.setRawHeaders('x-requested-with', ['XMLHttpRequest']) request.requestHeaders.setRawHeaders('x-xsrf-token', [csrf_token]) - def test_should_unauthorize_child_resource_ajax_requests_when_csrf_mismatch(self): + @patch('pixelated.config.sessions.register') + def test_should_unauthorize_child_resource_ajax_requests_when_csrf_mismatch(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['/child']) @@ -136,10 +138,11 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unavailable) return d - def test_GET_should_return_404_for_non_existing_resource(self): + @patch('pixelated.config.sessions.register') + def test_GET_should_return_404_for_non_existing_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) - request = DummyRequest(['/non-existing-child']) + request = DummyRequest(['non-existing-child']) request.method = 'GET' request.getCookie = MagicMock(return_value='stubbed csrf token') @@ -151,10 +154,11 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_not_found) return d - def test_should_404_non_existing_resource_with_valid_csrf(self): + @patch('pixelated.config.sessions.register') + def test_should_404_non_existing_resource_with_valid_csrf(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) - request = DummyRequest(['/non-existing-child']) + request = DummyRequest(['non-existing-child']) request.method = 'POST' self._mock_ajax_csrf(request, 'stubbed csrf token') request.getCookie = MagicMock(return_value='stubbed csrf token') @@ -183,7 +187,8 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d - def test_should_unauthorize_child_resource_non_ajax_POST_requests_when_csrf_input_mismatch(self): + @patch('pixelated.config.sessions.register') + def test_should_unauthorize_child_resource_non_ajax_POST_requests_when_csrf_input_mismatch(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['mails']) @@ -204,7 +209,8 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d - def test_assets_should_be_publicly_available(self): + @patch('pixelated.config.sessions.register') + def test_assets_should_be_publicly_available(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['assets', 'dummy.json']) @@ -216,7 +222,8 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_response) return d - def test_login_should_be_publicly_available(self): + @patch('pixelated.config.sessions.register') + def test_login_should_be_publicly_available(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) -- cgit v1.2.3 From 54600b0454809eeed12b01960a1d0ecaeb0d86a9 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 30 Nov 2016 10:01:20 +0100 Subject: mock out usage of ZMQ in the right place --- service/test/unit/resources/test_root_resource.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 0db3bdbe..443a00e6 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -54,7 +54,7 @@ class TestRootResource(unittest.TestCase): child_resource = getChildForRequest(self.root_resource, request) self.assertIsInstance(child_resource, InboxResource) - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_login_url_should_delegate_to_login_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) @@ -105,7 +105,7 @@ class TestRootResource(unittest.TestCase): request.requestHeaders.setRawHeaders('x-requested-with', ['XMLHttpRequest']) request.requestHeaders.setRawHeaders('x-xsrf-token', [csrf_token]) - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_should_unauthorize_child_resource_ajax_requests_when_csrf_mismatch(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) @@ -138,7 +138,7 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unavailable) return d - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_GET_should_return_404_for_non_existing_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) @@ -154,7 +154,7 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_not_found) return d - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_should_404_non_existing_resource_with_valid_csrf(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) @@ -187,7 +187,7 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_should_unauthorize_child_resource_non_ajax_POST_requests_when_csrf_input_mismatch(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) @@ -209,7 +209,7 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_assets_should_be_publicly_available(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) @@ -222,7 +222,7 @@ class TestRootResource(unittest.TestCase): d.addCallback(assert_response) return d - @patch('pixelated.config.sessions.register') + @patch('pixelated.resources.mails_resource.events.register') def test_login_should_be_publicly_available(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) -- cgit v1.2.3 From c10c6fb76f06e0cfc6f061a1bd9df14d689fb176 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 30 Nov 2016 10:29:27 +0100 Subject: redirect to login from root url when not logged in --- service/test/unit/resources/test_root_resource.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 443a00e6..1543f650 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -31,6 +31,19 @@ class TestPublicRootResource(unittest.TestCase): child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, LoginResource) + def test_root_url_should_redirect_to_login_resource(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['']) + request.addCookie = lambda key, value: 'stubbed' + d = self.web.get(request) + + def assert_redirect(request): + self.assertEqual(302, request.responseCode) + self.assertEqual(["login"], request.responseHeaders.getRawHeaders('location', [None])) + + d.addCallback(assert_redirect) + return d + class TestRootResource(unittest.TestCase): MAIL_ADDRESS = 'test_user@pixelated-project.org' -- cgit v1.2.3 From 41f0886aeac43387dc8b4d54b1ca69f21e2ec2a8 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 30 Nov 2016 15:00:58 +0100 Subject: remove PublicRootResource and use a flag on RootResource instead --- service/test/unit/resources/test_auth.py | 6 +-- service/test/unit/resources/test_root_resource.py | 63 ++++++++++++++++++++++- 2 files changed, 64 insertions(+), 5 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 793069dd..f4012b1b 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,7 +1,7 @@ from mockito import mock, when, any as ANY from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource -from pixelated.resources.root_resource import PublicRootResource, RootResource +from pixelated.resources.root_resource import RootResource from test.unit.resources import DummySite from twisted.cred import error from twisted.cred.checkers import ANONYMOUS, AllowAnonymousAccess @@ -41,7 +41,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) self.user_uuid_mock = mock() self.root_resource = RootResource(services_factory) - self.anonymous_resource = PublicRootResource(services_factory) + self.anonymous_resource = RootResource(services_factory, public=True) self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource) self.request = DummyRequest([]) @@ -55,7 +55,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): d = deferred_resource.d def assert_public_root_resource(resource): - self.assertIsInstance(resource, PublicRootResource) + self.assertIs(resource, self.anonymous_resource) return d.addCallback(assert_public_root_resource) diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 1543f650..b674103c 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -6,6 +6,7 @@ from mockito import mock, when, any as ANY import pixelated from pixelated.application import UserAgentMode +from pixelated.resources import UnAuthorizedResource from pixelated.resources.features_resource import FeaturesResource from pixelated.resources.login_resource import LoginResource from test.unit.resources import DummySite @@ -15,15 +16,55 @@ from twisted.trial import unittest from twisted.web.resource import IResource, getChildForRequest from twisted.web.static import File from twisted.web.test.requesthelper import DummyRequest -from pixelated.resources.root_resource import InboxResource, PublicRootResource, RootResource, MODE_STARTUP, MODE_RUNNING +from pixelated.resources.root_resource import InboxResource, RootResource, MODE_STARTUP, MODE_RUNNING class TestPublicRootResource(unittest.TestCase): def setUp(self): - self.public_root_resource = PublicRootResource(mock()) + self.public_root_resource = RootResource(mock(), public=True) self.web = DummySite(self.public_root_resource) + def test_put_child_public_adds_resource(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + url_fragment, resource_mock = 'some-url-fragment', mock() + self.public_root_resource.putChildPublic(url_fragment, resource_mock) + request = DummyRequest([url_fragment]) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.public_root_resource, request) + self.assertIs(child_resource, resource_mock) + + def test_put_child_protected_adds_unauthorized(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + url_fragment, resource_mock = 'some-url-fragment', mock() + self.public_root_resource.putChildProtected(url_fragment, resource_mock) + request = DummyRequest([url_fragment]) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.public_root_resource, request) + self.assertIsInstance(child_resource, UnAuthorizedResource) + + def test_put_child_adds_unauthorized(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + url_fragment, resource_mock = 'some-url-fragment', mock() + self.public_root_resource.putChild(url_fragment, resource_mock) + request = DummyRequest([url_fragment]) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.public_root_resource, request) + self.assertIsInstance(child_resource, UnAuthorizedResource) + + def test_private_resource_returns_401(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['mails']) + request.addCookie = lambda key, value: 'stubbed' + d = self.web.get(request) + + def assert_unauthorized(request): + self.assertEqual(401, request.responseCode) + self.assertEqual("Unauthorized!", request.written[0]) + + d.addCallback(assert_unauthorized) + return d + def test_login_url_should_delegate_to_login_resource(self): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) @@ -61,6 +102,24 @@ class TestRootResource(unittest.TestCase): self.root_resource = RootResource(self.services_factory) self.web = DummySite(self.root_resource) + def test_put_child_protected_adds_resource(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + url_fragment, resource_mock = 'some-url-fragment', mock() + self.root_resource.putChildProtected(url_fragment, resource_mock) + request = DummyRequest([url_fragment]) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.root_resource, request) + self.assertIs(child_resource, resource_mock) + + def test_put_child_adds_resource(self): + self.root_resource.initialize(provider=mock(), authenticator=mock()) + url_fragment, resource_mock = 'some-url-fragment', mock() + self.root_resource.putChild(url_fragment, resource_mock) + request = DummyRequest([url_fragment]) + request.addCookie = lambda key, value: 'stubbed' + child_resource = getChildForRequest(self.root_resource, request) + self.assertIs(child_resource, resource_mock) + def test_root_url_should_delegate_to_inbox(self): request = DummyRequest(['']) request.addCookie = lambda key, value: 'stubbed' -- cgit v1.2.3 From 13378255c02b97184132881599ed47826963f54a Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 30 Nov 2016 16:11:27 +0100 Subject: add csrf token to login form --- service/test/unit/resources/test_login_resource.py | 13 +++++++++++ service/test/unit/resources/test_session.py | 25 ++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 service/test/unit/resources/test_session.py (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_login_resource.py b/service/test/unit/resources/test_login_resource.py index d3d7ba64..696b0c46 100644 --- a/service/test/unit/resources/test_login_resource.py +++ b/service/test/unit/resources/test_login_resource.py @@ -157,6 +157,19 @@ class TestLoginResource(unittest.TestCase): d.addCallback(assert_default_invalid_banner_disclaimer_rendered) return d + def test_form_should_contain_csrftoken_input(self): + request = DummyRequest(['']) + + d = self.web.get(request) + + def assert_form_has_csrftoken_input(_): + input_username = 'name="csrftoken"' + written_response = ''.join(request.written) + self.assertIn(input_username, written_response) + + d.addCallback(assert_form_has_csrftoken_input) + return d + class TestLoginPOST(unittest.TestCase): def setUp(self): diff --git a/service/test/unit/resources/test_session.py b/service/test/unit/resources/test_session.py new file mode 100644 index 00000000..fe47483d --- /dev/null +++ b/service/test/unit/resources/test_session.py @@ -0,0 +1,25 @@ +from twisted.trial import unittest +from mockito import mock +from pixelated.resources.session import CSRF_TOKEN_LENGTH, PixelatedSession + + +class TestPixelatedSession(unittest.TestCase): + + def setUp(self): + self.pixelated_session = PixelatedSession(mock()) + + def test_csrf_token_should_be_configured_length(self): + self.assertEqual(len(self.pixelated_session.get_csrf_token()), 2 * CSRF_TOKEN_LENGTH) + + def test_csrf_token_should_be_hexdigested(self): + self.assertTrue(all(c in '0123456789abcdef' for c in self.pixelated_session.get_csrf_token())) + + def test_csrf_token_should_always_be_the_same_for_one_session(self): + first_csrf_token = self.pixelated_session.get_csrf_token() + second_csrf_token = self.pixelated_session.get_csrf_token() + self.assertEqual(first_csrf_token, second_csrf_token) + + def test_csrf_token_should_be_different_for_different_session(self): + first_csrf_token = self.pixelated_session.get_csrf_token() + second_csrf_token = PixelatedSession(mock()).get_csrf_token() + self.assertNotEqual(first_csrf_token, second_csrf_token) -- cgit v1.2.3 From 770b439c8495c3a0b16550c2f04740f31646d66b Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 1 Dec 2016 10:36:29 +0100 Subject: WIP: add csrf token to every request --- service/test/unit/resources/test_inbox_resource.py | 26 ------------ service/test/unit/resources/test_root_resource.py | 48 ++++++++++++++++------ 2 files changed, 36 insertions(+), 38 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_inbox_resource.py b/service/test/unit/resources/test_inbox_resource.py index 03fe6f1a..9af355ca 100644 --- a/service/test/unit/resources/test_inbox_resource.py +++ b/service/test/unit/resources/test_inbox_resource.py @@ -44,29 +44,3 @@ class TestInboxResource(unittest.TestCase): d.addCallback(assert_response) return d - - def _test_should_renew_xsrf_cookie(self): - request = DummyRequest(['']) - request.addCookie = MagicMock() - generated_csrf_token = 'csrf_token' - mock_sha = MagicMock() - mock_sha.hexdigest = MagicMock(return_value=generated_csrf_token) - - with patch('hashlib.sha256', return_value=mock_sha): - d = self.web.get(request) - - def assert_csrf_cookie(_): - request.addCookie.assert_called_once_with('XSRF-TOKEN', generated_csrf_token) - - d.addCallback(assert_csrf_cookie) - return d - - # TODO should this be here or just in the root resource test? - def test_should_renew_xsrf_cookie_on_startup_mode(self): - self.inbox_resource._mode = MODE_STARTUP - self._test_should_renew_xsrf_cookie() - - # TODO should this be here or just in the root resource test? - def test_should_renew_xsrf_cookie_on_running_mode(self): - self.inbox_resource._mode = MODE_RUNNING - self._test_should_renew_xsrf_cookie() diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index b674103c..2dfe3e5a 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -6,7 +6,7 @@ from mockito import mock, when, any as ANY import pixelated from pixelated.application import UserAgentMode -from pixelated.resources import UnAuthorizedResource +from pixelated.resources import IPixelatedSession, UnAuthorizedResource from pixelated.resources.features_resource import FeaturesResource from pixelated.resources.login_resource import LoginResource from test.unit.resources import DummySite @@ -30,7 +30,7 @@ class TestPublicRootResource(unittest.TestCase): url_fragment, resource_mock = 'some-url-fragment', mock() self.public_root_resource.putChildPublic(url_fragment, resource_mock) request = DummyRequest([url_fragment]) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.public_root_resource, request) self.assertIs(child_resource, resource_mock) @@ -39,7 +39,7 @@ class TestPublicRootResource(unittest.TestCase): url_fragment, resource_mock = 'some-url-fragment', mock() self.public_root_resource.putChildProtected(url_fragment, resource_mock) request = DummyRequest([url_fragment]) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, UnAuthorizedResource) @@ -48,14 +48,14 @@ class TestPublicRootResource(unittest.TestCase): url_fragment, resource_mock = 'some-url-fragment', mock() self.public_root_resource.putChild(url_fragment, resource_mock) request = DummyRequest([url_fragment]) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, UnAuthorizedResource) def test_private_resource_returns_401(self): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['mails']) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') d = self.web.get(request) def assert_unauthorized(request): @@ -68,14 +68,14 @@ class TestPublicRootResource(unittest.TestCase): def test_login_url_should_delegate_to_login_resource(self): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, LoginResource) def test_root_url_should_redirect_to_login_resource(self): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['']) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') d = self.web.get(request) def assert_redirect(request): @@ -107,7 +107,7 @@ class TestRootResource(unittest.TestCase): url_fragment, resource_mock = 'some-url-fragment', mock() self.root_resource.putChildProtected(url_fragment, resource_mock) request = DummyRequest([url_fragment]) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.root_resource, request) self.assertIs(child_resource, resource_mock) @@ -116,13 +116,13 @@ class TestRootResource(unittest.TestCase): url_fragment, resource_mock = 'some-url-fragment', mock() self.root_resource.putChild(url_fragment, resource_mock) request = DummyRequest([url_fragment]) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.root_resource, request) self.assertIs(child_resource, resource_mock) def test_root_url_should_delegate_to_inbox(self): request = DummyRequest(['']) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.root_resource, request) self.assertIsInstance(child_resource, InboxResource) @@ -130,13 +130,13 @@ class TestRootResource(unittest.TestCase): def test_login_url_should_delegate_to_login_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) - request.addCookie = lambda key, value: 'stubbed' + request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.root_resource, request) self.assertIsInstance(child_resource, LoginResource) def _test_should_renew_xsrf_cookie(self): request = DummyRequest(['']) - request.addCookie = MagicMock() + request.addCookie = MagicMock(return_value='stubbed') generated_csrf_token = 'csrf_token' mock_sha = MagicMock() mock_sha.hexdigest = MagicMock(return_value=generated_csrf_token) @@ -162,6 +162,7 @@ class TestRootResource(unittest.TestCase): self.root_resource._mode = MODE_STARTUP request = DummyRequest(['/child']) + request.addCookie = MagicMock(return_value='stubbed') request.getCookie = MagicMock(return_value='irrelevant -- stubbed') d = self.web.get(request) @@ -182,6 +183,7 @@ class TestRootResource(unittest.TestCase): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['/child']) + request.addCookie = MagicMock(return_value='stubbed') request.method = 'POST' self._mock_ajax_csrf(request, 'stubbed csrf token') @@ -198,6 +200,7 @@ class TestRootResource(unittest.TestCase): def test_GET_should_return_503_for_uninitialized_resource(self): request = DummyRequest(['/sandbox/']) + request.addCookie = MagicMock(return_value='stubbed') request.method = 'GET' request.getCookie = MagicMock(return_value='stubbed csrf token') @@ -215,6 +218,7 @@ class TestRootResource(unittest.TestCase): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['non-existing-child']) + request.addCookie = MagicMock(return_value='stubbed') request.method = 'GET' request.getCookie = MagicMock(return_value='stubbed csrf token') @@ -231,6 +235,7 @@ class TestRootResource(unittest.TestCase): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['non-existing-child']) + request.addCookie = MagicMock(return_value='stubbed') request.method = 'POST' self._mock_ajax_csrf(request, 'stubbed csrf token') request.getCookie = MagicMock(return_value='stubbed csrf token') @@ -246,6 +251,7 @@ class TestRootResource(unittest.TestCase): def test_should_authorize_child_resource_non_ajax_GET_requests(self): request = DummyRequest(['features']) + request.addCookie = MagicMock(return_value='stubbed') request.getCookie = MagicMock(return_value='irrelevant -- stubbed') self.root_resource.putChild('features', FeaturesResource()) @@ -270,6 +276,7 @@ class TestRootResource(unittest.TestCase): mock_content.read = MagicMock(return_value={}) request.content = mock_content + request.addCookie = MagicMock(return_value='stubbed') request.getCookie = MagicMock(return_value='mismatched csrf token') d = self.web.get(request) @@ -286,6 +293,7 @@ class TestRootResource(unittest.TestCase): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['assets', 'dummy.json']) + request.addCookie = MagicMock(return_value='stubbed') d = self.web.get(request) def assert_response(_): @@ -299,6 +307,7 @@ class TestRootResource(unittest.TestCase): self.root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) + request.addCookie = MagicMock(return_value='stubbed') d = self.web.get(request) def assert_response(_): @@ -309,6 +318,7 @@ class TestRootResource(unittest.TestCase): def test_root_should_be_handled_by_inbox_resource(self): request = DummyRequest([]) + request.addCookie = MagicMock(return_value='stubbed') request.prepath = [''] request.path = '/' # TODO: setup mocked portal @@ -318,9 +328,23 @@ class TestRootResource(unittest.TestCase): def test_inbox_should_not_be_public(self): request = DummyRequest([]) + request.addCookie = MagicMock(return_value='stubbed') request.prepath = [''] request.path = '/' # TODO: setup mocked portal resource = self.root_resource.getChildWithDefault(request.prepath[-1], request) self.assertIsInstance(resource, InboxResource) + + def test_every_url_should_get_csrftoken_header(self): + # self.root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['any']) + request.addCookie = MagicMock(return_value='stubbed') + d = self.web.get(request) + + def assert_add_cookie_called_for_csrftoken(request): + csrftoken = IPixelatedSession(request.getSession()).get_csrf_token() + self.assertEqual([(('XSRF-TOKEN', csrftoken),)], request.addCookie.call_args_list) + + d.addCallback(assert_add_cookie_called_for_csrftoken) + return d -- cgit v1.2.3 From 875249af34fc5a53b727fe8b8296a5d4206c11c7 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 1 Dec 2016 13:39:37 +0100 Subject: fix root resource tests when zmq is not available --- service/test/unit/resources/test_root_resource.py | 24 +++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 2dfe3e5a..9d738a83 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -25,7 +25,8 @@ class TestPublicRootResource(unittest.TestCase): self.public_root_resource = RootResource(mock(), public=True) self.web = DummySite(self.public_root_resource) - def test_put_child_public_adds_resource(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_put_child_public_adds_resource(self, *mocks): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) url_fragment, resource_mock = 'some-url-fragment', mock() self.public_root_resource.putChildPublic(url_fragment, resource_mock) @@ -34,7 +35,8 @@ class TestPublicRootResource(unittest.TestCase): child_resource = getChildForRequest(self.public_root_resource, request) self.assertIs(child_resource, resource_mock) - def test_put_child_protected_adds_unauthorized(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_put_child_protected_adds_unauthorized(self, *mocks): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) url_fragment, resource_mock = 'some-url-fragment', mock() self.public_root_resource.putChildProtected(url_fragment, resource_mock) @@ -43,7 +45,8 @@ class TestPublicRootResource(unittest.TestCase): child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, UnAuthorizedResource) - def test_put_child_adds_unauthorized(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_put_child_adds_unauthorized(self, *mocks): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) url_fragment, resource_mock = 'some-url-fragment', mock() self.public_root_resource.putChild(url_fragment, resource_mock) @@ -52,7 +55,8 @@ class TestPublicRootResource(unittest.TestCase): child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, UnAuthorizedResource) - def test_private_resource_returns_401(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_private_resource_returns_401(self, *mocks): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['mails']) request.addCookie = MagicMock(return_value='stubbed') @@ -65,14 +69,16 @@ class TestPublicRootResource(unittest.TestCase): d.addCallback(assert_unauthorized) return d - def test_login_url_should_delegate_to_login_resource(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_login_url_should_delegate_to_login_resource(self, *mocks): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['login']) request.addCookie = MagicMock(return_value='stubbed') child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, LoginResource) - def test_root_url_should_redirect_to_login_resource(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_root_url_should_redirect_to_login_resource(self, *mocks): self.public_root_resource.initialize(provider=mock(), authenticator=mock()) request = DummyRequest(['']) request.addCookie = MagicMock(return_value='stubbed') @@ -102,7 +108,8 @@ class TestRootResource(unittest.TestCase): self.root_resource = RootResource(self.services_factory) self.web = DummySite(self.root_resource) - def test_put_child_protected_adds_resource(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_put_child_protected_adds_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) url_fragment, resource_mock = 'some-url-fragment', mock() self.root_resource.putChildProtected(url_fragment, resource_mock) @@ -111,7 +118,8 @@ class TestRootResource(unittest.TestCase): child_resource = getChildForRequest(self.root_resource, request) self.assertIs(child_resource, resource_mock) - def test_put_child_adds_resource(self): + @patch('pixelated.resources.mails_resource.events.register') + def test_put_child_adds_resource(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) url_fragment, resource_mock = 'some-url-fragment', mock() self.root_resource.putChild(url_fragment, resource_mock) -- cgit v1.2.3 From b14833fbb56bcd5bff0750c16fd9214009b955be Mon Sep 17 00:00:00 2001 From: Zara Gebru Date: Fri, 2 Dec 2016 15:25:23 +0100 Subject: [refactor] move app dir into public dir --- service/test/unit/resources/test_auth.py | 6 ++++-- service/test/unit/resources/test_root_resource.py | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index f4012b1b..7112ed96 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,4 +1,6 @@ from mockito import mock, when, any as ANY + +from pixelated.application import get_templates_folder, get_static_folder from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource @@ -40,8 +42,8 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): session_checker = SessionChecker(services_factory) self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) self.user_uuid_mock = mock() - self.root_resource = RootResource(services_factory) - self.anonymous_resource = RootResource(services_factory, public=True) + self.root_resource = RootResource(services_factory, get_templates_folder(), get_static_folder()) + self.anonymous_resource = RootResource(services_factory, get_templates_folder(), get_static_folder(), public=True) self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource) self.request = DummyRequest([]) diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 9d738a83..e72efe59 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -5,7 +5,7 @@ from mock import MagicMock, patch from mockito import mock, when, any as ANY import pixelated -from pixelated.application import UserAgentMode +from pixelated.application import UserAgentMode, get_templates_folder, get_static_folder from pixelated.resources import IPixelatedSession, UnAuthorizedResource from pixelated.resources.features_resource import FeaturesResource from pixelated.resources.login_resource import LoginResource @@ -22,7 +22,7 @@ from pixelated.resources.root_resource import InboxResource, RootResource, MODE_ class TestPublicRootResource(unittest.TestCase): def setUp(self): - self.public_root_resource = RootResource(mock(), public=True) + self.public_root_resource = RootResource(mock(), get_templates_folder(), get_static_folder(), public=True) self.web = DummySite(self.public_root_resource) @patch('pixelated.resources.mails_resource.events.register') @@ -105,7 +105,7 @@ class TestRootResource(unittest.TestCase): when(self.services_factory).services(ANY()).thenReturn(self.services) self.mail_service.account_email = self.MAIL_ADDRESS - self.root_resource = RootResource(self.services_factory) + self.root_resource = RootResource(self.services_factory, get_templates_folder(), get_static_folder()) self.web = DummySite(self.root_resource) @patch('pixelated.resources.mails_resource.events.register') -- cgit v1.2.3 From a0de084e04f02a5f09d5a14b86ece156f4f6df5f Mon Sep 17 00:00:00 2001 From: Zara Gebru Date: Fri, 2 Dec 2016 17:55:02 +0100 Subject: [refactor] use static url instead of assets url --- service/test/unit/resources/test_root_resource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index e72efe59..d42a4b38 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -300,7 +300,7 @@ class TestRootResource(unittest.TestCase): def test_assets_should_be_publicly_available(self, *mocks): self.root_resource.initialize(provider=mock(), authenticator=mock()) - request = DummyRequest(['assets', 'dummy.json']) + request = DummyRequest(['static', 'dummy.json']) request.addCookie = MagicMock(return_value='stubbed') d = self.web.get(request) -- cgit v1.2.3 From 391cc55537a97ec8b2b55662db9c63f86ab885ef Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Mon, 5 Dec 2016 10:32:12 +0100 Subject: get templates from pkg_resources --- service/test/unit/test_welcome_mail.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/test_welcome_mail.py b/service/test/unit/test_welcome_mail.py index 7eb65903..42e21e8d 100644 --- a/service/test/unit/test_welcome_mail.py +++ b/service/test/unit/test_welcome_mail.py @@ -41,8 +41,7 @@ class TestWelcomeMail(unittest.TestCase): with open(os.path.join(current_path, '..', '..', - 'pixelated', - 'assets', + 'templates', 'welcome.mail.pt-BR')) as mail_template_file: mail_template = message_from_file(mail_template_file) -- cgit v1.2.3 From ed69fa3b7bf0b543b6c5d3f41504965a1b085808 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Mon, 5 Dec 2016 10:39:10 +0100 Subject: use static instead of {startup,public}-assets --- service/test/unit/resources/test_login_resource.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_login_resource.py b/service/test/unit/resources/test_login_resource.py index 696b0c46..fcf76f5a 100644 --- a/service/test/unit/resources/test_login_resource.py +++ b/service/test/unit/resources/test_login_resource.py @@ -235,7 +235,7 @@ class TestLoginPOST(unittest.TestCase): def assert_interstitial_in_response(_): mock_authenticate.assert_called_once_with(self.username, self.password) - interstitial_js_in_template = '' + interstitial_js_in_template = '' self.assertIn(interstitial_js_in_template, self.request.written[0]) d.addCallback(assert_interstitial_in_response) -- cgit v1.2.3 From ae871e84f6de213f01299f2754fb2e68d4a3afe2 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Mon, 5 Dec 2016 10:56:24 +0100 Subject: remove templates folder from root resource parameters --- service/test/unit/resources/test_auth.py | 6 +++--- service/test/unit/resources/test_root_resource.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index 7112ed96..b43ab15e 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,6 +1,6 @@ from mockito import mock, when, any as ANY -from pixelated.application import get_templates_folder, get_static_folder +from pixelated.application import get_static_folder from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource @@ -42,8 +42,8 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): session_checker = SessionChecker(services_factory) self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) self.user_uuid_mock = mock() - self.root_resource = RootResource(services_factory, get_templates_folder(), get_static_folder()) - self.anonymous_resource = RootResource(services_factory, get_templates_folder(), get_static_folder(), public=True) + self.root_resource = RootResource(services_factory, get_static_folder()) + self.anonymous_resource = RootResource(services_factory, get_static_folder(), public=True) self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource) self.request = DummyRequest([]) diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index d42a4b38..4c9af052 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -5,7 +5,7 @@ from mock import MagicMock, patch from mockito import mock, when, any as ANY import pixelated -from pixelated.application import UserAgentMode, get_templates_folder, get_static_folder +from pixelated.application import UserAgentMode, get_static_folder from pixelated.resources import IPixelatedSession, UnAuthorizedResource from pixelated.resources.features_resource import FeaturesResource from pixelated.resources.login_resource import LoginResource @@ -22,7 +22,7 @@ from pixelated.resources.root_resource import InboxResource, RootResource, MODE_ class TestPublicRootResource(unittest.TestCase): def setUp(self): - self.public_root_resource = RootResource(mock(), get_templates_folder(), get_static_folder(), public=True) + self.public_root_resource = RootResource(mock(), get_static_folder(), public=True) self.web = DummySite(self.public_root_resource) @patch('pixelated.resources.mails_resource.events.register') @@ -105,7 +105,7 @@ class TestRootResource(unittest.TestCase): when(self.services_factory).services(ANY()).thenReturn(self.services) self.mail_service.account_email = self.MAIL_ADDRESS - self.root_resource = RootResource(self.services_factory, get_templates_folder(), get_static_folder()) + self.root_resource = RootResource(self.services_factory, get_static_folder()) self.web = DummySite(self.root_resource) @patch('pixelated.resources.mails_resource.events.register') -- cgit v1.2.3 From 206423b83b910308bd9c314af03cf82e9a821974 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Tue, 6 Dec 2016 11:55:52 +0100 Subject: remove some TODO's --- service/test/unit/resources/test_root_resource.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 4c9af052..1edba98c 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -329,7 +329,6 @@ class TestRootResource(unittest.TestCase): request.addCookie = MagicMock(return_value='stubbed') request.prepath = [''] request.path = '/' - # TODO: setup mocked portal resource = self.root_resource.getChildWithDefault(request.prepath[-1], request) self.assertIsInstance(resource, InboxResource) @@ -339,7 +338,6 @@ class TestRootResource(unittest.TestCase): request.addCookie = MagicMock(return_value='stubbed') request.prepath = [''] request.path = '/' - # TODO: setup mocked portal resource = self.root_resource.getChildWithDefault(request.prepath[-1], request) self.assertIsInstance(resource, InboxResource) -- cgit v1.2.3 From eaf2019b6e977d1191e0ee12f694a02bb9612f83 Mon Sep 17 00:00:00 2001 From: Zara Gebru Date: Tue, 6 Dec 2016 15:46:33 +0100 Subject: clean up parameters of authsessionwrapper --- service/test/unit/resources/test_auth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'service/test/unit') diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index b43ab15e..3dc3e29f 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -45,7 +45,7 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): self.root_resource = RootResource(services_factory, get_static_folder()) self.anonymous_resource = RootResource(services_factory, get_static_folder(), public=True) - self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource) + self.session_wrapper = PixelatedAuthSessionWrapper(self.portal) self.request = DummyRequest([]) self.request.prepath = [''] self.request.path = '/' -- cgit v1.2.3