summaryrefslogtreecommitdiff
path: root/odoo/addons/base/tests/test_ir_sequence_date_range.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/addons/base/tests/test_ir_sequence_date_range.py')
-rw-r--r--odoo/addons/base/tests/test_ir_sequence_date_range.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/odoo/addons/base/tests/test_ir_sequence_date_range.py b/odoo/addons/base/tests/test_ir_sequence_date_range.py
new file mode 100644
index 00000000000..147b0f26050
--- /dev/null
+++ b/odoo/addons/base/tests/test_ir_sequence_date_range.py
@@ -0,0 +1,142 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from datetime import date
+
+from odoo.tests.common import SingleTransactionCase
+from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DATE_FORMAT
+
+
+class TestIrSequenceDateRangeStandard(SingleTransactionCase):
+ """ A few tests for a 'Standard' (i.e. PostgreSQL) sequence. """
+
+ def test_ir_sequence_date_range_1_create(self):
+ """ Try to create a sequence object with date ranges enabled. """
+ seq = self.env['ir.sequence'].create({
+ 'code': 'test_sequence_date_range',
+ 'name': 'Test sequence',
+ 'use_date_range': True,
+ })
+ self.assertTrue(seq)
+
+ def test_ir_sequence_date_range_2_change_dates(self):
+ """ Draw numbers to create a first subsequence then change its date range. Then, try to draw a new number adn check a new subsequence was correctly created. """
+ year = date.today().year - 1
+ january = lambda d: date(year, 1, d).strftime(DATE_FORMAT)
+
+ seq16 = self.env['ir.sequence'].with_context({'ir_sequence_date': january(16)})
+ n = seq16.next_by_code('test_sequence_date_range')
+ self.assertEqual(n, '1')
+ n = seq16.next_by_code('test_sequence_date_range')
+ self.assertEqual(n, '2')
+
+ # modify the range of date created
+ domain = [('sequence_id.code', '=', 'test_sequence_date_range'), ('date_from', '=', january(1))]
+ seq_date_range = self.env['ir.sequence.date_range'].search(domain)
+ seq_date_range.write({'date_from': january(18)})
+ n = seq16.next_by_code('test_sequence_date_range')
+ self.assertEqual(n, '1')
+
+ # check the newly created sequence stops at the 17th of January
+ domain = [('sequence_id.code', '=', 'test_sequence_date_range'), ('date_from', '=', january(1))]
+ seq_date_range = self.env['ir.sequence.date_range'].search(domain)
+ self.assertEqual(seq_date_range.date_to, january(17))
+
+ def test_ir_sequence_date_range_3_unlink(self):
+ seq = self.env['ir.sequence'].search([('code', '=', 'test_sequence_date_range')])
+ seq.unlink()
+
+
+class TestIrSequenceDateRangeNoGap(SingleTransactionCase):
+ """ Copy of the previous tests for a 'No gap' sequence. """
+
+ def test_ir_sequence_date_range_1_create_no_gap(self):
+ """ Try to create a sequence object. """
+ seq = self.env['ir.sequence'].create({
+ 'code': 'test_sequence_date_range_2',
+ 'name': 'Test sequence',
+ 'use_date_range': True,
+ 'implementation': 'no_gap',
+ })
+ self.assertTrue(seq)
+
+ def test_ir_sequence_date_range_2_change_dates(self):
+ """ Draw numbers to create a first subsequence then change its date range. Then, try to draw a new number adn check a new subsequence was correctly created. """
+ year = date.today().year - 1
+ january = lambda d: date(year, 1, d).strftime(DATE_FORMAT)
+
+ seq16 = self.env['ir.sequence'].with_context({'ir_sequence_date': january(16)})
+ n = seq16.next_by_code('test_sequence_date_range_2')
+ self.assertEqual(n, '1')
+ n = seq16.next_by_code('test_sequence_date_range_2')
+ self.assertEqual(n, '2')
+
+ # modify the range of date created
+ domain = [('sequence_id.code', '=', 'test_sequence_date_range_2'), ('date_from', '=', january(1))]
+ seq_date_range = self.env['ir.sequence.date_range'].search(domain)
+ seq_date_range.write({'date_from': january(18)})
+ n = seq16.next_by_code('test_sequence_date_range_2')
+ self.assertEqual(n, '1')
+
+ # check the newly created sequence stops at the 17th of January
+ domain = [('sequence_id.code', '=', 'test_sequence_date_range_2'), ('date_from', '=', january(1))]
+ seq_date_range = self.env['ir.sequence.date_range'].search(domain)
+ self.assertEqual(seq_date_range.date_to, january(17))
+
+ def test_ir_sequence_date_range_3_unlink(self):
+ seq = self.env['ir.sequence'].search([('code', '=', 'test_sequence_date_range_2')])
+ seq.unlink()
+
+
+class TestIrSequenceDateRangeChangeImplementation(SingleTransactionCase):
+ """ Create sequence objects and change their ``implementation`` field. """
+
+ def test_ir_sequence_date_range_1_create(self):
+ """ Try to create a sequence object. """
+ seq = self.env['ir.sequence'].create({
+ 'code': 'test_sequence_date_range_3',
+ 'name': 'Test sequence',
+ 'use_date_range': True,
+ })
+ self.assertTrue(seq)
+
+ seq = self.env['ir.sequence'].create({
+ 'code': 'test_sequence_date_range_4',
+ 'name': 'Test sequence',
+ 'use_date_range': True,
+ 'implementation': 'no_gap',
+ })
+ self.assertTrue(seq)
+
+ def test_ir_sequence_date_range_2_use(self):
+ """ Make some use of the sequences to create some subsequences """
+ year = date.today().year - 1
+ january = lambda d: date(year, 1, d).strftime(DATE_FORMAT)
+
+ seq = self.env['ir.sequence']
+ seq16 = self.env['ir.sequence'].with_context({'ir_sequence_date': january(16)})
+
+ for i in xrange(1, 5):
+ n = seq.next_by_code('test_sequence_date_range_3')
+ self.assertEqual(n, str(i))
+ for i in xrange(1, 5):
+ n = seq16.next_by_code('test_sequence_date_range_3')
+ self.assertEqual(n, str(i))
+ for i in xrange(1, 5):
+ n = seq.next_by_code('test_sequence_date_range_4')
+ self.assertEqual(n, str(i))
+ for i in xrange(1, 5):
+ n = seq16.next_by_code('test_sequence_date_range_4')
+ self.assertEqual(n, str(i))
+
+ def test_ir_sequence_date_range_3_write(self):
+ """swap the implementation method on both"""
+ domain = [('code', 'in', ['test_sequence_date_range_3', 'test_sequence_date_range_4'])]
+ seqs = self.env['ir.sequence'].search(domain)
+ seqs.write({'implementation': 'standard'})
+ seqs.write({'implementation': 'no_gap'})
+
+ def test_ir_sequence_date_range_4_unlink(self):
+ domain = [('code', 'in', ['test_sequence_date_range_3', 'test_sequence_date_range_4'])]
+ seqs = self.env['ir.sequence'].search(domain)
+ seqs.unlink()