[FIX] project: calculate planned hours, effective hours, total hours and progress...
[odoo/odoo.git] / addons / project / test / test_project.yml
1 -
2   Test project template feature
3
4   Create project 'OpenERP Training Programme'
5
6   !record {model: project.project, id: project_project_openerptrainingprogramme0}:
7     company_id: base.main_company
8     name: OpenERP Training Programme        
9
10   Create task 'Technical Training' for this project
11
12   !record {model: project.task, id: project_task_technicaltraining0}:
13     date_start: '2010-05-31 11:48:38'
14     name: Technical Training
15     planned_hours: 30.0
16     project_id: project_project_openerptrainingprogramme0
17     remaining_hours: 30.0
18     state: draft      
19
20   Create task 'Functional Training' for this project
21
22   !record {model: project.task, id: project_task_functionaltraining0}:
23     date_start: '2010-05-31 11:49:11'
24     name: Functional Training
25     planned_hours: 30.0
26     project_id: project_project_openerptrainingprogramme0
27     remaining_hours: 30.0
28     state: draft        
29
30   Set project as project template
31
32   !python {model: project.project}: |
33     self.set_template(cr, uid, [ref("project_project_openerptrainingprogramme0")],
34       {"lang": "en_US", "active_model": "ir.ui.menu", "active_ids": [ref("project.menu_open_view_project_all")],
35       "tz": False, "active_id": ref("project.menu_open_view_project_all"), })
36
37   Check if project in template state
38
39   !assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in template state}:
40        - state == "template"    
41
42   Create new project based on this template
43
44   !python {model: project.project}: |
45      new_prj = self.duplicate_template(cr, uid, [ref("project_project_openerptrainingprogramme0")],
46       {"lang": "en_US", "active_model": "ir.ui.menu", "active_ids": [ref("project.menu_open_view_project_all")],
47       "tz": False, "active_id": ref("project.menu_open_view_project_all"), })
48      if not new_prj:
49         raise Exception( "New project based on template not created")
50      new_id = new_prj['res_id']
51      new_prj = self.read(cr, uid, [new_id], ['name', 'state'])[0]
52      state = new_prj['state']
53      name = new_prj['name'] 
54      assert state == 'open', "Project in %s state. Project created from template project must be in open state"%state          
55
56   Reset project template to normal project  
57
58   !python {model: project.project}: |
59     self.reset_project(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids":
60       [ref("project.menu_open_view_project_all")], "tz": False, "active_model":
61       "ir.ui.menu", "project_id": False, "active_id": ref("project.menu_open_view_project_all"),
62       })
63
64   Check if project in open state
65
66   !assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in open state}:
67        - state == "open"
68        
69        
70
71       
72 -
73   Test for different project-states    
74
75   Keep project pending
76
77   !python {model: project.project}: |
78     self.set_pending(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids":
79       [ref("project.menu_open_view_project_all")], "tz": False, "active_model":
80       "ir.ui.menu", "project_id": False, "active_id": ref("project.menu_open_view_project_all"),
81       })
82
83   Check if project in pending state
84
85   !assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in pending state}:
86        - state == "pending"    
87
88   Cancel the project
89
90   !python {model: project.project}: |
91     self.set_cancel(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids":
92       [ref("project.menu_open_view_project_all")], "tz": False, "active_model":
93       "ir.ui.menu", "project_id": False, "active_id": ref("project.menu_open_view_project_all"),
94       })
95
96   Check if project in cancel state
97
98   !assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in cancel state}:
99        - state == "cancelled"
100
101   Re-open the project
102
103   !python {model: project.project}: |
104     self.set_open(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids": [ref("project.menu_open_view_project_all")],
105       "tz": False, "active_model": "ir.ui.menu", "project_id": False, "active_id":
106       ref("project.menu_open_view_project_all"), })
107
108   Check if project in open state
109
110   !assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: Project is in open state}:
111        - state == "open"
112
113
114 -
115   Test for task work allocation
116 -
117   As i cancelled my project before, i check if the task 'Technical Training' is in cancelled state
118 -
119   !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: Task is in cancelled state}:
120        - state == "cancelled"
121 -
122   Now in order to reactivate the task 'Technical Training', i click on the "Reactivate" button and fill the remaining hour field
123 -
124   !record {model: project.task.reevaluate, id: project_task_technicaltraining_remainingwiz0}:
125     remaining_hours: 30.0
126 - |
127   I click the apply button
128 -
129   !python {model: project.task.reevaluate}: |
130       self.compute_hours(cr, uid, [ref('project_task_technicaltraining_remainingwiz0')], {'active_id': ref("project_task_technicaltraining0"),'button_reactivate': True})
131 - |
132   Check if task 'Technical Training' in  open state and for other initial values
133
134   !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: Project is in open state}:
135        - state == "open"
136        - planned_hours == 30
137        - remaining_hours == 30
138        - delay_hours == 0.0
139        - effective_hours == 0.0     
140
141   Make a work task entry 'Training on OpenERP modules, models and classes' of 10 hours
142
143   !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
144     work_ids:
145       - date: '2010-05-31 15:04:22'
146         hours: 10.0
147         name: Training on OpenERP modules, models and classes
148         user_id: base.user_root
149 -
150    Check for effective hours and remaining hours, effective_hours must be equal to 10
151 -
152    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After work task of 10 hours effective_hours must be equal to 10}:
153        - remaining_hours == 20
154        - effective_hours == 10.0
155
156   Make a work task entry 'Training on OpenERP xml views' of 10 hours
157
158   !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
159     work_ids:
160       - date: '2010-06-01 15:04:46'
161         hours: 10.0
162         name: Training on OpenERP xml views
163         user_id: base.user_root
164 -
165    Check for effective hours and remaining hours, effective_hours must be equal to 20
166 -
167    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 20}:
168        - remaining_hours == 10
169        - effective_hours == 20.0
170
171   Make a work task entry 'Training on workflows' of 10 hours        
172
173   !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
174     work_ids:
175       - date: '2010-06-02 15:05:24'
176         hours: 10.0
177         name: Training on workflows
178         user_id: base.user_root
179 -
180    Check for effective hours and remaining hours, effective_hours must be equal to 30
181 -
182    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 30}:
183        - remaining_hours == 0
184        - effective_hours == 30.0
185
186   Set remaining hours of 10 hours for reevaluating the task  
187
188   !record {model: project.task.reevaluate, id: config_compute_remaining_0}:
189     remaining_hours: 10.0
190 -
191   Reevaluate the task
192
193   !python {model: project.task.reevaluate}: |
194     self.compute_hours(cr, uid, [ref("config_compute_remaining_0")], {"lang": "en_US",
195       "project_id": False, "tz": False, "active_model": "project.task", "search_default_project_id":
196       False, "search_default_user_id": 1, "search_default_current": 1, "active_ids":
197       [ref("project_task_technicaltraining0")], "active_id": ref("project_task_technicaltraining0"), })
198       
199 -
200    Check for effective hours and remaining hours, remaining_hours must be 10 while planned_hours remains 30
201 -
202    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After reevaluating the task with 10 hours remaining_hours must be 10 while planned_hours remains 30}:
203        - planned_hours == 30
204        - remaining_hours == 10.0
205        - effective_hours == 30.0
206
207   Make a work task entry 'Training on reports and wizards' of 10 hours
208
209   !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
210     work_ids:
211       - date: '2010-05-31 15:08:40'
212         hours: 10.0
213         name: Training on reports and wizards
214         user_id: base.user_root
215 -
216    Check for effective hours and remaining hours
217 -
218    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After one more work task of 10 hours effective_hours must be equal to 40 while planned_hours remains 30}:
219        - planned_hours == 30
220        - remaining_hours == 0
221        - effective_hours == 40.0
222
223   Close the task
224
225   !python {model: project.task}: |
226     self.do_close(cr, uid, [ref("project_task_technicaltraining0")], {'mail_send': False})
227
228   Check if task in done state
229
230   !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: Task is in done state}:
231        - state == "done"  
232        
233        
234 -
235   Test for task reactivation      
236 -
237   Reactivate task       
238
239   !record {model: project.task.reevaluate, id: config_compute_remaining_1}:
240     remaining_hours: 10.0   
241
242   Reevaluate the task with 10 hours remaining
243
244   !python {model: project.task.reevaluate}: |
245     self.compute_hours(cr, uid, [ref("config_compute_remaining_1")], {"lang": "en_US",
246       "project_id": False, "tz": False, "button_reactivate": True, "active_model":
247       "project.task", "search_default_project_id": False, "search_default_user_id":
248       1, "search_default_current": 1, "active_ids": [ref("project_task_technicaltraining0")], "active_id": ref("project_task_technicaltraining0"),
249       })
250 -
251    Check for effective hours and remaining hours, remaining_hours must be 10 while planned_hours remains 30
252 -
253    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After reevaluating the task with 10 hours remaining_hours must be 10 while planned_hours remains 30}:
254        - planned_hours == 30
255        - remaining_hours == 10.0
256        - effective_hours == 40.0
257
258   Make a work task entry 'Training on yml' of 5 hours
259
260   !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
261     work_ids:
262       - date: '2010-05-31 16:55:27'
263         hours: 5.0
264         name: Training on yml
265         user_id: base.user_root
266 -
267    Check for effective hours and remaining hours, remaining_hours must be 5, effective_hours must be 45
268 -
269    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After work task of 5 hours effective_hours must be equal to 45 and remaining_hours is 5}:
270        - planned_hours == 30
271        - remaining_hours == 5.0
272        - effective_hours == 45.0
273
274   Close the task
275
276   !python {model: project.task}: |
277     self.do_close(cr, uid, [ref("project_task_technicaltraining0")], {'mail_send': False})
278
279   Check if task in done state
280
281   !assert {model: project.task, id: project_task_technicaltraining0, severity: error}:
282        - state == "done"       
283 -
284    Check for effective hours and remaining hours
285 -
286    !assert {model: project.task, id: project_task_technicaltraining0, severity: error, string: After closing the task planned_hours must remain 30 effective_hours must be 45 and remaining hours must be 0}:
287        - planned_hours == 30
288        - remaining_hours == 0.0
289        - effective_hours == 45.0
290
291   Close project 'OpenERP Training Programme'
292
293   !python {model: project.project}: |
294     self.set_done(cr, uid, [ref("project_project_openerptrainingprogramme0")], {"lang": "en_US", "active_ids": [ref("project.menu_open_view_project_all")],
295       "tz": False, "active_model": "ir.ui.menu", "project_id": False, "active_id":
296       ref("project.menu_open_view_project_all"), })
297
298   Check if project in close state
299
300   !assert {model: project.project, id: project_project_openerptrainingprogramme0, severity: error, string: "Project must be in closed state"}:
301        - state == "close"               
302