From 3021b3e9d5f69a2a604921a6203962ffc57b9d79 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 15 Jun 2012 09:08:55 -0400 Subject: Improve output validation We only checked the length of Command output dictionaries. A misspelled key in would not be caught. Fix the problem by checking if the sets of keys are equal. Add a test. Split the test methods into more manageable pieces. https://fedorahosted.org/freeipa/ticket/2860 --- tests/test_ipalib/test_frontend.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'tests/test_ipalib') diff --git a/tests/test_ipalib/test_frontend.py b/tests/test_ipalib/test_frontend.py index 5f7ce65fb..528609d9e 100644 --- a/tests/test_ipalib/test_frontend.py +++ b/tests/test_ipalib/test_frontend.py @@ -615,7 +615,7 @@ class test_Command(ClassChecker): assert o.run.im_func is self.cls.run.im_func assert ('forward', args, kw) == o.run(*args, **kw) - def test_validate_output(self): + def test_validate_output_basic(self): """ Test the `ipalib.frontend.Command.validate_output` method. """ @@ -646,7 +646,18 @@ class test_Command(ClassChecker): 'Example', ['azz', 'fee'], wrong ) - # Test with per item type validation: + # Test with different keys: + wrong = dict(baz=1, xyzzy=2, quux=3) + e = raises(ValueError, inst.validate_output, wrong) + assert str(e) == '%s.validate_output(): missing keys %r in %r' % ( + 'Example', ['bar', 'foo'], wrong + ), str(e) + + def test_validate_output_per_type(self): + """ + Test `ipalib.frontend.Command.validate_output` per-type validation. + """ + class Complex(self.cls): has_output = ( output.Output('foo', int), @@ -667,6 +678,11 @@ class test_Command(ClassChecker): 'Complex.validate_output()', 'bar', list, int, 17 ) + def test_validate_output_nested(self): + """ + Test `ipalib.frontend.Command.validate_output` nested validation. + """ + class Subclass(output.ListOfEntries): pass -- cgit