예제 #1
0
class T06_Validate(unittest.TestCase):
    """ _validate """
    def setUp(self):
        unittest.TestCase.setUp(self)
        server = gnats.Server('somehost')
        conn = FakeServerConnectionForDB(server)
        self.db = Database(server, 'testdb', conn)
        self.db.validate_field = self.my_validate_field
        self.fname_in = []
        self.pr_in = []
        self.check_cr_in = []
        self.vf_out = []

    def my_validate_field(self, fname, pr, check_cr=False):
        self.fname_in.append(fname)
        self.pr_in.append(pr)
        self.check_cr_in.append(check_cr)
        return self.vf_out.pop()

    def test_01_initial(self):
        """ initial entry fields """
        test_pr = {
            'synopsis': 'foo',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[], [], [], []]
        out = self.db._validate(test_pr, 'initial')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld multitext-fld from:'.split())
        self.assertEqual(out, {})

    def test_02_initial_errors(self):
        """ initial entry fields with errors """
        test_pr = {
            'synopsis': 'foo',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[], [1], [], [2]]
        out = self.db._validate(test_pr, 'initial')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld multitext-fld from:'.split())
        self.assertEqual(out, {
            'synopsis': [2],
            'multitext-fld': [1],
        })

    def test_03_non_scoped(self):
        """ non-scoped fields """
        test_pr = {
            'synopsis': 'foo',
            'enum-fld': 'bar',
        }
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, 'synopsis enum-fld'.split())
        self.assertEqual(out, {})

    def test_04_non_scoped_errors(self):
        """ non-scoped fields with errors """
        test_pr = {
            'synopsis': 'foo',
            'enum-fld': 'bar',
        }
        self.vf_out = [[1], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, 'synopsis enum-fld'.split())
        self.assertEqual(out, {
            'enum-fld': [1],
        })

    def test_05_scoped(self):
        """ scoped fields only """
        test_pr = {
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, 'scoped-enum-fld'.split())
        self.assertEqual(out, {})

    def test_06_scoped_error(self):
        """ scoped fields only, with error """
        test_pr = {
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[1]]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, ['scoped-enum-fld'])
        self.assertEqual(out, {
            'scoped-enum-fld{1}': [1],
        })

    def test_07_non_scoped_change_reason(self):
        """ non-scoped fields with change-reason """
        test_pr = {
            'synopsis': 'foo',
            'enum-fld': 'bar',
        }
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields-cr')
        self.assertEqual(self.fname_in, 'synopsis enum-fld'.split())
        self.assertEqual(out, {})
        self.assertEqual(self.check_cr_in, [True, True])

    def test_08_scoped_change_reason(self):
        """ scoped fields only, with change-reason"""
        test_pr = {
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields-cr')
        self.assertEqual(self.fname_in, 'scoped-enum-fld'.split())
        self.assertEqual(out, {})
        self.assertEqual(self.check_cr_in, [True])

    def test_09_scoped_and_non(self):
        """ Scoped and non-scoped fields """
        test_pr = {
            'synopsis': 'foo',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, 'synopsis scoped-enum-fld'.split())
        self.assertEqual(out, {})

    def test_10_scoped_and_non_error_scoped(self):
        """ Scoped and non-scoped fields, with scoped error """
        test_pr = {
            'synopsis': 'foo',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[1], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, 'synopsis scoped-enum-fld'.split())
        self.assertEqual(out, {
            'scoped-enum-fld{1}': [1],
        })

    def test_11_scoped_and_non_error_non(self):
        """ Scoped and non-scoped fields, with non-scoped error """
        test_pr = {
            'synopsis': 'foo',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [[], [1]]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, 'synopsis scoped-enum-fld'.split())
        self.assertEqual(out, {
            'synopsis': [1],
        })

    def test_12_skips_read_only(self):
        """ skips read-only fields """
        test_pr = {
            'synopsis': 'foo',
            'last-modified': 'bar',
        }
        self.vf_out = [[]]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in, ['synopsis'])
        self.assertEqual(out, {})

    def test_13_all_fields(self):
        """ all fields """
        test_pr = {
            'synopsis': 'foo',
            'last-modified': 'bar',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [
            [],
            [],
            [],
            [],
            [],
        ]
        out = self.db._validate(test_pr, 'all')
        self.assertEqual(
            self.fname_in,
            'synopsis enum-fld multienum-fld multitext-fld scoped-enum-fld'.
            split())
        self.assertEqual(out, {})

    def test_14_all_fields_errors(self):
        """ all fields, with errors """
        test_pr = {
            'synopsis': 'foo',
            'last-modified': 'bar',
            'identifier': [
                (1, {
                    'scoped-enum-fld': 'foo'
                }),
            ],
        }
        self.vf_out = [
            [1],
            [2],
            [],
            [],
            [],
        ]
        out = self.db._validate(test_pr, 'all')
        self.assertEqual(
            self.fname_in,
            'synopsis enum-fld multienum-fld multitext-fld scoped-enum-fld'.
            split())
        self.assertEqual(out, {
            'multitext-fld': [2],
            'scoped-enum-fld{1}': [1],
        })
예제 #2
0
class T06_Validate(unittest.TestCase):
    """ _validate """

    def setUp(self):
        unittest.TestCase.setUp(self)
        server = gnats.Server('somehost')
        conn = FakeServerConnectionForDB(server)
        self.db = Database(server, 'testdb', conn)
        self.db.validate_field = self.my_validate_field
        self.fname_in = []
        self.pr_in = []
        self.check_cr_in = []
        self.vf_out = []

    def my_validate_field(self, fname, pr, check_cr=False):
        self.fname_in.append(fname)
        self.pr_in.append(pr)
        self.check_cr_in.append(check_cr)
        return self.vf_out.pop()

    def test_01_initial(self):
        """ initial entry fields """
        test_pr = {'synopsis': 'foo',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],
                   }
        self.vf_out = [[], [], [], []]
        out = self.db._validate(test_pr, 'initial')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld multitext-fld from:'.split())
        self.assertEqual(out, {})

    def test_02_initial_errors(self):
        """ initial entry fields with errors """
        test_pr = {'synopsis': 'foo',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],
                   }
        self.vf_out = [[], [1], [], [2]]
        out = self.db._validate(test_pr, 'initial')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld multitext-fld from:'.split())
        self.assertEqual(out,
                         {'synopsis': [2], 'multitext-fld': [1],})

    def test_03_non_scoped(self):
        """ non-scoped fields """
        test_pr = {'synopsis': 'foo', 'enum-fld': 'bar',}
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld'.split())
        self.assertEqual(out, {})

    def test_04_non_scoped_errors(self):
        """ non-scoped fields with errors """
        test_pr = {'synopsis': 'foo', 'enum-fld': 'bar',}
        self.vf_out = [[1], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld'.split())
        self.assertEqual(out,
                         {'enum-fld': [1],})

    def test_05_scoped(self):
        """ scoped fields only """
        test_pr = {'identifier': [(1, {'scoped-enum-fld': 'foo'}),],}
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         'scoped-enum-fld'.split())
        self.assertEqual(out, {})

    def test_06_scoped_error(self):
        """ scoped fields only, with error """
        test_pr = {'identifier': [(1, {'scoped-enum-fld': 'foo'}),],}
        self.vf_out = [[1]]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         ['scoped-enum-fld'])
        self.assertEqual(out,
                         {'scoped-enum-fld{1}': [1],})

    def test_07_non_scoped_change_reason(self):
        """ non-scoped fields with change-reason """
        test_pr = {'synopsis': 'foo', 'enum-fld': 'bar',}
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields-cr')
        self.assertEqual(self.fname_in,
                         'synopsis enum-fld'.split())
        self.assertEqual(out, {})
        self.assertEqual(self.check_cr_in, [True, True])

    def test_08_scoped_change_reason(self):
        """ scoped fields only, with change-reason"""
        test_pr = {'identifier': [(1, {'scoped-enum-fld': 'foo'}),],}
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields-cr')
        self.assertEqual(self.fname_in,
                         'scoped-enum-fld'.split())
        self.assertEqual(out, {})
        self.assertEqual(self.check_cr_in, [True])

    def test_09_scoped_and_non(self):
        """ Scoped and non-scoped fields """
        test_pr = {'synopsis': 'foo',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],
                   }
        self.vf_out = [[], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         'synopsis scoped-enum-fld'.split())
        self.assertEqual(out, {})

    def test_10_scoped_and_non_error_scoped(self):
        """ Scoped and non-scoped fields, with scoped error """
        test_pr = {'synopsis': 'foo',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],
                   }
        self.vf_out = [[1], []]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         'synopsis scoped-enum-fld'.split())
        self.assertEqual(out,
                         {'scoped-enum-fld{1}': [1],})

    def test_11_scoped_and_non_error_non(self):
        """ Scoped and non-scoped fields, with non-scoped error """
        test_pr = {'synopsis': 'foo',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],
                   }
        self.vf_out = [[], [1]]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         'synopsis scoped-enum-fld'.split())
        self.assertEqual(out,
                         {'synopsis': [1],})

    def test_12_skips_read_only(self):
        """ skips read-only fields """
        test_pr = {'synopsis': 'foo', 'last-modified': 'bar',}
        self.vf_out = [[]]
        out = self.db._validate(test_pr, 'fields')
        self.assertEqual(self.fname_in,
                         ['synopsis'])
        self.assertEqual(out, {})

    def test_13_all_fields(self):
        """ all fields """
        test_pr = {'synopsis': 'foo', 'last-modified': 'bar',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],}
        self.vf_out = [[], [], [], [], [],]
        out = self.db._validate(test_pr, 'all')
        self.assertEqual(self.fname_in,
            'synopsis enum-fld multienum-fld multitext-fld scoped-enum-fld'.split())
        self.assertEqual(out, {})

    def test_14_all_fields_errors(self):
        """ all fields, with errors """
        test_pr = {'synopsis': 'foo', 'last-modified': 'bar',
                   'identifier': [(1, {'scoped-enum-fld': 'foo'}),],}
        self.vf_out = [[1], [2], [], [], [],]
        out = self.db._validate(test_pr, 'all')
        self.assertEqual(self.fname_in,
            'synopsis enum-fld multienum-fld multitext-fld scoped-enum-fld'.split())
        self.assertEqual(out, {'multitext-fld': [2],
                               'scoped-enum-fld{1}': [1],})