Projet

Général

Profil

0001-wf-add-user-unlinking-option-to-anonymise-action-717.patch

Paul Marillonnet, 15 décembre 2022 09:09

Télécharger (5,24 ko)

Voir les différences:

Subject: [PATCH] wf: add user unlinking option to anonymise action (#71777)

 tests/workflow/test_carddata.py | 37 +++++++++++++++++++++++++++++++++
 tests/workflow/test_formdata.py | 37 +++++++++++++++++++++++++++++++++
 wcs/formdata.py                 |  5 +++++
 wcs/wf/anonymise.py             | 21 ++++++++++++++++++-
 4 files changed, 99 insertions(+), 1 deletion(-)
tests/workflow/test_carddata.py
1619 1619
    formdata.just_created()
1620 1620
    formdata.perform_workflow()
1621 1621
    assert carddef.data_class().count() == 0
1622

  
1623

  
1624
def test_anonymise_action_unlink_user(pub):
1625
    CardDef.wipe()
1626
    FormDef.wipe()
1627
    pub.user_class.wipe()
1628

  
1629
    user = pub.user_class()
1630
    user.email = 'test@example.net'
1631
    user.name_identifiers = ['xyz']
1632
    user.store()
1633

  
1634
    wf = Workflow(name='test-unlink-user')
1635
    wf.possible_status = Workflow.get_default_workflow().possible_status[:]
1636
    anonymise = wf.possible_status[1].add_action('anonymise', id='_anonymise', prepend=True)
1637
    anonymise.label = 'Unlink User'
1638
    anonymise.varname = 'mycard'
1639
    anonymise.unlink_user = True
1640
    wf.store()
1641

  
1642
    carddef = CardDef()
1643
    carddef.name = 'Person'
1644
    carddef.workflow_id = wf.id
1645
    carddef.store()
1646
    carddef.data_class().wipe()
1647

  
1648
    carddata = carddef.data_class()()
1649
    carddata.data = {'0': 'Foo', '1': 'Bar'}
1650
    carddata.user_id = user.id
1651
    carddata.just_created()
1652
    carddata.store()
1653

  
1654
    assert carddef.data_class().select()[0].user.id == user.id
1655

  
1656
    carddata.perform_workflow()
1657

  
1658
    assert carddef.data_class().select()[0].user is None
tests/workflow/test_formdata.py
398 398
    formdata.perform_workflow()
399 399
    assert target_formdef.data_class().count() == 2
400 400
    assert formdata.submission_context == {'a': 'b'}
401

  
402

  
403
def test_anonymise_action_unlink_user(pub):
404
    CardDef.wipe()
405
    FormDef.wipe()
406
    pub.user_class.wipe()
407

  
408
    user = pub.user_class()
409
    user.email = 'test@example.net'
410
    user.name_identifiers = ['xyz']
411
    user.store()
412

  
413
    wf = Workflow(name='test-unlink-user')
414
    wf.possible_status = Workflow.get_default_workflow().possible_status[:]
415
    anonymise = wf.possible_status[1].add_action('anonymise', id='_anonymise', prepend=True)
416
    anonymise.label = 'Unlink User'
417
    anonymise.varname = 'mycard'
418
    anonymise.unlink_user = True
419
    wf.store()
420

  
421
    formdef = FormDef()
422
    formdef.name = 'Person'
423
    formdef.workflow_id = wf.id
424
    formdef.store()
425
    formdef.data_class().wipe()
426

  
427
    formdata = formdef.data_class()()
428
    formdata.data = {'0': 'Foo', '1': 'Bar'}
429
    formdata.user_id = user.id
430
    formdata.just_created()
431
    formdata.store()
432

  
433
    assert formdef.data_class().select()[0].user.id == user.id
434

  
435
    formdata.perform_workflow()
436

  
437
    assert formdef.data_class().select()[0].user is None
wcs/formdata.py
1266 1266
        self._store_all_evolution = True
1267 1267
        self.store()
1268 1268

  
1269
    def unlink_user(self):
1270
        if self.user_id:
1271
            self.user_id = None
1272
            self.store()
1273

  
1269 1274
    def get_display_name(self):
1270 1275
        return _('%(name)s #%(id)s') % {'name': self.formdef.name, 'id': self.get_display_id()}
1271 1276

  
wcs/wf/anonymise.py
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
from wcs.qommon import _
18
from wcs.qommon.form import CheckboxWidget
18 19
from wcs.workflows import WorkflowStatusItem, register_item_class
19 20

  
20 21

  
......
22 23
    description = _('Anonymisation')
23 24
    key = 'anonymise'
24 25
    category = 'formdata-action'
26
    unlink_user = False
25 27

  
26 28
    def perform(self, formdata):
27
        formdata.anonymise()
29
        if self.unlink_user is True:
30
            formdata.unlink_user()
31
        else:
32
            formdata.anonymise()
33

  
34
    def get_parameters(self):
35
        return ('unlink_user',)
36

  
37
    def add_parameters_widgets(self, form, parameters, prefix='', formdef=None, **kwargs):
38
        super().add_parameters_widgets(form, parameters, prefix, formdef, **kwargs)
39
        if 'unlink_user' in parameters:
40
            form.add(
41
                CheckboxWidget,
42
                '%sunlink_user' % prefix,
43
                title=_('Only perform form/card user unlinking'),
44
                hint=_('If checked, this action will only unlink user from the form/card.'),
45
                value=self.unlink_user,
46
            )
28 47

  
29 48

  
30 49
register_item_class(AnonymiseWorkflowStatusItem)
31
-