diff --git a/openerp/addons/base/ir/ir_sequence.py b/openerp/addons/base/ir/ir_sequence.py index b0995c914d0..34a4b0144eb 100644 --- a/openerp/addons/base/ir/ir_sequence.py +++ b/openerp/addons/base/ir/ir_sequence.py @@ -104,7 +104,7 @@ class ir_sequence(openerp.osv.osv.osv): def write(self, cr, uid, ids, values, context=None): ids = ids if isinstance(ids, (list, tuple)) else [ids] new_implementation = values.get('implementation') - rows = self.read(cr, uid, ids, ['id,' 'implementation', + rows = self.read(cr, uid, ids, ['implementation', 'number_increment', 'number_next'], context) super(ir_sequence, self).write(cr, uid, ids, values, context) diff --git a/tests/test_ir_sequence.py b/tests/test_ir_sequence.py index 0fc7aec5b50..13c40dd6eb3 100644 --- a/tests/test_ir_sequence.py +++ b/tests/test_ir_sequence.py @@ -33,51 +33,43 @@ class test_ir_sequence_standard(unittest2.TestCase): def test_ir_sequence_create(self): """ Try to create a sequence object. """ cr = cursor() - try: - d = dict(code='test_sequence_type', name='Test sequence type') - c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) - assert c - d = dict(code='test_sequence_type', name='Test sequence') - c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) - assert c - cr.commit() - finally: - cr.close() + d = dict(code='test_sequence_type', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type', name='Test sequence') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() def test_ir_sequence_search(self): """ Try a search. """ cr = cursor() - try: - ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, [], {}) - assert ids - cr.commit() - finally: - cr.close() + ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, [], {}) + assert ids + cr.commit() + cr.close() def test_ir_sequence_draw(self): """ Try to draw a number. """ cr = cursor() - try: - n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type', {}) - assert n - cr.commit() - finally: - cr.close() + n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type', {}) + assert n + cr.commit() + cr.close() def test_ir_sequence_draw_twice(self): """ Try to draw a number from two transactions. """ cr0 = cursor() cr1 = cursor() - try: - n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type', {}) - assert n0 - n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type', {}) - assert n1 - cr0.commit() - cr1.commit() - finally: - cr0.close() - cr1.close() + n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type', {}) + assert n0 + n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type', {}) + assert n1 + cr0.commit() + cr1.commit() + cr0.close() + cr1.close() class test_ir_sequence_no_gap(unittest2.TestCase): """ Copy of the previous tests for a 'No gap' sequence. """ @@ -85,27 +77,23 @@ class test_ir_sequence_no_gap(unittest2.TestCase): def test_ir_sequence_create_no_gap(self): """ Try to create a sequence object. """ cr = cursor() - try: - d = dict(code='test_sequence_type_2', name='Test sequence type') - c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) - assert c - d = dict(code='test_sequence_type_2', name='Test sequence', - implementation='no_gap') - c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) - assert c - cr.commit() - finally: - cr.close() + d = dict(code='test_sequence_type_2', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_2', name='Test sequence', + implementation='no_gap') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() def test_ir_sequence_draw_no_gap(self): """ Try to draw a number. """ cr = cursor() - try: - n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_2', {}) - assert n - cr.commit() - finally: - cr.close() + n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_2', {}) + assert n + cr.commit() + cr.close() def test_ir_sequence_draw_twice_no_gap(self): """ Try to draw a number from two transactions. @@ -113,15 +101,54 @@ class test_ir_sequence_no_gap(unittest2.TestCase): """ cr0 = cursor() cr1 = cursor() - try: - msg_re = '^could not obtain lock on row in relation "ir_sequence"$' - with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re): - n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {}) - assert n0 - n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type_2', {}) - finally: - cr0.close() - cr1.close() + msg_re = '^could not obtain lock on row in relation "ir_sequence"$' + with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re): + n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {}) + assert n0 + n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type_2', {}) + cr0.close() + cr1.close() + +class test_ir_sequence_change_implementation(unittest2.TestCase): + """ Create sequence objects and change their ``implementation`` field. """ + + def test_ir_sequence_1_create(self): + """ Try to create a sequence object. """ + cr = cursor() + d = dict(code='test_sequence_type_3', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_3', name='Test sequence') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_4', name='Test sequence type') + c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {}) + assert c + d = dict(code='test_sequence_type_4', name='Test sequence', + implementation='no_gap') + c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {}) + assert c + cr.commit() + cr.close() + + def test_ir_sequence_2_write(self): + cr = cursor() + ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, + [('code', 'in', ['test_sequence_type_3', 'test_sequence_type_4'])], {}) + registry('ir.sequence').write(cr, ADMIN_USER_ID, ids, + {'implementation': 'standard'}, {}) + registry('ir.sequence').write(cr, ADMIN_USER_ID, ids, + {'implementation': 'no_gap'}, {}) + cr.commit() + cr.close() + + def test_ir_sequence_3_unlink(self): + cr = cursor() + ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, + [('code', 'in', ['test_sequence_type_3', 'test_sequence_type_4'])], {}) + registry('ir.sequence').unlink(cr, ADMIN_USER_ID, ids, {}) + cr.commit() + cr.close() if __name__ == '__main__':