[IMP] Make wizard work
[odoo/odoo.git] / openerp / tests / test_ir_filters.py
index c27583f..daf58a3 100644 (file)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 import functools
 
-import openerp
-import common
+from openerp import exceptions
+from . import common
 
 class Fixtures(object):
     def __init__(self, *args):
@@ -42,10 +42,10 @@ class TestGetFilters(common.TransactionCase):
             self.cr, self.USER_ID, 'ir.filters')
 
         self.assertItemsEqual(map(noid, filters), [
-            dict(name='a', user_id=self.USER, domain='[]', context='{}'),
-            dict(name='b', user_id=self.USER, domain='[]', context='{}'),
-            dict(name='c', user_id=self.USER, domain='[]', context='{}'),
-            dict(name='d', user_id=self.USER, domain='[]', context='{}'),
+            dict(name='a', is_default=False, user_id=self.USER, domain='[]', context='{}'),
+            dict(name='b', is_default=False, user_id=self.USER, domain='[]', context='{}'),
+            dict(name='c', is_default=False, user_id=self.USER, domain='[]', context='{}'),
+            dict(name='d', is_default=False, user_id=self.USER, domain='[]', context='{}'),
         ])
 
     @fixtures(
@@ -59,10 +59,10 @@ class TestGetFilters(common.TransactionCase):
             self.cr, self.USER_ID, 'ir.filters')
 
         self.assertItemsEqual(map(noid, filters), [
-            dict(name='a', user_id=False, domain='[]', context='{}'),
-            dict(name='b', user_id=False, domain='[]', context='{}'),
-            dict(name='c', user_id=False, domain='[]', context='{}'),
-            dict(name='d', user_id=False, domain='[]', context='{}'),
+            dict(name='a', is_default=False, user_id=False, domain='[]', context='{}'),
+            dict(name='b', is_default=False, user_id=False, domain='[]', context='{}'),
+            dict(name='c', is_default=False, user_id=False, domain='[]', context='{}'),
+            dict(name='d', is_default=False, user_id=False, domain='[]', context='{}'),
         ])
 
     @fixtures(
@@ -76,7 +76,188 @@ class TestGetFilters(common.TransactionCase):
             self.cr, self.USER_ID, 'ir.filters')
 
         self.assertItemsEqual(map(noid, filters), [
-            dict(name='a', user_id=False, domain='[]', context='{}'),
-            dict(name='c', user_id=self.USER, domain='[]', context='{}'),
+            dict(name='a', is_default=False, user_id=False, domain='[]', context='{}'),
+            dict(name='c', is_default=False, user_id=self.USER, domain='[]', context='{}'),
         ])
 
+class TestOwnDefaults(common.TransactionCase):
+    USER_ID = 3
+    USER = (3, u'Demo User')
+
+    def test_new_no_filter(self):
+        """
+        When creating a @is_default filter with no existing filter, that new
+        filter gets the default flag
+        """
+        Filters = self.registry('ir.filters')
+        Filters.create_or_replace(self.cr, self.USER_ID, {
+            'name': 'a',
+            'model_id': 'ir.filters',
+            'user_id': self.USER_ID,
+            'is_default': True,
+        })
+        filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters')
+
+        self.assertItemsEqual(map(noid, filters), [
+            dict(name='a', user_id=self.USER, is_default=True,
+                 domain='[]', context='{}')
+        ])
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=USER_ID, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', user_id=USER_ID, model_id='ir.filters')),
+    )
+    def test_new_filter_not_default(self):
+        """
+        When creating a @is_default filter with existing non-default filters,
+        the new filter gets the flag
+        """
+        Filters = self.registry('ir.filters')
+        Filters.create_or_replace(self.cr, self.USER_ID, {
+            'name': 'c',
+            'model_id': 'ir.filters',
+            'user_id': self.USER_ID,
+            'is_default': True,
+        })
+        filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters')
+
+        self.assertItemsEqual(map(noid, filters), [
+            dict(name='a', user_id=self.USER, is_default=False, domain='[]', context='{}'),
+            dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}'),
+            dict(name='c', user_id=self.USER, is_default=True, domain='[]', context='{}'),
+        ])
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=USER_ID, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', is_default=True, user_id=USER_ID, model_id='ir.filters')),
+    )
+    def test_new_filter_existing_default(self):
+        """
+        When creating a @is_default filter where an existing filter is already
+        @is_default, the flag should be *moved* from the old to the new filter
+        """
+        Filters = self.registry('ir.filters')
+        Filters.create_or_replace(self.cr, self.USER_ID, {
+            'name': 'c',
+            'model_id': 'ir.filters',
+            'user_id': self.USER_ID,
+            'is_default': True,
+        })
+        filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters')
+
+        self.assertItemsEqual(map(noid, filters), [
+            dict(name='a', user_id=self.USER, is_default=False, domain='[]', context='{}'),
+            dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}'),
+            dict(name='c', user_id=self.USER, is_default=True, domain='[]', context='{}'),
+        ])
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=USER_ID, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', is_default=True, user_id=USER_ID, model_id='ir.filters')),
+    )
+    def test_update_filter_set_default(self):
+        """
+        When updating an existing filter to @is_default, if an other filter
+        already has the flag the flag should be moved
+        """
+        Filters = self.registry('ir.filters')
+        Filters.create_or_replace(self.cr, self.USER_ID, {
+            'name': 'a',
+            'model_id': 'ir.filters',
+            'user_id': self.USER_ID,
+            'is_default': True,
+        })
+        filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters')
+
+        self.assertItemsEqual(map(noid, filters), [
+            dict(name='a', user_id=self.USER, is_default=True, domain='[]', context='{}'),
+            dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}'),
+        ])
+
+class TestGlobalDefaults(common.TransactionCase):
+    USER_ID = 3
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=False, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', user_id=False, model_id='ir.filters')),
+    )
+    def test_new_filter_not_default(self):
+        """
+        When creating a @is_default filter with existing non-default filters,
+        the new filter gets the flag
+        """
+        Filters = self.registry('ir.filters')
+        Filters.create_or_replace(self.cr, self.USER_ID, {
+            'name': 'c',
+            'model_id': 'ir.filters',
+            'user_id': False,
+            'is_default': True,
+        })
+        filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters')
+
+        self.assertItemsEqual(map(noid, filters), [
+            dict(name='a', user_id=False, is_default=False, domain='[]', context='{}'),
+            dict(name='b', user_id=False, is_default=False, domain='[]', context='{}'),
+            dict(name='c', user_id=False, is_default=True, domain='[]', context='{}'),
+        ])
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=False, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', is_default=True, user_id=False, model_id='ir.filters')),
+    )
+    def test_new_filter_existing_default(self):
+        """
+        When creating a @is_default filter where an existing filter is already
+        @is_default, an error should be generated
+        """
+        Filters = self.registry('ir.filters')
+        with self.assertRaises(exceptions.Warning):
+            Filters.create_or_replace(self.cr, self.USER_ID, {
+                'name': 'c',
+                'model_id': 'ir.filters',
+                'user_id': False,
+                'is_default': True,
+            })
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=False, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', is_default=True, user_id=False, model_id='ir.filters')),
+    )
+    def test_update_filter_set_default(self):
+        """
+        When updating an existing filter to @is_default, if an other filter
+        already has the flag an error should be generated
+        """
+        Filters = self.registry('ir.filters')
+
+        with self.assertRaises(exceptions.Warning):
+            Filters.create_or_replace(self.cr, self.USER_ID, {
+                'name': 'a',
+                'model_id': 'ir.filters',
+                'user_id': False,
+                'is_default': True,
+            })
+
+    @fixtures(
+        ('ir.filters', dict(name='a', user_id=False, model_id='ir.filters')),
+        ('ir.filters', dict(name='b', is_default=True, user_id=False, model_id='ir.filters')),
+    )
+    def test_update_default_filter(self):
+        """
+        Replacing the current default global filter should not generate any error
+        """
+        Filters = self.registry('ir.filters')
+        context_value = "{'some_key': True}"
+        Filters.create_or_replace(self.cr, self.USER_ID, {
+            'name': 'b',
+            'model_id': 'ir.filters',
+            'user_id': False,
+            'context': context_value,
+            'is_default': True,
+        })
+        filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters')
+
+        self.assertItemsEqual(map(noid, filters), [
+            dict(name='a', user_id=False, is_default=False, domain='[]', context='{}'),
+            dict(name='b', user_id=False, is_default=True, domain='[]', context=context_value),
+        ])