summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2016-08-26 12:56:01 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-08-26 12:56:01 -0400
commit117997cd5b849a236208cf9ea16f0f09c6962804 (patch)
tree76205a8974aadf03a944a853389ccf66f81e2866 /test
parentf10eba00ea7c92315b4b39c69627058ad4931448 (diff)
downloadsqlalchemy-117997cd5b849a236208cf9ea16f0f09c6962804.tar.gz
Raise when two validators conflict
Two @validates decorators that make use of the same name is not supported. Raise an exception. Change-Id: Ia3e89ffdc9ef345a0de258e2ac0ac5e0bd421c61 Fixes: #3776
Diffstat (limited to 'test')
-rw-r--r--test/orm/test_validators.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/test/orm/test_validators.py b/test/orm/test_validators.py
index 417554f46..e59bb580a 100644
--- a/test/orm/test_validators.py
+++ b/test/orm/test_validators.py
@@ -1,7 +1,9 @@
from test.orm import _fixtures
-from sqlalchemy.testing import fixtures, assert_raises, eq_, ne_
+from sqlalchemy.testing import fixtures, assert_raises, eq_, ne_, \
+ assert_raises_message
from sqlalchemy.orm import mapper, Session, validates, relationship
from sqlalchemy.testing.mock import Mock, call
+from sqlalchemy import exc
class ValidatorTest(_fixtures.FixtureTest):
@@ -145,6 +147,41 @@ class ValidatorTest(_fixtures.FixtureTest):
]
)
+ def test_validator_multi_warning(self):
+ users = self.tables.users
+
+ class Foo(object):
+ @validates("name")
+ def validate_one(self, key, value):
+ pass
+
+ @validates("name")
+ def validate_two(self, key, value):
+ pass
+
+ assert_raises_message(
+ exc.InvalidRequestError,
+ "A validation function for mapped attribute "
+ "'name' on mapper Mapper|Foo|users already exists",
+ mapper, Foo, users
+ )
+
+ class Bar(object):
+ @validates("id")
+ def validate_three(self, key, value):
+ return value + 10
+
+ @validates("id", "name")
+ def validate_four(self, key, value):
+ return value + "foo"
+
+ assert_raises_message(
+ exc.InvalidRequestError,
+ "A validation function for mapped attribute "
+ "'name' on mapper Mapper|Bar|users already exists",
+ mapper, Bar, users
+ )
+
def test_validator_wo_backrefs_wo_removes(self):
self._test_validator_backrefs(False, False)