1111from core import factories , models
1212from core .api import serializers
1313from 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+ )
1417
1518pytestmark = pytest .mark .django_db
1619
@@ -316,7 +319,11 @@ def test_api_document_accesses_update_authenticated_reader_or_editor(
316319
317320
318321@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+ ):
320327 """
321328 A user who is a direct administrator in a document should be allowed to update a user
322329 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_
351358
352359 for field , value in new_values .items ():
353360 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+ )
363367 assert response .status_code == 403
364368 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
366376
367377 access .refresh_from_db ()
368378 updated_values = serializers .DocumentAccessSerializer (instance = access ).data
@@ -420,7 +430,11 @@ def test_api_document_accesses_update_administrator_from_owner(via, mock_user_te
420430
421431
422432@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+ ):
424438 """
425439 A user who is an administrator in a document, should not be allowed to update
426440 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
457471
458472 for field , value in new_values .items ():
459473 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- )
465474 # We are not allowed or not really updating the role
466475 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+
467482 assert response .status_code == 403
468483 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
470491
471492 access .refresh_from_db ()
472493 updated_values = serializers .DocumentAccessSerializer (instance = access ).data
473494 assert updated_values == old_values
474495
475496
476497@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+ ):
478503 """
479504 A user who is an owner in a document should be allowed to update
480505 a user access for this document whatever the role.
@@ -507,18 +532,24 @@ def test_api_document_accesses_update_owner(via, mock_user_teams):
507532
508533 for field , value in new_values .items ():
509534 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-
516535 if (
517536 new_data ["role" ] == old_values ["role" ]
518537 ): # 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+ )
519543 assert response .status_code == 403
520544 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
522553
523554 access .refresh_from_db ()
524555 updated_values = serializers .DocumentAccessSerializer (instance = access ).data
@@ -530,7 +561,11 @@ def test_api_document_accesses_update_owner(via, mock_user_teams):
530561
531562
532563@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+ ):
534569 """
535570 A user who is owner of a document should be allowed to update
536571 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):
568603 # Add another owner and it should now work
569604 factories .UserDocumentAccessFactory (document = document , role = "owner" )
570605
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+ )
582619
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
586623
587624
588625# Delete
@@ -656,7 +693,9 @@ def test_api_document_accesses_delete_reader_or_editor(via, role, mock_user_team
656693
657694@pytest .mark .parametrize ("via" , VIA )
658695def 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
660699):
661700 """
662701 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(
685724 assert models .DocumentAccess .objects .count () == 2
686725 assert models .DocumentAccess .objects .filter (user = access .user ).exists ()
687726
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+ )
691731
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
694734
695735
696736@pytest .mark .parametrize ("via" , VIA )
@@ -729,7 +769,11 @@ def test_api_document_accesses_delete_administrator_on_owners(via, mock_user_tea
729769
730770
731771@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+ ):
733777 """
734778 Users should be able to delete the document access of another user
735779 for a document of which they are owner.
@@ -753,12 +797,13 @@ def test_api_document_accesses_delete_owners(via, mock_user_teams):
753797 assert models .DocumentAccess .objects .count () == 2
754798 assert models .DocumentAccess .objects .filter (user = access .user ).exists ()
755799
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+ )
759804
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
762807
763808
764809@pytest .mark .parametrize ("via" , VIA )
0 commit comments