103 lines
3.0 KiB
Python
Executable File
103 lines
3.0 KiB
Python
Executable File
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
import unittest
|
|
from unittest.mock import Mock
|
|
|
|
from trytond.model import sort
|
|
from trytond.pool import Pool
|
|
from trytond.tests.test_tryton import activate_module, with_transaction
|
|
|
|
|
|
class SequenceOrderedMixinTestCase(unittest.TestCase):
|
|
'Test SequenceOrderedMixin'
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
activate_module('tests')
|
|
|
|
@with_transaction()
|
|
def test_order(self):
|
|
'Test order'
|
|
pool = Pool()
|
|
Order = pool.get('test.order.sequence')
|
|
|
|
models = []
|
|
for i in reversed(list(range(1, 4))):
|
|
models.append(Order(sequence=i))
|
|
Order.save(models)
|
|
models.reverse()
|
|
self.assertListEqual(Order.search([]), models)
|
|
|
|
model = models.pop()
|
|
model.sequence = None
|
|
model.save()
|
|
models.insert(0, model)
|
|
|
|
self.assertListEqual(Order.search([]), models)
|
|
|
|
def test_sort(self):
|
|
"Test sort"
|
|
record1 = Mock()
|
|
record1.name = "foo"
|
|
record2 = Mock()
|
|
record2.name = "bar"
|
|
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'ASC')]),
|
|
[record2, record1])
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'DESC')]),
|
|
[record1, record2])
|
|
|
|
def test_sort_multiple(self):
|
|
"Test sort multiple"
|
|
record1 = Mock()
|
|
record1.name = "foo"
|
|
record1.id = 1
|
|
record2 = Mock()
|
|
record2.name = "foo"
|
|
record2.id = 2
|
|
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'ASC'), ('id', 'DESC')]),
|
|
[record2, record1])
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'ASC'), ('id', 'ASC')]),
|
|
[record1, record2])
|
|
|
|
def test_sort_dot(self):
|
|
"Test sort with dot"
|
|
record1 = Mock()
|
|
record1.ref = Mock()
|
|
record1.ref.name = "foo"
|
|
record2 = Mock()
|
|
record2.ref = Mock()
|
|
record2.ref.name = "bar"
|
|
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('ref.name', 'ASC')]),
|
|
[record2, record1])
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('ref.name', 'DESC')]),
|
|
[record1, record2])
|
|
|
|
def test_sort_nulls(self):
|
|
"Test sort nulls"
|
|
record1 = Mock()
|
|
record1.name = "foo"
|
|
record2 = Mock()
|
|
record2.name = None
|
|
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'ASC NULLS FIRST')]),
|
|
[record2, record1])
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'DESC NULLS FIRST')]),
|
|
[record2, record1])
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'ASC NULLS LAST')]),
|
|
[record1, record2])
|
|
self.assertListEqual(
|
|
sort([record1, record2], [('name', 'DESC NULLS LAST')]),
|
|
[record1, record2])
|