@@ -662,7 +662,9 @@ func TestRevokeSharing(t *testing.T) {
662662 assert .NoError (t , err )
663663 req .Header .Add (echo .HeaderContentType , "application/vnd.api+json" )
664664 req .Header .Add (echo .HeaderAuthorization , "Bearer " + aliceAppToken )
665- _ , _ = http .DefaultClient .Do (req )
665+ res , err := http .DefaultClient .Do (req )
666+ assert .NoError (t , err )
667+ assert .Equal (t , 204 , res .StatusCode )
666668
667669 var sRevoke sharing.Sharing
668670 err = couchdb .GetDoc (aliceInstance , s .DocType (), s .SID , & sRevoke )
@@ -680,6 +682,92 @@ func TestRevokeSharing(t *testing.T) {
680682 assert .EqualError (t , err , "CouchDB(not_found): deleted" )
681683}
682684
685+ func TestRevokeRecipient (t * testing.T ) {
686+ sharedDocs := []string {"mygreatid3" , "mygreatid4" }
687+ sharedRefs := []* sharing.SharedRef {}
688+ s := createSharing (t , aliceInstance , sharedDocs )
689+ for _ , id := range sharedDocs {
690+ sid := iocozytests + "/" + id
691+ sd , errs := createSharedDoc (aliceInstance , sid , s .SID )
692+ sharedRefs = append (sharedRefs , sd )
693+ assert .NoError (t , errs )
694+ assert .NotNil (t , sd )
695+ }
696+
697+ cli , err := sharing .CreateOAuthClient (aliceInstance , & s .Members [1 ])
698+ assert .NoError (t , err )
699+ s .Credentials [0 ].Client = sharing .ConvertOAuthClient (cli )
700+ token , err := sharing .CreateAccessToken (aliceInstance , cli , s .SID )
701+ assert .NoError (t , err )
702+ s .Credentials [0 ].AccessToken = token
703+ s .Members [1 ].Status = sharing .MemberStatusReady
704+
705+ s .Members = append (s .Members , sharing.Member {
706+ Status : sharing .MemberStatusReady ,
707+ Name : "Charlie" ,
708+ Email : "charlie@cozy.local" ,
709+ Instance : tsB .URL ,
710+ })
711+ clientC , err := sharing .CreateOAuthClient (aliceInstance , & s .Members [2 ])
712+ assert .NoError (t , err )
713+ tokenC , err := sharing .CreateAccessToken (aliceInstance , clientC , s .SID )
714+ assert .NoError (t , err )
715+ s .Credentials = append (s .Credentials , sharing.Credentials {
716+ Client : sharing .ConvertOAuthClient (clientC ),
717+ AccessToken : tokenC ,
718+ })
719+
720+ err = couchdb .UpdateDoc (aliceInstance , s )
721+ assert .NoError (t , err )
722+
723+ err = s .AddTrackTriggers (aliceInstance )
724+ assert .NoError (t , err )
725+ err = s .AddReplicateTrigger (aliceInstance )
726+ assert .NoError (t , err )
727+
728+ req , err := http .NewRequest (http .MethodDelete , tsA .URL + "/sharings/" + s .ID ()+ "/recipients/1" , nil )
729+ assert .NoError (t , err )
730+ req .Header .Add (echo .HeaderContentType , "application/vnd.api+json" )
731+ req .Header .Add (echo .HeaderAuthorization , "Bearer " + aliceAppToken )
732+ res , err := http .DefaultClient .Do (req )
733+ assert .NoError (t , err )
734+ assert .Equal (t , 204 , res .StatusCode )
735+
736+ var sRevokedBob sharing.Sharing
737+ err = couchdb .GetDoc (aliceInstance , s .DocType (), s .SID , & sRevokedBob )
738+ assert .NoError (t , err )
739+
740+ assert .Equal (t , sharing .MemberStatusRevoked , sRevokedBob .Members [1 ].Status )
741+ assert .Equal (t , sharing .MemberStatusReady , sRevokedBob .Members [2 ].Status )
742+ assert .NotEmpty (t , sRevokedBob .Triggers .TrackID )
743+ assert .NotEmpty (t , sRevokedBob .Triggers .ReplicateID )
744+ assert .True (t , sRevokedBob .Active )
745+
746+ req2 , err := http .NewRequest (http .MethodDelete , tsA .URL + "/sharings/" + s .ID ()+ "/recipients/2" , nil )
747+ assert .NoError (t , err )
748+ req2 .Header .Add (echo .HeaderContentType , "application/vnd.api+json" )
749+ req2 .Header .Add (echo .HeaderAuthorization , "Bearer " + aliceAppToken )
750+ res2 , err := http .DefaultClient .Do (req2 )
751+ assert .NoError (t , err )
752+ assert .Equal (t , 204 , res2 .StatusCode )
753+
754+ var sRevokedCharlie sharing.Sharing
755+ err = couchdb .GetDoc (aliceInstance , s .DocType (), s .SID , & sRevokedCharlie )
756+ assert .NoError (t , err )
757+
758+ assert .Equal (t , sharing .MemberStatusRevoked , sRevokedCharlie .Members [1 ].Status )
759+ assert .Equal (t , sharing .MemberStatusRevoked , sRevokedCharlie .Members [2 ].Status )
760+ assert .Empty (t , sRevokedCharlie .Triggers .TrackID )
761+ assert .Empty (t , sRevokedCharlie .Triggers .ReplicateID )
762+ assert .False (t , sRevokedCharlie .Active )
763+
764+ var sdoc sharing.SharedRef
765+ err = couchdb .GetDoc (aliceInstance , sharedRefs [0 ].DocType (), sharedRefs [0 ].ID (), & sdoc )
766+ assert .EqualError (t , err , "CouchDB(not_found): deleted" )
767+ err = couchdb .GetDoc (aliceInstance , sharedRefs [1 ].DocType (), sharedRefs [1 ].ID (), & sdoc )
768+ assert .EqualError (t , err , "CouchDB(not_found): deleted" )
769+ }
770+
683771func TestMain (m * testing.M ) {
684772 config .UseTestFile ()
685773 config .GetConfig ().Assets = "../../assets"
0 commit comments