File: test_data_recycle.py

package info (click to toggle)
odoo 18.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 878,716 kB
  • sloc: javascript: 927,937; python: 685,670; xml: 388,524; sh: 1,033; sql: 415; makefile: 26
file content (83 lines) | stat: -rw-r--r-- 3,473 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# # -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from dateutil.relativedelta import relativedelta

from odoo.fields import Date

from odoo.tests.common import TransactionCase, tagged


@tagged('post_install', '-at_install', 'data_recycle')
class TestDataRecycle(TransactionCase):

    @classmethod
    def setUpClass(cls):
        super().setUpClass()

        cls.server_model = cls.env['ir.model']._get('fetchmail.server')

        cls.recycle_model = cls.env['data_recycle.model'].create({
            'name': 'Recycle Test Server',
            'res_model_id': cls.server_model.id,
            'time_field_id': cls.env['ir.model.fields'].search([('name', '=', 'date'), ('model_id', '=', cls.server_model.id)], limit=1).id,
            'time_field_delta': 1,
            'time_field_delta_unit': 'years',
            'recycle_action': 'archive',
        })

        cls.old_servers = cls.env['fetchmail.server'].create([{
            'name': 'Old Server %s' % (i),
            'date': Date.today() - relativedelta(years=2),
        } for i in range(5)])

        cls.new_servers = cls.env['fetchmail.server'].create([{
            'name': 'New Server %s' % (i),
            'date': Date.today(),
        } for i in range(5)])

    def test_recycle_flow(self):
        # Test candidate search
        self.recycle_model._recycle_records()

        self.assertEqual(len(self.recycle_model.recycle_record_ids), 5)
        self.assertEqual(set(self.recycle_model.recycle_record_ids.mapped('res_id')), set(self.old_servers.ids))

        # Test record deletion outside of the recycle scope
        self.old_servers[0].unlink()
        self.assertEqual(self.recycle_model.recycle_record_ids[0].name, '**Record Deleted**')

    def test_recycle_domain(self):
        self.recycle_model.domain = "[('name', 'not ilike', '0')]"
        self.recycle_model._recycle_records()

        self.assertEqual(len(self.recycle_model.recycle_record_ids), 4)
        self.assertTrue(self.old_servers[0].id not in self.recycle_model.recycle_record_ids.mapped('res_id'))

    def test_recycle_notification(self):
        self.recycle_model.notify_user_ids = [(4, self.env.ref('base.user_admin').id)]
        old_notif_count = self.env['mail.notification'].search_count([])
        self.recycle_model._cron_recycle_records()
        new_notif_count = self.env['mail.notification'].search_count([])
        self.assertEqual(new_notif_count, old_notif_count + 1)

    def test_recycle_archive(self):
        self.recycle_model._recycle_records()
        self.recycle_model.recycle_record_ids.action_validate()
        self.assertFalse(self.recycle_model.recycle_record_ids.exists())
        self.assertTrue(all(not p.active for p in self.old_servers))

    def test_recycle_unlink(self):
        self.recycle_model.recycle_action = 'unlink'
        self.recycle_model._recycle_records()
        self.recycle_model.recycle_record_ids.action_validate()
        self.assertFalse(self.recycle_model.recycle_record_ids.exists())
        self.assertFalse(self.old_servers.exists())

    def test_include_archived(self):
        self.old_servers[0].active = False
        self.recycle_model._recycle_records()
        self.assertEqual(len(self.recycle_model.recycle_record_ids), 4)
        self.recycle_model.include_archived = True
        self.recycle_model._recycle_records()
        self.assertEqual(len(self.recycle_model.recycle_record_ids), 5)