Merge lp:~elopio/ubuntuone-credentials/fixtured_fake_server into lp:ubuntuone-credentials

Proposed by Leo Arias
Status: Merged
Approved by: Leo Arias
Approved revision: 90
Merged at revision: 86
Proposed branch: lp:~elopio/ubuntuone-credentials/fixtured_fake_server
Merge into: lp:ubuntuone-credentials
Diff against target: 476 lines (+75/-258)
6 files modified
online-accounts-provider/tests/CMakeLists.txt (+6/-2)
online-accounts-provider/tests/autopilot/run (+0/-26)
online-accounts-provider/tests/autopilot/run_mock_server.py (+0/-205)
online-accounts-provider/tests/autopilot/ubuntuone_credentials/__init__.py (+27/-16)
online-accounts-provider/tests/autopilot/ubuntuone_credentials/test_existing_account.py (+14/-6)
online-accounts-provider/tests/autopilot/ubuntuone_credentials/test_new_account.py (+28/-3)
To merge this branch: bzr merge lp:~elopio/ubuntuone-credentials/fixtured_fake_server
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
dobey (community) Approve
Richard Huddie Pending
Javier Collado Pending
VĂ­ctor R. Ruiz Pending
Review via email: mp+202972@code.launchpad.net

Commit message

Refactor the fake servers to be a thread on the same process, started from a fixture on the test setup.

Description of the change

This change was requested by dobey in order to package the autopilot tests. It's nice because now it follows the same style we use on the click scope.
We need the autopilot helpers of ubuntuone-credentials to be packaged in order to use them on the click scope tests.

To post a comment you must log in.
87. By Leo Arias

Rename

88. By Leo Arias

Updated the copyright year.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
dobey (dobey) wrote :

390 +# Copyright (C) 2013, 2014 Canonical Ltd.

Please use - instead of a list of years, like 2013-2014, for the copyright headers.

Also, I think maybe online-accounts-provider/tests/CMakeLists.txt has a couple rules for running the autopilot tests that probably need to be updated here as well.

review: Needs Fixing
89. By Leo Arias

Updated the autopilot cmake.

90. By Leo Arias

Use year ranges, as suggested by dobey.

Revision history for this message
dobey (dobey) :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'online-accounts-provider/tests/CMakeLists.txt'
--- online-accounts-provider/tests/CMakeLists.txt 2013-10-23 17:58:21 +0000
+++ online-accounts-provider/tests/CMakeLists.txt 2014-01-24 15:43:44 +0000
@@ -1,12 +1,16 @@
1SET (TESTS_TARGET test-online-accounts-provider)1SET (TESTS_TARGET test-online-accounts-provider)
22
3set (AUTOPILOT_PACKAGE ubuntuone_credentials)
4
3add_custom_target(online-accounts-provider-autopilot-tests5add_custom_target(online-accounts-provider-autopilot-tests
4 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/autopilot/run ${CMAKE_CURRENT_BINARY_DIR}6 COMMAND autopilot run ${AUTOPILOT_PACKAGE}
7 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/autopilot
5 DEPENDS ${QML_PLUGIN_NAME}8 DEPENDS ${QML_PLUGIN_NAME}
6)9)
710
8add_custom_target(online-accounts-provider-autopilot-tests-local11add_custom_target(online-accounts-provider-autopilot-tests-local
9 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/autopilot/run ${CMAKE_CURRENT_BINARY_DIR} local12 COMMAND SSO_AUTH_BASE_URL=fake SSO_UONE_BASE_URL=fake autopilot run ${AUTOPILOT_PACKAGE}
13 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/autopilot
10 DEPENDS ${QML_PLUGIN_NAME}14 DEPENDS ${QML_PLUGIN_NAME}
11)15)
1216
1317
=== removed file 'online-accounts-provider/tests/autopilot/run'
--- online-accounts-provider/tests/autopilot/run 2013-10-25 23:26:53 +0000
+++ online-accounts-provider/tests/autopilot/run 1970-01-01 00:00:00 +0000
@@ -1,26 +0,0 @@
1#!/bin/bash
2
3if [[ -z `which autopilot` ]]; then
4 echo "Autopilot is not installed. Skip"
5 exit
6fi
7
8SCRIPTPATH=`dirname $0`
9pushd ${SCRIPTPATH}
10
11if [ "x$2" == "xlocal" ]; then
12 echo "Using server at localhost:8080"
13 export SSO_AUTH_BASE_URL=http://localhost:8080
14 export SSO_UONE_BASE_URL=http://localhost:8080
15 python run_mock_server.py &
16fi
17
18export QML2_IMPORT_PATH=/usr/lib/i386-linux-gnu/ubuntu-system-settings/private:$1/../../qml-credentials-service
19export U1_DEBUG=1
20autopilot run UbuntuOneCredentialsProviderAutopilotTests
21popd
22
23if [ "x$2" == "xlocal" ]; then
24 echo "tearing down server"
25 kill -HUP %1
26fi
270
=== removed file 'online-accounts-provider/tests/autopilot/run_mock_server.py'
--- online-accounts-provider/tests/autopilot/run_mock_server.py 2013-10-29 17:25:31 +0000
+++ online-accounts-provider/tests/autopilot/run_mock_server.py 1970-01-01 00:00:00 +0000
@@ -1,205 +0,0 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#
3# Copyright (C) 2013 Canonical Ltd.
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License version 3, as published
7# by the Free Software Foundation.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17"""Mock server for SSO and U1 Ping endpoints."""
18
19import BaseHTTPServer
20import json
21import signal
22import sys
23
24from urlparse import urlparse, parse_qs
25
26SSO_API_PATH = '/api/v2'
27UONE_API_PATH = '/oauth/sso-finished-so-get-tokens/'
28
29
30LOGIN_OK_RESPONSE = """
31{
32 "href": "https://login.ubuntu.com/api/v2/tokens/oauth/the-key",
33 "token_key": "token-key",
34 "token_secret": "token-secret",
35 "token_name": "token-name",
36 "consumer_key": "consumer-key",
37 "consumer_secret": "consumer-secret",
38 "date_created": "2013-01-11 12:43:23",
39 "date_updated": "2013-01-11 12:43:23"
40}
41"""
42
43TWOFACTOR_REQUIRED_RESPONSE = """
44{
45 "code": "TWOFACTOR_REQUIRED",
46 "message": "This account requires 2-factor authentication.",
47 "extra": {}
48}
49"""
50
51LOGIN_ERR_RESPONSE = """
52{
53 "code": "INVALID_CREDENTIALS",
54 "message": "Your email/password isn't correct.",
55 "extra": {}
56}
57"""
58
59TWOFACTOR_ERR_RESPONSE = """
60{
61 "message": "The provided 2-factor key is not recognised.",
62 "code": "TWOFACTOR_FAILURE",
63 "extra": {}
64}
65"""
66
67INVALID_DATA_RESPONSE = """
68{
69 "message": "Invalid request data",
70 "code": "INVALID_DATA",
71 "extra": {
72 "password": [
73 "A real password-specific message would go here."
74 ],
75 "email": [
76 "A real email-specific message would go here."
77 ]
78 }
79}
80"""
81
82REGISTER_CREATED_RESPONSE = """
83{
84 "status": "Active",
85 "openid": "fFcTeSt",
86 "verified": false,
87 "emails": [
88 {
89 "href": "/api/v2/emails/new@te.st",
90 "verified": false
91 }
92 ],
93 "tokens": [],
94 "href": "/api/v2/accounts/fFcTeSt",
95 "displayname": "Test",
96 "email": "new@te.st"
97}
98"""
99
100
101class MockSSOAndUOneRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
102
103 def do_GET(self):
104 """Handle GET as if we were the one.ubuntu.com server
105 """
106 parsedPath = urlparse(self.path)
107 queryDict = parse_qs(parsedPath.query)
108
109 if parsedPath.path.startswith('/oauth/sso-finished-so-get-tokens/'):
110 for k in ['platform', 'platform_version', 'platform_arch']:
111 if k not in queryDict:
112 print "****** MISSING ", k, " IN ", queryDict, "bailing"
113 self.send_error(401)
114 return
115 self.send_response(200)
116 self.end_headers()
117 self.wfile.write("ok 0/0") # fake format of server's real response
118 else:
119 self.send_error(404) # real server currently returns 500!
120
121 def do_POST(self):
122 """Handle POST as if we are the login.ubuntu.com server.
123 """
124 length = int(self.headers['Content-Length'])
125 postdata = self.rfile.read(length)
126 if postdata == '':
127 print "NOTE: empty postdata, just dropping the request"
128 return
129
130 try:
131 bodyDict = json.loads(postdata)
132 except ValueError:
133 print "error loading json from postdata: '%s'" % postdata
134 self.send_error(500)
135 return
136
137 if self.path == SSO_API_PATH + '/tokens/oauth':
138 self.handle_login(bodyDict)
139 elif self.path == SSO_API_PATH + '/accounts':
140 self.handle_register(bodyDict)
141 else:
142 print "unknown -- self.path is ", self.path
143 self.send_error(404, 'unknown')
144
145 def send_JSON_reply(self, code, replyJSON):
146 self.send_response(code)
147 self.send_header("Content-Type", "application/json")
148 self.end_headers()
149 self.wfile.write(replyJSON)
150
151 def handle_login(self, bodyDict):
152
153 if 'email' not in bodyDict \
154 or 'password' not in bodyDict or 'token_name' not in bodyDict:
155 self.send_JSON_reply(400, INVALID_DATA_RESPONSE)
156 return
157
158 email = bodyDict['email']
159
160 if email in ["ok@te.st", "new@te.st"]:
161 self.send_JSON_reply(201, LOGIN_OK_RESPONSE)
162
163 elif email == "2fa@te.st":
164 if 'otp' not in bodyDict:
165 self.send_JSON_reply(401, TWOFACTOR_REQUIRED_RESPONSE)
166 else:
167 if len(bodyDict['otp']) != 6:
168 self.send_JSON_reply(403, TWOFACTOR_ERR_RESPONSE)
169 else:
170 self.send_JSON_reply(201, LOGIN_OK_RESPONSE)
171
172 else:
173 self.send_JSON_reply(401, LOGIN_ERR_RESPONSE)
174
175 def handle_register(self, bodyDict):
176 if 'email' not in bodyDict \
177 or 'password' not in bodyDict \
178 or 'displayname' not in bodyDict \
179 or bodyDict['email'] == 'bad-new@te.st':
180
181 self.send_JSON_reply(400, INVALID_DATA_RESPONSE)
182 return
183
184 self.send_JSON_reply(201, REGISTER_CREATED_RESPONSE)
185
186
187if __name__ == '__main__':
188
189 server_address = ('', 8080)
190 httpd = BaseHTTPServer.HTTPServer(server_address,
191 MockSSOAndUOneRequestHandler)
192
193 def stop_immediately(signum, frame):
194 print "Got signal ", signum, ", stopping server."
195 httpd.socket.close()
196
197 signal.signal(signal.SIGINT, stop_immediately)
198 signal.signal(signal.SIGHUP, stop_immediately)
199
200 print "Mock server running at ", 8080
201
202 try:
203 httpd.serve_forever()
204 except:
205 pass
2060
=== renamed directory 'online-accounts-provider/tests/autopilot/UbuntuOneCredentialsProviderAutopilotTests' => 'online-accounts-provider/tests/autopilot/ubuntuone_credentials'
=== modified file 'online-accounts-provider/tests/autopilot/ubuntuone_credentials/__init__.py'
--- online-accounts-provider/tests/autopilot/UbuntuOneCredentialsProviderAutopilotTests/__init__.py 2013-10-10 02:39:50 +0000
+++ online-accounts-provider/tests/autopilot/ubuntuone_credentials/__init__.py 2014-01-24 15:43:44 +0000
@@ -1,6 +1,6 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#2#
3# Copyright (C) 2013 Canonical Ltd.3# Copyright (C) 2013-2014 Canonical Ltd.
4#4#
5# This program is free software; you can redistribute it and/or modify5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License version 3, as published6# it under the terms of the GNU General Public License version 3, as published
@@ -20,14 +20,18 @@
20import subprocess20import subprocess
21import tempfile21import tempfile
2222
23import fixtures
23from autopilot import input24from autopilot import input
24from autopilot.matchers import Eventually25from autopilot.matchers import Eventually
25from testtools.matchers import Equals26from testtools.matchers import Equals
26from ubuntuuitoolkit import (27from ubuntuuitoolkit import (
27 base,28 base,
28 emulators as toolkit_emulators,29 emulators as toolkit_emulators,
30 tests as toolkit_tests
29)31)
3032
33from ubuntuone_credentials import fixture_setup
34
3135
32def _get_module_include_path():36def _get_module_include_path():
33 return _get_path_to_source_root()37 return _get_path_to_source_root()
@@ -39,19 +43,6 @@
39 os.path.dirname(__file__), '..', '..', '..'))43 os.path.dirname(__file__), '..', '..', '..'))
4044
4145
42def _get_local_desktop_file_directory():
43 return os.path.join(os.environ['HOME'], '.local', 'share', 'applications')
44
45
46def _get_qmlscene_launch_command():
47 """Return the command to launch qmlscene for autopilot tests."""
48 # TODO replace this with the one from the ubuntu-ui-toolkit, that has just
49 # been merged to trunk. --elopio - 2013-10-08
50 arch = subprocess.check_output(
51 ["dpkg-architecture", "-qDEB_HOST_MULTIARCH"]).strip()
52 return '/usr/lib/' + arch + '/qt5/bin/qmlscene'
53
54
55class TestCaseWithQMLWrapper(base.UbuntuUIToolkitAppTestCase):46class TestCaseWithQMLWrapper(base.UbuntuUIToolkitAppTestCase):
5647
57 _DESKTOP_FILE_CONTENTS = ("""[Desktop Entry]48 _DESKTOP_FILE_CONTENTS = ("""[Desktop Entry]
@@ -67,15 +58,35 @@
67 def setUp(self):58 def setUp(self):
68 super(TestCaseWithQMLWrapper, self).setUp()59 super(TestCaseWithQMLWrapper, self).setUp()
69 self.pointing_device = input.Pointer(self.input_device_class.create())60 self.pointing_device = input.Pointer(self.input_device_class.create())
61 self.use_qml2_import_path_for_fake_wrapper()
70 self.launch_application()62 self.launch_application()
7163
64 def use_fake_servers(self):
65 fake_sso_and_u1_server = fixture_setup.FakeSSOAndU1ServersRunning()
66 self.useFixture(fake_sso_and_u1_server)
67 self.useFixture(fixtures.EnvironmentVariable(
68 'SSO_AUTH_BASE_URL', newvalue=fake_sso_and_u1_server.url))
69 self.useFixture(fixtures.EnvironmentVariable(
70 'SSO_UONE_BASE_URL', newvalue=fake_sso_and_u1_server.url))
71
72 def use_qml2_import_path_for_fake_wrapper(self):
73 arch = subprocess.check_output(
74 ["dpkg-architecture", "-qDEB_HOST_MULTIARCH"]).strip()
75 system_settings_path = (
76 '/usr/lib/{}/ubuntu-system-settings/private'.format(arch))
77 qml_credentials_path = os.path.join(
78 _get_path_to_source_root(), 'qml-credentials-service')
79 self.useFixture(fixtures.EnvironmentVariable(
80 'QML2_IMPORT_PATH',
81 newvalue=':'.join([system_settings_path, qml_credentials_path])))
82
72 def launch_application(self):83 def launch_application(self):
73 qml_file_path = os.path.join(84 qml_file_path = os.path.join(
74 os.path.dirname(__file__), self.test_qml_wrapper_file_name)85 os.path.dirname(__file__), self.test_qml_wrapper_file_name)
75 desktop_file_path = self._write_test_desktop_file()86 desktop_file_path = self._write_test_desktop_file()
76 self.addCleanup(os.remove, desktop_file_path)87 self.addCleanup(os.remove, desktop_file_path)
77 self.app = self.launch_test_application(88 self.app = self.launch_test_application(
78 _get_qmlscene_launch_command(),89 base.get_qmlscene_launch_command(),
79 '-I' + _get_module_include_path(),90 '-I' + _get_module_include_path(),
80 qml_file_path,91 qml_file_path,
81 '--desktop_file_hint={0}'.format(desktop_file_path),92 '--desktop_file_hint={0}'.format(desktop_file_path),
@@ -86,7 +97,7 @@
86 self.main_view.visible, Eventually(Equals(True)))97 self.main_view.visible, Eventually(Equals(True)))
8798
88 def _write_test_desktop_file(self):99 def _write_test_desktop_file(self):
89 desktop_file_dir = _get_local_desktop_file_directory()100 desktop_file_dir = toolkit_tests.get_local_desktop_file_directory()
90 if not os.path.exists(desktop_file_dir):101 if not os.path.exists(desktop_file_dir):
91 os.makedirs(desktop_file_dir)102 os.makedirs(desktop_file_dir)
92 desktop_file = tempfile.NamedTemporaryFile(103 desktop_file = tempfile.NamedTemporaryFile(
93104
=== modified file 'online-accounts-provider/tests/autopilot/ubuntuone_credentials/test_existing_account.py'
--- online-accounts-provider/tests/autopilot/UbuntuOneCredentialsProviderAutopilotTests/test_existing_account.py 2013-10-08 23:45:57 +0000
+++ online-accounts-provider/tests/autopilot/ubuntuone_credentials/test_existing_account.py 2014-01-24 15:43:44 +0000
@@ -1,6 +1,6 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#2#
3# Copyright (C) 2013 Canonical Ltd.3# Copyright (C) 2013-2014 Canonical Ltd.
4#4#
5# This program is free software; you can redistribute it and/or modify5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License version 3, as published6# it under the terms of the GNU General Public License version 3, as published
@@ -14,17 +14,25 @@
14# You should have received a copy of the GNU General Public License14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.15# along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
17import os
18
17from autopilot.matchers import Eventually19from autopilot.matchers import Eventually
18from testtools.matchers import Equals20from testtools.matchers import Equals
1921
20import UbuntuOneCredentialsProviderAutopilotTests22import ubuntuone_credentials
2123
2224
23class ExistingUOAAccountTests(25class ExistingUOAAccountTestCase(ubuntuone_credentials.TestCaseWithQMLWrapper):
24 UbuntuOneCredentialsProviderAutopilotTests.TestCaseWithQMLWrapper):
2526
26 test_qml_wrapper_file_name = 'TestWrapperExisting.qml'27 test_qml_wrapper_file_name = 'TestWrapperExisting.qml'
2728
29 def setUp(self):
30 # Start the fake server before launching the application.
31 if (os.environ.get('SSO_AUTH_BASE_URL') == 'fake' and
32 os.environ.get('SSO_UONE_BASE_URL') == 'fake'):
33 self.use_fake_servers()
34 super(ExistingUOAAccountTestCase, self).setUp()
35
28 def test_show_remove_account_dialog(self):36 def test_show_remove_account_dialog(self):
29 remove_account_button = self.main_view.select_single(37 remove_account_button = self.main_view.select_single(
30 objectName='removeAccountButton')38 objectName='removeAccountButton')
3139
=== modified file 'online-accounts-provider/tests/autopilot/ubuntuone_credentials/test_new_account.py'
--- online-accounts-provider/tests/autopilot/UbuntuOneCredentialsProviderAutopilotTests/test_new_account.py 2013-10-29 17:25:31 +0000
+++ online-accounts-provider/tests/autopilot/ubuntuone_credentials/test_new_account.py 2014-01-24 15:43:44 +0000
@@ -1,6 +1,6 @@
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#2#
3# Copyright (C) 2013 Canonical Ltd.3# Copyright (C) 2013-2014 Canonical Ltd.
4#4#
5# This program is free software; you can redistribute it and/or modify5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License version 3, as published6# it under the terms of the GNU General Public License version 3, as published
@@ -14,12 +14,16 @@
14# You should have received a copy of the GNU General Public License14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.15# along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
17import os
18
17from autopilot.matchers import Eventually19from autopilot.matchers import Eventually
18from testtools.matchers import Equals, Not20from testtools.matchers import Equals, Not
19from ubuntuuitoolkit import emulators as toolkit_emulators21from ubuntuuitoolkit import emulators as toolkit_emulators
2022
21from UbuntuOneCredentialsProviderAutopilotTests import (emulators,23from ubuntuone_credentials import (
22 TestCaseWithQMLWrapper)24 emulators,
25 TestCaseWithQMLWrapper
26)
2327
2428
25class NewUbuntuOneOnlineAccountTestCase(TestCaseWithQMLWrapper):29class NewUbuntuOneOnlineAccountTestCase(TestCaseWithQMLWrapper):
@@ -78,6 +82,13 @@
78 ('failure',82 ('failure',
79 dict(email='not-ok@te.st', password='password', success=False))]83 dict(email='not-ok@te.st', password='password', success=False))]
8084
85 def setUp(self):
86 # Start the fake server before launching the application.
87 if (os.environ.get('SSO_AUTH_BASE_URL') == 'fake' and
88 os.environ.get('SSO_UONE_BASE_URL') == 'fake'):
89 self.use_fake_servers()
90 super(SimpleLogInTestCase, self).setUp()
91
81 def test_simple_login(self):92 def test_simple_login(self):
82 """Test that success pops the NewAccount main page, and93 """Test that success pops the NewAccount main page, and
83 failure shows the error label.94 failure shows the error label.
@@ -103,6 +114,13 @@
103 twoFactorCode='bad', success=False))114 twoFactorCode='bad', success=False))
104 ]115 ]
105116
117 def setUp(self):
118 # Start the fake server before launching the application.
119 if (os.environ.get('SSO_AUTH_BASE_URL') == 'fake' and
120 os.environ.get('SSO_UONE_BASE_URL') == 'fake'):
121 self.use_fake_servers()
122 super(TwoFactorLogInTestCase, self).setUp()
123
106 def test_twofactor_login(self):124 def test_twofactor_login(self):
107 "Test that success pops the NewAccount main page."125 "Test that success pops the NewAccount main page."
108126
@@ -158,6 +176,13 @@
158 success=False))176 success=False))
159 ]177 ]
160178
179 def setUp(self):
180 # Start the fake server before launching the application.
181 if (os.environ.get('SSO_AUTH_BASE_URL') == 'fake' and
182 os.environ.get('SSO_UONE_BASE_URL') == 'fake'):
183 self.use_fake_servers()
184 super(RegisterNewU1AccountTestCase, self).setUp()
185
161 def test_register_new_account(self):186 def test_register_new_account(self):
162 "Test that registering a new account pops the main page."187 "Test that registering a new account pops the main page."
163188

Subscribers

People subscribed via source and target branches

to all changes: