[REF] auth_signup_verify_email: Skip mail send in tests and use email_validator (#1247)
This addon introduced an integration conflict when tested in a database that had `mail_tracking_mass_mailing` installed, producing this failure:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/auth_signup_verify_email/controllers/main.py", line 44, in passwordless_signup
sudo_users.reset_password(values.get("login"))
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 419, in savepoint
self.execute('RELEASE SAVEPOINT "%s"' % name)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 231, in execute
res = self._obj.execute(query, params)
InternalError: no such savepoint
Which in turn produced the following in the next test:
InternalError: current transaction is aborted, commands ignored until end of transaction block
The problem comes from the fact that one cannot rollback to a nested savepoint if the parent savepoint was released. It became a problem because that's the strategy that both this addon and upstream's `TestCursor` follow.
To avoid that, tests now mock the `send_mail` method. This results also in having a predictable outcome from the test `test_good_email`, so it is more meaningful now.
Besides, previously we were using the `validate_email` package, which is currently a dead project that can silently fail under certain environments, as seen in https://github.com/syrusakbary/validate_email/pull/80.
There's the `email_validator` package, freely available, supported, and it provides a human-readable error message whenever some format from the email fails.
As such, here I'm switching the dependency, while still adding a backwards compatibility layer for preexisting installations. 7 years ago [REF] auth_signup_verify_email: Skip mail send in tests and use email_validator (#1247)
This addon introduced an integration conflict when tested in a database that had `mail_tracking_mass_mailing` installed, producing this failure:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/auth_signup_verify_email/controllers/main.py", line 44, in passwordless_signup
sudo_users.reset_password(values.get("login"))
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 419, in savepoint
self.execute('RELEASE SAVEPOINT "%s"' % name)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 231, in execute
res = self._obj.execute(query, params)
InternalError: no such savepoint
Which in turn produced the following in the next test:
InternalError: current transaction is aborted, commands ignored until end of transaction block
The problem comes from the fact that one cannot rollback to a nested savepoint if the parent savepoint was released. It became a problem because that's the strategy that both this addon and upstream's `TestCursor` follow.
To avoid that, tests now mock the `send_mail` method. This results also in having a predictable outcome from the test `test_good_email`, so it is more meaningful now.
Besides, previously we were using the `validate_email` package, which is currently a dead project that can silently fail under certain environments, as seen in https://github.com/syrusakbary/validate_email/pull/80.
There's the `email_validator` package, freely available, supported, and it provides a human-readable error message whenever some format from the email fails.
As such, here I'm switching the dependency, while still adding a backwards compatibility layer for preexisting installations. 7 years ago [REF] auth_signup_verify_email: Skip mail send in tests and use email_validator (#1247)
This addon introduced an integration conflict when tested in a database that had `mail_tracking_mass_mailing` installed, producing this failure:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/auth_signup_verify_email/controllers/main.py", line 44, in passwordless_signup
sudo_users.reset_password(values.get("login"))
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 419, in savepoint
self.execute('RELEASE SAVEPOINT "%s"' % name)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 231, in execute
res = self._obj.execute(query, params)
InternalError: no such savepoint
Which in turn produced the following in the next test:
InternalError: current transaction is aborted, commands ignored until end of transaction block
The problem comes from the fact that one cannot rollback to a nested savepoint if the parent savepoint was released. It became a problem because that's the strategy that both this addon and upstream's `TestCursor` follow.
To avoid that, tests now mock the `send_mail` method. This results also in having a predictable outcome from the test `test_good_email`, so it is more meaningful now.
Besides, previously we were using the `validate_email` package, which is currently a dead project that can silently fail under certain environments, as seen in https://github.com/syrusakbary/validate_email/pull/80.
There's the `email_validator` package, freely available, supported, and it provides a human-readable error message whenever some format from the email fails.
As such, here I'm switching the dependency, while still adding a backwards compatibility layer for preexisting installations. 7 years ago [REF] auth_signup_verify_email: Skip mail send in tests and use email_validator (#1247)
This addon introduced an integration conflict when tested in a database that had `mail_tracking_mass_mailing` installed, producing this failure:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/auth_signup_verify_email/controllers/main.py", line 44, in passwordless_signup
sudo_users.reset_password(values.get("login"))
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 419, in savepoint
self.execute('RELEASE SAVEPOINT "%s"' % name)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 231, in execute
res = self._obj.execute(query, params)
InternalError: no such savepoint
Which in turn produced the following in the next test:
InternalError: current transaction is aborted, commands ignored until end of transaction block
The problem comes from the fact that one cannot rollback to a nested savepoint if the parent savepoint was released. It became a problem because that's the strategy that both this addon and upstream's `TestCursor` follow.
To avoid that, tests now mock the `send_mail` method. This results also in having a predictable outcome from the test `test_good_email`, so it is more meaningful now.
Besides, previously we were using the `validate_email` package, which is currently a dead project that can silently fail under certain environments, as seen in https://github.com/syrusakbary/validate_email/pull/80.
There's the `email_validator` package, freely available, supported, and it provides a human-readable error message whenever some format from the email fails.
As such, here I'm switching the dependency, while still adding a backwards compatibility layer for preexisting installations. 7 years ago [REF] auth_signup_verify_email: Skip mail send in tests and use email_validator (#1247)
This addon introduced an integration conflict when tested in a database that had `mail_tracking_mass_mailing` installed, producing this failure:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/auth_signup_verify_email/controllers/main.py", line 44, in passwordless_signup
sudo_users.reset_password(values.get("login"))
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 419, in savepoint
self.execute('RELEASE SAVEPOINT "%s"' % name)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 231, in execute
res = self._obj.execute(query, params)
InternalError: no such savepoint
Which in turn produced the following in the next test:
InternalError: current transaction is aborted, commands ignored until end of transaction block
The problem comes from the fact that one cannot rollback to a nested savepoint if the parent savepoint was released. It became a problem because that's the strategy that both this addon and upstream's `TestCursor` follow.
To avoid that, tests now mock the `send_mail` method. This results also in having a predictable outcome from the test `test_good_email`, so it is more meaningful now.
Besides, previously we were using the `validate_email` package, which is currently a dead project that can silently fail under certain environments, as seen in https://github.com/syrusakbary/validate_email/pull/80.
There's the `email_validator` package, freely available, supported, and it provides a human-readable error message whenever some format from the email fails.
As such, here I'm switching the dependency, while still adding a backwards compatibility layer for preexisting installations. 7 years ago [REF] auth_signup_verify_email: Skip mail send in tests and use email_validator (#1247)
This addon introduced an integration conflict when tested in a database that had `mail_tracking_mass_mailing` installed, producing this failure:
Traceback (most recent call last):
File "/opt/odoo/auto/addons/auth_signup_verify_email/controllers/main.py", line 44, in passwordless_signup
sudo_users.reset_password(values.get("login"))
File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
self.gen.next()
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 419, in savepoint
self.execute('RELEASE SAVEPOINT "%s"' % name)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 154, in wrapper
return f(self, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/sql_db.py", line 231, in execute
res = self._obj.execute(query, params)
InternalError: no such savepoint
Which in turn produced the following in the next test:
InternalError: current transaction is aborted, commands ignored until end of transaction block
The problem comes from the fact that one cannot rollback to a nested savepoint if the parent savepoint was released. It became a problem because that's the strategy that both this addon and upstream's `TestCursor` follow.
To avoid that, tests now mock the `send_mail` method. This results also in having a predictable outcome from the test `test_good_email`, so it is more meaningful now.
Besides, previously we were using the `validate_email` package, which is currently a dead project that can silently fail under certain environments, as seen in https://github.com/syrusakbary/validate_email/pull/80.
There's the `email_validator` package, freely available, supported, and it provides a human-readable error message whenever some format from the email fails.
As such, here I'm switching the dependency, while still adding a backwards compatibility layer for preexisting installations. 7 years ago |
|
# -*- coding: utf-8 -*- # © 2016 Jairo Llopis <jairo.llopis@tecnativa.com> # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from urllib import urlencode from mock import patch from lxml.html import document_fromstring from odoo.tests.common import at_install, post_install, HttpCase from odoo.addons.mail.models import mail_template
@at_install(False) @post_install(True) class UICase(HttpCase): def setUp(self): super(UICase, self).setUp() with self.cursor() as http_cr: http_env = self.env(http_cr) http_env["ir.config_parameter"].set_param( "auth_signup.allow_uninvited", "True") self.data = { "csrf_token": self.csrf_token(), "name": "Somebody", }
def html_doc(self, url="/web/signup", data=None, timeout=30): """Get an HTML LXML document.""" if data: data = bytes(urlencode(data)) with patch(mail_template.__name__ + ".MailTemplate.send_mail"): result = self.url_open(url, data, timeout) return document_fromstring(result.read())
def csrf_token(self): """Get a valid CSRF token.""" doc = self.html_doc() return doc.xpath("//input[@name='csrf_token']")[0].get("value")
def test_bad_email(self): """Test rejection of bad emails.""" self.data["login"] = "bad email" doc = self.html_doc(data=self.data) self.assertTrue(doc.xpath('//p[@class="alert alert-danger"]'))
def test_good_email(self): """Test acceptance of good emails.""" self.data["login"] = "good@example.com" doc = self.html_doc(data=self.data) self.assertTrue(doc.xpath('//p[@class="alert alert-success"]'))
|