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], })
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],})