Skip to content

Commit 93adf43

Browse files
committed
[IMP] mail_activity_team: Improve test using standard methods
test
1 parent 6879039 commit 93adf43

File tree

3 files changed

+133
-64
lines changed

3 files changed

+133
-64
lines changed

mail_activity_team/models/mail_activity.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def _onchange_user_id(self):
3838
if self.team_id and self.user_id in self.team_id.member_ids:
3939
return res
4040
self.team_id = self.with_context(
41-
default_res_model=self.res_model_id.id
41+
default_res_model=self.res_model_id.model
4242
)._get_default_team_id(user_id=self.user_id.id)
4343
return res
4444

+25-28
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2018 ForgeFlow S.L.
1+
# Copyright 2018 ForgeFlow, S.L.
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
33
from odoo import api, fields, models, modules
44

@@ -17,35 +17,34 @@ def systray_get_activities(self):
1717
if not self._context.get("team_activities", False):
1818
return super().systray_get_activities()
1919
query = """SELECT m.id, count(*), act.res_model as model,
20-
CASE
21-
WHEN %(today)s::date -
22-
act.date_deadline::date = 0 Then 'today'
23-
WHEN %(today)s::date -
24-
act.date_deadline::date > 0 Then 'overdue'
25-
WHEN %(today)s::date -
26-
act.date_deadline::date < 0 Then 'planned'
27-
END AS states, act.user_id as user_id
28-
FROM mail_activity AS act
29-
JOIN ir_model AS m ON act.res_model_id = m.id
30-
WHERE team_id in (
31-
SELECT mail_activity_team_id
32-
FROM mail_activity_team_users_rel
33-
WHERE res_users_id = %(user_id)s
34-
)
35-
GROUP BY m.id, states, act.res_model, act.user_id;"""
20+
CASE
21+
WHEN %(today)s::date -
22+
act.date_deadline::date = 0 Then 'today'
23+
WHEN %(today)s::date -
24+
act.date_deadline::date > 0 Then 'overdue'
25+
WHEN %(today)s::date -
26+
act.date_deadline::date < 0 Then 'planned'
27+
END AS states, act.user_id as user_id
28+
FROM mail_activity AS act
29+
JOIN ir_model AS m ON act.res_model_id = m.id
30+
WHERE team_id in (
31+
SELECT mail_activity_team_id
32+
FROM mail_activity_team_users_rel
33+
WHERE res_users_id =
34+
%(user_id)s
35+
)
36+
GROUP BY m.id, states, act.res_model, act.user_id;
37+
"""
3638
user = self.env.uid
3739
self.env.cr.execute(
38-
query,
39-
{
40-
"today": fields.Date.context_today(self),
41-
"user_id": user,
42-
},
40+
query, {"today": fields.Date.context_today(self), "user_id": user}
4341
)
4442
activity_data = self.env.cr.dictfetchall()
4543
model_ids = [a["id"] for a in activity_data]
4644
model_names = {
4745
n[0]: n[1] for n in self.env["ir.model"].browse(model_ids).name_get()
4846
}
47+
4948
user_activities = {}
5049
for activity in activity_data:
5150
if not user_activities.get(activity["model"]):
@@ -64,11 +63,9 @@ def systray_get_activities(self):
6463
user_activities[activity["model"]][
6564
"%s_count" % activity["states"]
6665
] += activity["count"]
67-
if activity["states"] in ("today", "overdue"):
68-
user_activities[activity["model"]]["total_count"] += activity["count"]
69-
if activity["user_id"] == user and activity["states"] in (
70-
"today",
71-
"overdue",
66+
if (
67+
activity["states"] in ("today", "overdue")
68+
and activity["user_id"] != user
7269
):
73-
user_activities[activity["model"]]["total_count"] -= activity["count"]
70+
user_activities[activity["model"]]["total_count"] += activity["count"]
7471
return list(user_activities.values())

mail_activity_team/tests/test_mail_activity_team.py

+107-35
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# Copyright 2018 ForgeFlow, S.L.
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
33
from odoo.exceptions import ValidationError
4-
from odoo.tests.common import TransactionCase
4+
from odoo.tests.common import Form, SavepointCase
55

66

7-
class TestMailActivityTeam(TransactionCase):
8-
def setUp(self):
9-
super(TestMailActivityTeam, self).setUp()
10-
7+
class TestMailActivityTeam(SavepointCase):
8+
@classmethod
9+
def setUpClass(cls):
10+
super().setUpClass()
11+
self = cls
1112
self.env["mail.activity.team"].search([]).unlink()
1213

1314
self.employee = self.env["res.users"].create(
@@ -125,6 +126,18 @@ def setUp(self):
125126
}
126127
)
127128

129+
def test_activity_members(self):
130+
self.team1.member_ids |= self.employee2
131+
self.partner_client.refresh()
132+
self.assertIn(self.employee2, self.partner_client.activity_team_user_ids)
133+
self.assertIn(self.employee, self.partner_client.activity_team_user_ids)
134+
self.assertEqual(
135+
self.partner_client,
136+
self.env["res.partner"].search(
137+
[("activity_team_user_ids", "=", self.employee.id)]
138+
),
139+
)
140+
128141
def test_team_and_user_onchange(self):
129142
with self.assertRaises(ValidationError):
130143
self.team1.member_ids = [(3, self.employee.id)]
@@ -139,46 +152,88 @@ def test_missing_activities(self):
139152
self.assertEqual(self.team1.count_missing_activities, 0)
140153
self.assertEqual(self.act1.team_id, self.team1)
141154

142-
def test_team_onchanges(self):
143-
self.assertFalse(
144-
self.team2.user_id, "Error: Team 2 should not have a Team Leader yet."
145-
)
146-
self.team2.user_id = self.employee
147-
self.team2.member_ids = [(3, self.employee.id)]
148-
self.team2._onchange_member_ids()
149-
self.assertFalse(self.team2.user_id)
150-
151155
def test_leader_onchange(self):
152156
self.team2.user_id = self.employee3
153157
self.team2._onchange_user_id()
154158
self.assertTrue(self.employee3 in self.team2.member_ids)
155159

156-
def test_activity_onchanges(self):
160+
def test_activity_onchanges_keep_user(self):
161+
self.assertEqual(
162+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
163+
)
164+
with Form(self.act2) as form:
165+
form.team_id = self.env["mail.activity.team"]
166+
self.assertEqual(form.user_id, self.employee)
167+
168+
def test_activity_onchanges_user_no_member_team(self):
169+
self.assertEqual(
170+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
171+
)
172+
with Form(self.act2) as form:
173+
form.user_id = self.employee2
174+
self.assertEqual(form.team_id, self.team2)
175+
176+
def test_activity_onchanges_user_no_team(self):
177+
self.assertEqual(
178+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
179+
)
180+
with Form(self.act2) as form:
181+
form.team_id = self.env["mail.activity.team"]
182+
form.user_id = self.employee2
183+
self.assertEqual(form.team_id, self.team2)
184+
185+
def test_activity_onchanges_team_no_member(self):
186+
self.assertEqual(
187+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
188+
)
189+
self.team2.user_id = False
190+
self.team2.member_ids = False
191+
with Form(self.act2) as form:
192+
form.team_id = self.team2
193+
self.assertFalse(form.user_id)
194+
195+
def test_activity_onchanges_team_different_member(self):
196+
self.assertEqual(
197+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
198+
)
199+
self.team2.user_id = self.employee2
200+
self.team2.member_ids = self.employee2
201+
with Form(self.act2) as form:
202+
form.team_id = self.team2
203+
self.assertEqual(form.user_id, self.employee2)
204+
205+
def test_activity_onchanges_team_different_member_no_leader(self):
206+
self.assertEqual(
207+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
208+
)
209+
self.team2.user_id = False
210+
self.team2.member_ids = self.employee2
211+
with Form(self.act2) as form:
212+
form.team_id = self.team2
213+
self.assertEqual(form.user_id, self.employee2)
214+
215+
def test_activity_onchanges_activity_type_set_team(self):
216+
self.assertEqual(
217+
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
218+
)
219+
self.activity1.default_team_id = self.team2
220+
self.assertEqual(self.act2.activity_type_id, self.activity2)
221+
with Form(self.act2) as form:
222+
form.activity_type_id = self.activity1
223+
self.assertEqual(form.team_id, self.team2)
224+
225+
def test_activity_onchanges_activity_type_no_team(self):
157226
self.assertEqual(
158227
self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1."
159228
)
160-
self.act2.team_id = False
161-
self.act2._onchange_team_id()
162-
self.assertEqual(self.act2.user_id, self.employee)
163-
self.act2.team_id = self.team2
164-
self.act2._onchange_team_id()
165-
self.assertEqual(self.act2.user_id, self.employee)
166-
self.act2.user_id = self.employee2
167-
self.act2._onchange_user_id()
168-
self.assertEqual(self.act2.team_id, self.team2)
229+
self.assertEqual(self.act2.activity_type_id, self.activity2)
230+
with Form(self.act2) as form:
231+
form.activity_type_id = self.activity1
232+
self.assertEqual(form.team_id, self.team1)
233+
234+
def test_activity_constrain(self):
169235
with self.assertRaises(ValidationError):
170236
self.act2.write({"user_id": self.employee2.id, "team_id": self.team1.id})
171-
self.team1.user_id = False
172-
self.act2.user_id = False
173-
self.act2._onchange_user_id()
174-
self.team2.member_ids = [(4, self.employee3.id)]
175-
self.act2.team_id = self.team1
176-
self.act2.team_id = False
177-
self.act2.user_id = self.employee3
178-
self.act2._onchange_user_id()
179-
self.act2.team_id = self.team2
180-
self.team2.member_ids = [(3, self.act2.user_id.id)]
181-
self.act2._onchange_team_id()
182237

183238
def test_schedule_activity(self):
184239
"""Correctly assign teams to auto scheduled activities. Those won't
@@ -222,6 +277,23 @@ def test_activity_count(self):
222277
.systray_get_activities()
223278
)
224279
self.assertEqual(res[0]["total_count"], 0)
280+
self.assertEqual(res[0]["today_count"], 1)
281+
partner_record = self.employee.partner_id.with_user(self.employee.id)
282+
self.activity2.default_team_id = self.team2
283+
activity = partner_record.activity_schedule(
284+
activity_type_id=self.activity2.id, user_id=self.employee2.id
285+
)
286+
activity.flush()
287+
res = (
288+
self.env["res.users"]
289+
.with_user(self.employee.id)
290+
.with_context({"team_activities": True})
291+
.systray_get_activities()
292+
)
293+
self.assertEqual(res[0]["total_count"], 1)
294+
self.assertEqual(res[0]["today_count"], 2)
295+
res = self.env["res.users"].with_user(self.employee.id).systray_get_activities()
296+
self.assertEqual(res[0]["total_count"], 2)
225297

226298
def test_activity_schedule_next(self):
227299
self.activity1.write(

0 commit comments

Comments
 (0)