11# Copyright 2016-2017 LasLabs Inc.
2- # Copyright 2019 ForgeFlow.
2+ # Copyright 2025 ForgeFlow.
33# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
44
5- from collections import deque
6-
7- from odoo import api , models
5+ from odoo import models
86from odoo .tests .common import TransactionCase
97
108
119class BaseKanbanAbstractTester (models .Model ):
1210 _name = "base.kanban.abstract.tester"
1311 _description = "base kanban abstract tester"
1412 _inherit = "base.kanban.abstract"
13+ _order = "id asc"
1514
1615
1716class TestBaseKanbanAbstract (TransactionCase ):
18- def _init_test_model (self , model_cls ):
19- model_cls ._build_model (self .registry , self .cr )
20- model = self .env [model_cls ._name ]
21- # setup_models():
22- model ._prepare_setup ()
23- model ._setup_base ()
24- model ._setup_fields ()
25- model ._setup_complete ()
26- # init_models():
27- self .registry ._post_init_queue = deque ()
28- self .registry ._foreign_keys = {}
29- model ._auto_init ()
30- model .init ()
31- self .env ["ir.model" ]._reflect_models ([model ._name ])
32- self .env ["ir.model.fields" ]._reflect_fields ([model ._name ])
33- self .env ["ir.model.fields.selection" ]._reflect_selections ([model ._name ])
34- self .env ["ir.model.constraint" ]._reflect_constraints ([model ._name ])
35- while self .registry ._post_init_queue :
36- func = self .registry ._post_init_queue .popleft ()
37- func ()
38- del self .registry ._post_init_queue
39- del self .registry ._foreign_keys
40- return model
17+ @classmethod
18+ def setUpClass (cls ):
19+ super ().setUpClass ()
4120
42- def setUp (self ):
43- super ().setUp ()
21+ # Manually register and build the test model
22+ from odoo .orm import model_classes
23+
24+ registry = cls .env .registry
25+ cr = cls .env .cr
26+
27+ # Build the model if not already in registry
28+ if BaseKanbanAbstractTester ._name not in registry .models :
29+ # Add the model definition to registry
30+ model_classes .add_to_registry (registry , BaseKanbanAbstractTester )
4431
45- self .registry .enter_test_mode (self .cr )
46- self .old_cursor = self .cr
47- self .cr = self .registry .cursor ()
48- self .env = api .Environment (self .cr , self .uid , {})
49- self .test_model = self ._init_test_model (BaseKanbanAbstractTester )
32+ # Setup models
33+ registry ._setup_models__ (cr , [BaseKanbanAbstractTester ._name ])
5034
35+ # Initialize the model
36+ with cls .muted_registry_logger :
37+ registry .init_models (
38+ cr , [BaseKanbanAbstractTester ._name ], {}, install = False
39+ )
40+
41+ cls .test_model = cls .env [BaseKanbanAbstractTester ._name ]
42+
43+ def setUp (self ):
44+ super ().setUp ()
5145 test_model_record = self .env ["ir.model" ].search (
5246 [
5347 ("model" , "=" , self .test_model ._name ),
@@ -71,12 +65,8 @@ def setUp(self):
7165 )
7266
7367 def tearDown (self ):
74- self .registry .leave_test_mode ()
7568 self .registry [self .test_model ._name ]._abstract = True
7669 self .registry [self .test_model ._name ]._auto = False
77- self .cr = self .old_cursor
78- self .env = api .Environment (self .cr , self .uid , {})
79-
8070 super ().tearDown ()
8171
8272 def test_default_stage_id_no_stages (self ):
@@ -99,12 +89,11 @@ def test_default_stage_id_available_stages(self):
9989 def test_read_group_stage_ids (self ):
10090 """It should return all corresponding stages in requested sort order"""
10191 result = self .test_model ._read_group_stage_ids (
102- self .env ["base.kanban.stage" ], None , "id"
92+ self .env ["base.kanban.stage" ], None
10393 )
10494
10595 expected = self .env ["base.kanban.stage" ].search (
10696 [("res_model_id.model" , "=" , self .test_model ._name )],
107- order = "id" ,
10897 )
10998 self .assertEqual (result [0 ], expected [0 ])
11099 self .assertEqual (result [1 ], expected [1 ])
0 commit comments