|
14 | 14 | from finder.models.file import FileModel |
15 | 15 | from finder.models.folder import FolderModel, PinnedFolder, ROOT_FOLDER_NAME |
16 | 16 | from finder.models.inode import DiscardedInode |
| 17 | +from finder.models.filetag import FileTag |
17 | 18 | from finder.models.permission import AccessControlEntry, Privilege |
18 | 19 |
|
19 | 20 |
|
@@ -624,3 +625,37 @@ def test_copy_inodes(admin_client, admin_user, uploaded_file, sub_folder, princi |
624 | 625 | expected_names = sorted(f"File #{s}" for s in expected_copied) |
625 | 626 | assert target_names == expected_names |
626 | 627 | assert resp_names == expected_names |
| 628 | + |
| 629 | + |
| 630 | +def test_update_file_tags(admin_client, ambit, principal_kwargs): |
| 631 | + admin_url = reverse('admin:finder_inodemodel_change', kwargs={'inode_id': ambit.root_folder.id}) |
| 632 | + existing_tag = FileTag.objects.create(ambit=ambit, label="Alpha", color='#111111') |
| 633 | + stale_tag = FileTag.objects.create(ambit=ambit, label="Stale", color='#222222') |
| 634 | + AccessControlEntry.objects.all().delete() |
| 635 | + if principal_kwargs: |
| 636 | + if 'user' in principal_kwargs: |
| 637 | + principal_kwargs['privilege'] = Privilege.FULL |
| 638 | + AccessControlEntry.objects.create(inode=ambit.root_folder_id, **principal_kwargs) |
| 639 | + |
| 640 | + payload = { |
| 641 | + 'tags': [ |
| 642 | + {'value': existing_tag.id, 'label': "Alpha Renamed", 'color': '#333333'}, |
| 643 | + {'label': "New Tag", 'color': '#444444'}, |
| 644 | + ], |
| 645 | + } |
| 646 | + response = admin_client.post(f'{admin_url}/update_tags', json.dumps(payload), content_type='application/json') |
| 647 | + if principal_kwargs and not principal_kwargs['privilege'] & Privilege.ADMIN: |
| 648 | + assert response.status_code == 403 |
| 649 | + return |
| 650 | + assert response.status_code == 200 |
| 651 | + response_tags = response.json()['tags'] |
| 652 | + existing_tag.refresh_from_db() |
| 653 | + assert existing_tag.label == "Alpha Renamed" |
| 654 | + assert existing_tag.color == '#333333' |
| 655 | + assert FileTag.objects.filter(id=stale_tag.id).exists() is False |
| 656 | + expected = { |
| 657 | + (existing_tag.id, "Alpha Renamed", '#333333'), |
| 658 | + (FileTag.objects.get(label="New Tag", ambit=ambit).id, "New Tag", '#444444'), |
| 659 | + } |
| 660 | + actual = {(entry['value'], entry['label'], entry['color']) for entry in response_tags} |
| 661 | + assert actual == expected |
0 commit comments