changeset 887f013a702e in modules/web_user:default
details: https://hg.tryton.org/modules/web_user?cmd=changeset&node=887f013a702e
description:
Replace test setuptools command by unittest discover
issue9215
review389851002
diffstat:
setup.py | 4 +-
tests/__init__.py | 7 -
tests/test_module.py | 200 +++++++++++++++++++++++++++++++++++++++++++++++
tests/test_web_user.py | 207 -------------------------------------------------
tox.ini | 3 +-
5 files changed, 203 insertions(+), 218 deletions(-)
diffs (461 lines):
diff -r a96f5fe467a1 -r 887f013a702e setup.py
--- a/setup.py Mon Apr 11 22:13:53 2022 +0200
+++ b/setup.py Sat Apr 16 18:30:20 2022 +0200
@@ -138,6 +138,7 @@
install_requires=requires,
extras_require={
'BCrypt': ['bcrypt'],
+ 'test': tests_require,
'html2text': ['html2text'],
},
dependency_links=dependency_links,
@@ -146,7 +147,4 @@
[trytond.modules]
web_user = trytond.modules.web_user
""",
- test_suite='tests',
- test_loader='trytond.test_loader:Loader',
- tests_require=tests_require,
)
diff -r a96f5fe467a1 -r 887f013a702e tests/__init__.py
--- a/tests/__init__.py Mon Apr 11 22:13:53 2022 +0200
+++ b/tests/__init__.py Sat Apr 16 18:30:20 2022 +0200
@@ -1,9 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
-
-try:
- from trytond.modules.web_user.tests.test_web_user import suite
-except ImportError:
- from .test_web_user import suite
-
-__all__ = ['suite']
diff -r a96f5fe467a1 -r 887f013a702e tests/test_module.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_module.py Sat Apr 16 18:30:20 2022 +0200
@@ -0,0 +1,200 @@
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
+
+from unittest.mock import ANY, patch
+
+from trytond.config import config
+from trytond.modules.party.tests import PartyCheckEraseMixin
+from trytond.modules.web_user import user as user_module
+from trytond.pool import Pool
+from trytond.tests.test_tryton import ModuleTestCase, with_transaction
+
+VALIDATION_URL = 'http://www.example.com/validation'
+RESET_PASSWORD_URL = 'http://www.example.com/reset_password'
+FROM = '[email protected]'
+
+
+class WebUserTestCase(PartyCheckEraseMixin, ModuleTestCase):
+ 'Test Web User module'
+ module = 'web_user'
+
+ def setUp(self):
+ super(WebUserTestCase, self).setUp()
+ validation_url = config.get('web', 'email_validation_url', default='')
+ config.set('web', 'email_validation_url', VALIDATION_URL)
+ self.addCleanup(
+ lambda: config.set('web', 'email_validation_url', validation_url))
+ reset_password_url = config.get(
+ 'web', 'reset_password_url', default='')
+ config.set('web', 'reset_password_url', RESET_PASSWORD_URL)
+ self.addCleanup(lambda: config.set(
+ 'web', 'reset_password_url', reset_password_url))
+ reset_from = config.get('email', 'from', default='')
+ config.set('email', 'from', FROM)
+ self.addCleanup(lambda: config.set('email', 'from', reset_from))
+
+ length = config.get('password', 'length', default='')
+ config.set('password', 'length', '4')
+ self.addCleanup(config.set, 'password', 'length', length)
+
+ entropy = config.get('password', 'entropy', default='')
+ config.set('password', 'entropy', '0.8')
+ self.addCleanup(config.set, 'password', 'entropy', entropy)
+
+ def create_user(self, email, password):
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email=email)
+ user.password = password
+ user.save()
+
+ self.assertEqual(user.password, 'x' * 10)
+ self.assertNotEqual(user.password_hash, password)
+
+ def check_user(self, email, password):
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user, = User.search([('email', '=', email)])
+ auth_user = User.authenticate(email, password)
+ self.assertEqual(auth_user, user)
+
+ bad_user = User.authenticate(email, password + 'wrong')
+ self.assertEqual(bad_user, None)
+
+ bad_user = User.authenticate(email + 'wrong', password)
+ self.assertEqual(bad_user, None)
+
+ @with_transaction()
+ def test_default_hash(self):
+ 'Test default hash'
+ self.create_user('[email protected]', 'secret')
+ self.check_user('[email protected]', 'secret')
+
+ @with_transaction()
+ def test_session(self):
+ 'Test session'
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email='[email protected]')
+ user.save()
+
+ key = user.new_session()
+ self.assertTrue(key)
+
+ session_user = User.get_user(key)
+ self.assertEqual(session_user, user)
+
+ wrong_session_user = User.get_user('foo')
+ self.assertEqual(wrong_session_user, None)
+
+ @with_transaction()
+ def test_validate_email(self):
+ 'Test email validation'
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email='[email protected]')
+ user.save()
+ self.assertFalse(user.email_valid)
+ self.assertFalse(user.email_token)
+
+ with patch.object(user_module, 'sendmail_transactional') as sendmail:
+ User.validate_email([user])
+ sendmail.assert_called_once_with(FROM, ['[email protected]'], ANY)
+
+ token = user.email_token
+ self.assertTrue(token)
+
+ self.assertEqual(
+ user.get_email_validation_url(),
+ '%s?token=%s' % (VALIDATION_URL, token))
+
+ self.assertFalse(
+ User.validate_email_url(VALIDATION_URL))
+ self.assertFalse(
+ User.validate_email_url('%s?token=12345' % VALIDATION_URL))
+
+ self.assertTrue(
+ User.validate_email_url(user.get_email_validation_url()))
+
+ self.assertTrue(user.email_valid)
+ self.assertFalse(user.email_token)
+
+ @with_transaction()
+ def test_reset_password(self):
+ 'Test reset password'
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email='[email protected]', email_valid=True)
+ user.save()
+ self.assertFalse(user.password_hash)
+
+ with patch.object(user_module, 'sendmail_transactional') as sendmail:
+ User.reset_password([user])
+ sendmail.assert_called_once_with(FROM, ['[email protected]'], ANY)
+
+ token = user.reset_password_token
+ self.assertTrue(token)
+ self.assertTrue(user.reset_password_token_expire)
+
+ self.assertEqual(
+ user.get_email_reset_password_url(),
+ '%s?email=user%%40example.com&token=%s'
+ % (RESET_PASSWORD_URL, token))
+
+ self.assertFalse(
+ User.set_password_token('[email protected]', '12345', 'secret'))
+ self.assertFalse(
+ User.set_password_token('[email protected]', '12345', 'secret'))
+ self.assertFalse(
+ User.set_password_token('[email protected]', token, 'secret'))
+ self.assertFalse(user.password_hash)
+
+ self.assertTrue(User.set_password_url(
+ user.get_email_reset_password_url(), 'secret'))
+
+ self.assertTrue(user.password_hash)
+ self.assertFalse(user.reset_password_token)
+ self.assertFalse(user.reset_password_token_expire)
+
+ @with_transaction()
+ def test_create_format_email(self):
+ "Test create format email"
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email='[email protected]')
+ user.save()
+
+ self.assertEqual(user.email, '[email protected]')
+
+ @with_transaction()
+ def test_write_format_email(self):
+ "Test write format email"
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email='[email protected]')
+ user.save()
+ User.write([user], {'email': '[email protected]'})
+
+ self.assertEqual(user.email, '[email protected]')
+
+ @with_transaction()
+ def test_authenticate_case_insensitive(self):
+ "Test authenticate case insensitive"
+ pool = Pool()
+ User = pool.get('web.user')
+
+ user = User(email='[email protected]', password='secret')
+ user.save()
+ auth_user = User.authenticate('[email protected]', 'secret')
+
+ self.assertEqual(auth_user, user)
+
+
+del ModuleTestCase
diff -r a96f5fe467a1 -r 887f013a702e tests/test_web_user.py
--- a/tests/test_web_user.py Mon Apr 11 22:13:53 2022 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,207 +0,0 @@
-# This file is part of Tryton. The COPYRIGHT file at the top level of
-# this repository contains the full copyright notices and license terms.
-
-import unittest
-from unittest.mock import ANY, patch
-
-from trytond.config import config
-from trytond.modules.party.tests import PartyCheckEraseMixin
-from trytond.modules.web_user import user as user_module
-from trytond.pool import Pool
-from trytond.tests.test_tryton import ModuleTestCase
-from trytond.tests.test_tryton import suite as test_suite
-from trytond.tests.test_tryton import with_transaction
-
-VALIDATION_URL = 'http://www.example.com/validation'
-RESET_PASSWORD_URL = 'http://www.example.com/reset_password'
-FROM = '[email protected]'
-
-
-class WebUserTestCase(PartyCheckEraseMixin, ModuleTestCase):
- 'Test Web User module'
- module = 'web_user'
-
- def setUp(self):
- super(WebUserTestCase, self).setUp()
- validation_url = config.get('web', 'email_validation_url', default='')
- config.set('web', 'email_validation_url', VALIDATION_URL)
- self.addCleanup(
- lambda: config.set('web', 'email_validation_url', validation_url))
- reset_password_url = config.get(
- 'web', 'reset_password_url', default='')
- config.set('web', 'reset_password_url', RESET_PASSWORD_URL)
- self.addCleanup(lambda: config.set(
- 'web', 'reset_password_url', reset_password_url))
- reset_from = config.get('email', 'from', default='')
- config.set('email', 'from', FROM)
- self.addCleanup(lambda: config.set('email', 'from', reset_from))
-
- length = config.get('password', 'length', default='')
- config.set('password', 'length', '4')
- self.addCleanup(config.set, 'password', 'length', length)
-
- entropy = config.get('password', 'entropy', default='')
- config.set('password', 'entropy', '0.8')
- self.addCleanup(config.set, 'password', 'entropy', entropy)
-
- def create_user(self, email, password):
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email=email)
- user.password = password
- user.save()
-
- self.assertEqual(user.password, 'x' * 10)
- self.assertNotEqual(user.password_hash, password)
-
- def check_user(self, email, password):
- pool = Pool()
- User = pool.get('web.user')
-
- user, = User.search([('email', '=', email)])
- auth_user = User.authenticate(email, password)
- self.assertEqual(auth_user, user)
-
- bad_user = User.authenticate(email, password + 'wrong')
- self.assertEqual(bad_user, None)
-
- bad_user = User.authenticate(email + 'wrong', password)
- self.assertEqual(bad_user, None)
-
- @with_transaction()
- def test_default_hash(self):
- 'Test default hash'
- self.create_user('[email protected]', 'secret')
- self.check_user('[email protected]', 'secret')
-
- @with_transaction()
- def test_session(self):
- 'Test session'
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email='[email protected]')
- user.save()
-
- key = user.new_session()
- self.assertTrue(key)
-
- session_user = User.get_user(key)
- self.assertEqual(session_user, user)
-
- wrong_session_user = User.get_user('foo')
- self.assertEqual(wrong_session_user, None)
-
- @with_transaction()
- def test_validate_email(self):
- 'Test email validation'
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email='[email protected]')
- user.save()
- self.assertFalse(user.email_valid)
- self.assertFalse(user.email_token)
-
- with patch.object(user_module, 'sendmail_transactional') as sendmail:
- User.validate_email([user])
- sendmail.assert_called_once_with(FROM, ['[email protected]'], ANY)
-
- token = user.email_token
- self.assertTrue(token)
-
- self.assertEqual(
- user.get_email_validation_url(),
- '%s?token=%s' % (VALIDATION_URL, token))
-
- self.assertFalse(
- User.validate_email_url(VALIDATION_URL))
- self.assertFalse(
- User.validate_email_url('%s?token=12345' % VALIDATION_URL))
-
- self.assertTrue(
- User.validate_email_url(user.get_email_validation_url()))
-
- self.assertTrue(user.email_valid)
- self.assertFalse(user.email_token)
-
- @with_transaction()
- def test_reset_password(self):
- 'Test reset password'
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email='[email protected]', email_valid=True)
- user.save()
- self.assertFalse(user.password_hash)
-
- with patch.object(user_module, 'sendmail_transactional') as sendmail:
- User.reset_password([user])
- sendmail.assert_called_once_with(FROM, ['[email protected]'], ANY)
-
- token = user.reset_password_token
- self.assertTrue(token)
- self.assertTrue(user.reset_password_token_expire)
-
- self.assertEqual(
- user.get_email_reset_password_url(),
- '%s?email=user%%40example.com&token=%s'
- % (RESET_PASSWORD_URL, token))
-
- self.assertFalse(
- User.set_password_token('[email protected]', '12345', 'secret'))
- self.assertFalse(
- User.set_password_token('[email protected]', '12345', 'secret'))
- self.assertFalse(
- User.set_password_token('[email protected]', token, 'secret'))
- self.assertFalse(user.password_hash)
-
- self.assertTrue(User.set_password_url(
- user.get_email_reset_password_url(), 'secret'))
-
- self.assertTrue(user.password_hash)
- self.assertFalse(user.reset_password_token)
- self.assertFalse(user.reset_password_token_expire)
-
- @with_transaction()
- def test_create_format_email(self):
- "Test create format email"
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email='[email protected]')
- user.save()
-
- self.assertEqual(user.email, '[email protected]')
-
- @with_transaction()
- def test_write_format_email(self):
- "Test write format email"
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email='[email protected]')
- user.save()
- User.write([user], {'email': '[email protected]'})
-
- self.assertEqual(user.email, '[email protected]')
-
- @with_transaction()
- def test_authenticate_case_insensitive(self):
- "Test authenticate case insensitive"
- pool = Pool()
- User = pool.get('web.user')
-
- user = User(email='[email protected]', password='secret')
- user.save()
- auth_user = User.authenticate('[email protected]', 'secret')
-
- self.assertEqual(auth_user, user)
-
-
-def suite():
- suite = test_suite()
- suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
- WebUserTestCase))
- return suite
diff -r a96f5fe467a1 -r 887f013a702e tox.ini
--- a/tox.ini Mon Apr 11 22:13:53 2022 +0200
+++ b/tox.ini Sat Apr 16 18:30:20 2022 +0200
@@ -2,8 +2,9 @@
envlist = {py37,py38,py39,py310}-{sqlite,postgresql}
[testenv]
+extras = test
commands =
- coverage run --include=.*/web_user/* setup.py test
+ coverage run --include=.*/web_user/* -m unittest discover -s tests
coverage report --include=.*/web_user/* --omit=*/tests/*
deps =
coverage