@@ -121,7 +121,6 @@ tests _ at opts p b c ch g aws userJournalWatcher =
121
121
test p " get /users/<localdomain>/:uid - 404" $ testNonExistingUser b,
122
122
test p " get /users/:domain/:uid - 422" $ testUserInvalidDomain b,
123
123
test p " get /users/:uid - 200" $ testExistingUserUnqualified b,
124
- test p " testUserSearchable" $ testUserSearchable b g,
125
124
test p " get /users/<localdomain>/:uid - 200" $ testExistingUser b,
126
125
test p " get /users?:id=.... - 200" $ testMultipleUsersUnqualified b,
127
126
test p " head /users/:uid - 200" $ testUserExistsUnqualified b,
@@ -646,97 +645,6 @@ testExistingUserUnqualified brig = do
646
645
b ^? key " id" >>= maybeFromJSON
647
646
)
648
647
649
- testUserSearchable :: Brig -> Galley -> Http ()
650
- testUserSearchable brig galley = do
651
- (owner, tid) <- createUserWithTeam brig
652
-
653
- -- Make a member in the current team
654
- let mkTeamMember :: Permissions -> Http User
655
- mkTeamMember perms = do
656
- member <- createTeamMember brig galley owner tid perms
657
- selfUser <$> (responseJsonError =<< get (brig . path " /self" . zUser (userId member)))
658
-
659
- -- Helper to change user searchability.
660
- setSearchable :: UserId -> UserId -> Bool -> Request -> Request
661
- setSearchable byZuid uid searchable =
662
- brig
663
- . paths [" users" , pack $ show uid, " searchable" ]
664
- . zUser byZuid
665
- . toJsonBody searchable
666
-
667
- -- Create user in team, default is searchable = True.
668
- u1id <- userId <$> mkTeamMember (rolePermissions RoleMember )
669
- u1p <- parseOrFail " UserProfile" (getProfile brig owner u1id )
670
- liftIO $ assertBool " created users are searchable by default" $ profileSearchable u1p
671
-
672
- -- Setting self to non-searchable won't work -- only admin can do it.
673
- post (setSearchable u1id u1id False ) !!! do
674
- const 403 === statusCode
675
- const (Just " insufficient-permissions" ) === fmap Error. label . responseJsonMaybe
676
- liftIO . assertBool " Searchable is still True" . profileSearchable =<< parseOrFail " UserProfile" (getProfile brig owner u1id )
677
-
678
- -- Team admin can set user to non-searchable.
679
- admin <- userId <$> mkTeamMember (rolePermissions RoleAdmin )
680
- post (setSearchable admin u1id False ) !!! const 200 === statusCode
681
- liftIO . assertBool " Searchable is now False" . not . profileSearchable =<< parseOrFail " UserProfile" (getProfile brig owner u1id )
682
-
683
- -- Team owner can, too.
684
- post (setSearchable owner u1id True ) !!! const 200 === statusCode
685
- post (setSearchable owner u1id False ) !!! const 200 === statusCode
686
-
687
- -- By default created team members are found.
688
- u3 <- mkTeamMember (rolePermissions RoleMember )
689
- Search. refreshIndex brig
690
- s <- Search. executeSearch brig u1id $ fromName $ userDisplayName u3
691
- liftIO $ assertBool " u1 must find u3 as they are searchable by default" $ uidsInResult [userId u3] s
692
-
693
- -- Use set to non-searchable is not found by other team members.
694
- u4 <- mkTeamMember (rolePermissions RoleMember )
695
- post (setSearchable owner (userId u4) False ) !!! const 200 === statusCode
696
- Search. refreshIndex brig
697
- s <- Search. executeSearch brig u1id $ fromName $ userDisplayName u4
698
- liftIO $ assertBool " u1 must not find u4 as they are set non-searchable" $ not $ uidsInResult [userId u4] s
699
-
700
- -- Even admin nor owner won't find non-searchable users via /search/contacts
701
- sAdmin <- Search. executeSearch brig admin $ fromName $ userDisplayName u4
702
- liftIO $ assertBool " Team admin won't find non-searchable user from /search/concatcs" $ not $ uidsInResult [userId u4] sAdmin
703
- sOwner <- Search. executeSearch brig owner $ fromName $ userDisplayName u4
704
- liftIO $ assertBool " Team owner won't find non-searchable user from /search/concatcs" $ not $ uidsInResult [userId u4] sOwner
705
-
706
- -- Exact handle search with HTTP HEAD still works for non-searchable users
707
- u4' <- setRandomHandle brig u4 -- Add handle to the non-searchable u4
708
- let u4handle = fromJust $ userHandle u4'
709
- Bilge. head (brig . paths [" handles" , toByteString' u4handle] . zUser (userId u3))
710
- !!! const 200 === statusCode
711
-
712
- -- Regular user can't find non-searchable team member by exact handle.
713
- s <- Search. executeSearch brig u1id $ fromHandle u4handle
714
- liftIO $ assertBool " u1 must not find non-searchable u4 by exact handle" $ not $ uidsInResult [userId u4] s
715
-
716
- -- /teams/:tid/members gets all members
717
- r :: Team.Member. TeamMembersPage <- parseOrFail " TeamMembersPage" $ get (galley . paths [" teams" , toByteString' tid, " members" ] . zUser u1id ) <!! const 200 === statusCode
718
- let teamMembers = mtpResults $ Team.Member. unTeamMembersPage r :: [Team.Member. TeamMemberOptPerms ]
719
- uids = map (^. Team.Member. userId) teamMembers
720
- liftIO $ assertBool " /teams/:tid/members returns searchable and non-searchable users from team" $ all (`elem` uids) $ u1id : map userId [u3, u4]
721
-
722
- -- /teams/:tid/search?searchable=false gets only non-searchable members
723
- r :: SearchResult TeamContact <- parseOrFail " SearchResult TeamContact" $
724
- get ( brig
725
- . paths [" teams" , toByteString' tid, " search" ]
726
- . queryItem " searchable" " false"
727
- . zUser admin) <!! const 200 === statusCode
728
- let uids = map teamContactUserId $ searchResults r
729
- liftIO $ assertBool " /teams/:tid/members?searchable=false returns only non-searchable members" $ userId u4 `elem` uids
730
-
731
- where
732
- contactUid :: Contact -> UserId
733
- contactUid = qUnqualified . contactQualifiedId
734
-
735
- uidsInResult :: [UserId ] -> SearchResult Contact -> Bool
736
- uidsInResult uids r = all (`elem` foundUids) uids
737
- where
738
- foundUids = map contactUid (searchResults r)
739
-
740
648
testExistingUser :: Brig -> Http ()
741
649
testExistingUser brig = do
742
650
quser <- userQualifiedId <$> randomUser brig
0 commit comments