143 lines
6.1 KiB
Python
143 lines
6.1 KiB
Python
# -*- 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)
|
|
|
|
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)
|
|
|
|
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)
|
|
|
|
seq = self.env['ir.sequence']
|
|
seq16 = self.env['ir.sequence'].with_context({'ir_sequence_date': january(16)})
|
|
|
|
for i in range(1, 5):
|
|
n = seq.next_by_code('test_sequence_date_range_3')
|
|
self.assertEqual(n, str(i))
|
|
for i in range(1, 5):
|
|
n = seq16.next_by_code('test_sequence_date_range_3')
|
|
self.assertEqual(n, str(i))
|
|
for i in range(1, 5):
|
|
n = seq.next_by_code('test_sequence_date_range_4')
|
|
self.assertEqual(n, str(i))
|
|
for i in range(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()
|