11
11
from core import factories , models
12
12
from core .api import serializers
13
13
from core .tests .conftest import TEAM , USER , VIA
14
+ from core .tests .test_services_collaboration_services import ( # pylint: disable=unused-import
15
+ mock_reset_connections ,
16
+ )
14
17
15
18
pytestmark = pytest .mark .django_db
16
19
@@ -316,7 +319,11 @@ def test_api_document_accesses_update_authenticated_reader_or_editor(
316
319
317
320
318
321
@pytest .mark .parametrize ("via" , VIA )
319
- def test_api_document_accesses_update_administrator_except_owner (via , mock_user_teams ):
322
+ def test_api_document_accesses_update_administrator_except_owner (
323
+ via ,
324
+ mock_user_teams ,
325
+ mock_reset_connections , # pylint: disable=redefined-outer-name
326
+ ):
320
327
"""
321
328
A user who is a direct administrator in a document should be allowed to update a user
322
329
access for this document, as long as they don't try to set the role to owner.
@@ -351,18 +358,21 @@ def test_api_document_accesses_update_administrator_except_owner(via, mock_user_
351
358
352
359
for field , value in new_values .items ():
353
360
new_data = {** old_values , field : value }
354
- response = client .put (
355
- f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
356
- data = new_data ,
357
- format = "json" ,
358
- )
359
-
360
- if (
361
- new_data ["role" ] == old_values ["role" ]
362
- ): # we are not really updating the role
361
+ if new_data ["role" ] == old_values ["role" ]:
362
+ response = client .put (
363
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
364
+ data = new_data ,
365
+ format = "json" ,
366
+ )
363
367
assert response .status_code == 403
364
368
else :
365
- assert response .status_code == 200
369
+ with mock_reset_connections (document .id , str (access .user_id )):
370
+ response = client .put (
371
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
372
+ data = new_data ,
373
+ format = "json" ,
374
+ )
375
+ assert response .status_code == 200
366
376
367
377
access .refresh_from_db ()
368
378
updated_values = serializers .DocumentAccessSerializer (instance = access ).data
@@ -420,7 +430,11 @@ def test_api_document_accesses_update_administrator_from_owner(via, mock_user_te
420
430
421
431
422
432
@pytest .mark .parametrize ("via" , VIA )
423
- def test_api_document_accesses_update_administrator_to_owner (via , mock_user_teams ):
433
+ def test_api_document_accesses_update_administrator_to_owner (
434
+ via ,
435
+ mock_user_teams ,
436
+ mock_reset_connections , # pylint: disable=redefined-outer-name
437
+ ):
424
438
"""
425
439
A user who is an administrator in a document, should not be allowed to update
426
440
the user access of another user to grant document ownership.
@@ -457,24 +471,35 @@ def test_api_document_accesses_update_administrator_to_owner(via, mock_user_team
457
471
458
472
for field , value in new_values .items ():
459
473
new_data = {** old_values , field : value }
460
- response = client .put (
461
- f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
462
- data = new_data ,
463
- format = "json" ,
464
- )
465
474
# We are not allowed or not really updating the role
466
475
if field == "role" or new_data ["role" ] == old_values ["role" ]:
476
+ response = client .put (
477
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
478
+ data = new_data ,
479
+ format = "json" ,
480
+ )
481
+
467
482
assert response .status_code == 403
468
483
else :
469
- assert response .status_code == 200
484
+ with mock_reset_connections (document .id , str (access .user_id )):
485
+ response = client .put (
486
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
487
+ data = new_data ,
488
+ format = "json" ,
489
+ )
490
+ assert response .status_code == 200
470
491
471
492
access .refresh_from_db ()
472
493
updated_values = serializers .DocumentAccessSerializer (instance = access ).data
473
494
assert updated_values == old_values
474
495
475
496
476
497
@pytest .mark .parametrize ("via" , VIA )
477
- def test_api_document_accesses_update_owner (via , mock_user_teams ):
498
+ def test_api_document_accesses_update_owner (
499
+ via ,
500
+ mock_user_teams ,
501
+ mock_reset_connections , # pylint: disable=redefined-outer-name
502
+ ):
478
503
"""
479
504
A user who is an owner in a document should be allowed to update
480
505
a user access for this document whatever the role.
@@ -507,18 +532,24 @@ def test_api_document_accesses_update_owner(via, mock_user_teams):
507
532
508
533
for field , value in new_values .items ():
509
534
new_data = {** old_values , field : value }
510
- response = client .put (
511
- f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
512
- data = new_data ,
513
- format = "json" ,
514
- )
515
-
516
535
if (
517
536
new_data ["role" ] == old_values ["role" ]
518
537
): # we are not really updating the role
538
+ response = client .put (
539
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
540
+ data = new_data ,
541
+ format = "json" ,
542
+ )
519
543
assert response .status_code == 403
520
544
else :
521
- assert response .status_code == 200
545
+ with mock_reset_connections (document .id , str (access .user_id )):
546
+ response = client .put (
547
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
548
+ data = new_data ,
549
+ format = "json" ,
550
+ )
551
+
552
+ assert response .status_code == 200
522
553
523
554
access .refresh_from_db ()
524
555
updated_values = serializers .DocumentAccessSerializer (instance = access ).data
@@ -530,7 +561,11 @@ def test_api_document_accesses_update_owner(via, mock_user_teams):
530
561
531
562
532
563
@pytest .mark .parametrize ("via" , VIA )
533
- def test_api_document_accesses_update_owner_self (via , mock_user_teams ):
564
+ def test_api_document_accesses_update_owner_self (
565
+ via ,
566
+ mock_user_teams ,
567
+ mock_reset_connections , # pylint: disable=redefined-outer-name
568
+ ):
534
569
"""
535
570
A user who is owner of a document should be allowed to update
536
571
their own user access provided there are other owners in the document.
@@ -568,21 +603,23 @@ def test_api_document_accesses_update_owner_self(via, mock_user_teams):
568
603
# Add another owner and it should now work
569
604
factories .UserDocumentAccessFactory (document = document , role = "owner" )
570
605
571
- response = client .put (
572
- f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
573
- data = {
574
- ** old_values ,
575
- "role" : new_role ,
576
- "user_id" : old_values .get ("user" , {}).get ("id" )
577
- if old_values .get ("user" ) is not None
578
- else None ,
579
- },
580
- format = "json" ,
581
- )
606
+ user_id = str (access .user_id ) if via == USER else None
607
+ with mock_reset_connections (document .id , user_id ):
608
+ response = client .put (
609
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
610
+ data = {
611
+ ** old_values ,
612
+ "role" : new_role ,
613
+ "user_id" : old_values .get ("user" , {}).get ("id" )
614
+ if old_values .get ("user" ) is not None
615
+ else None ,
616
+ },
617
+ format = "json" ,
618
+ )
582
619
583
- assert response .status_code == 200
584
- access .refresh_from_db ()
585
- assert access .role == new_role
620
+ assert response .status_code == 200
621
+ access .refresh_from_db ()
622
+ assert access .role == new_role
586
623
587
624
588
625
# Delete
@@ -656,7 +693,9 @@ def test_api_document_accesses_delete_reader_or_editor(via, role, mock_user_team
656
693
657
694
@pytest .mark .parametrize ("via" , VIA )
658
695
def test_api_document_accesses_delete_administrators_except_owners (
659
- via , mock_user_teams
696
+ via ,
697
+ mock_user_teams ,
698
+ mock_reset_connections , # pylint: disable=redefined-outer-name
660
699
):
661
700
"""
662
701
Users who are administrators in a document should be allowed to delete an access
@@ -685,12 +724,13 @@ def test_api_document_accesses_delete_administrators_except_owners(
685
724
assert models .DocumentAccess .objects .count () == 2
686
725
assert models .DocumentAccess .objects .filter (user = access .user ).exists ()
687
726
688
- response = client .delete (
689
- f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
690
- )
727
+ with mock_reset_connections (document .id , str (access .user_id )):
728
+ response = client .delete (
729
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
730
+ )
691
731
692
- assert response .status_code == 204
693
- assert models .DocumentAccess .objects .count () == 1
732
+ assert response .status_code == 204
733
+ assert models .DocumentAccess .objects .count () == 1
694
734
695
735
696
736
@pytest .mark .parametrize ("via" , VIA )
@@ -729,7 +769,11 @@ def test_api_document_accesses_delete_administrator_on_owners(via, mock_user_tea
729
769
730
770
731
771
@pytest .mark .parametrize ("via" , VIA )
732
- def test_api_document_accesses_delete_owners (via , mock_user_teams ):
772
+ def test_api_document_accesses_delete_owners (
773
+ via ,
774
+ mock_user_teams ,
775
+ mock_reset_connections , # pylint: disable=redefined-outer-name
776
+ ):
733
777
"""
734
778
Users should be able to delete the document access of another user
735
779
for a document of which they are owner.
@@ -753,12 +797,13 @@ def test_api_document_accesses_delete_owners(via, mock_user_teams):
753
797
assert models .DocumentAccess .objects .count () == 2
754
798
assert models .DocumentAccess .objects .filter (user = access .user ).exists ()
755
799
756
- response = client .delete (
757
- f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
758
- )
800
+ with mock_reset_connections (document .id , str (access .user_id )):
801
+ response = client .delete (
802
+ f"/api/v1.0/documents/{ document .id !s} /accesses/{ access .id !s} /" ,
803
+ )
759
804
760
- assert response .status_code == 204
761
- assert models .DocumentAccess .objects .count () == 1
805
+ assert response .status_code == 204
806
+ assert models .DocumentAccess .objects .count () == 1
762
807
763
808
764
809
@pytest .mark .parametrize ("via" , VIA )
0 commit comments