{-# OPTIONS_GHC -Wno-ambiguous-fields #-}
module Test.One2OneTeamConv where
import API.Galley
import Notifications (isTeamMemberJoinNotif)
import SetupHelpers
import Testlib.Prelude
data One2OneRole = One2OneMember | One2OnePartner
deriving stock ((forall x. One2OneRole -> Rep One2OneRole x)
-> (forall x. Rep One2OneRole x -> One2OneRole)
-> Generic One2OneRole
forall x. Rep One2OneRole x -> One2OneRole
forall x. One2OneRole -> Rep One2OneRole x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. One2OneRole -> Rep One2OneRole x
from :: forall x. One2OneRole -> Rep One2OneRole x
$cto :: forall x. Rep One2OneRole x -> One2OneRole
to :: forall x. Rep One2OneRole x -> One2OneRole
Generic, One2OneRole -> One2OneRole -> Bool
(One2OneRole -> One2OneRole -> Bool)
-> (One2OneRole -> One2OneRole -> Bool) -> Eq One2OneRole
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: One2OneRole -> One2OneRole -> Bool
== :: One2OneRole -> One2OneRole -> Bool
$c/= :: One2OneRole -> One2OneRole -> Bool
/= :: One2OneRole -> One2OneRole -> Bool
Eq, Int -> One2OneRole -> ShowS
[One2OneRole] -> ShowS
One2OneRole -> String
(Int -> One2OneRole -> ShowS)
-> (One2OneRole -> String)
-> ([One2OneRole] -> ShowS)
-> Show One2OneRole
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> One2OneRole -> ShowS
showsPrec :: Int -> One2OneRole -> ShowS
$cshow :: One2OneRole -> String
show :: One2OneRole -> String
$cshowList :: [One2OneRole] -> ShowS
showList :: [One2OneRole] -> ShowS
Show)
one2OneRoleName :: One2OneRole -> String
one2OneRoleName :: One2OneRole -> String
one2OneRoleName = \case
One2OneRole
One2OneMember -> String
"member"
One2OneRole
One2OnePartner -> String
"partner"
testCreateOne2OneWithMembers :: (HasCallStack) => One2OneRole -> App ()
testCreateOne2OneWithMembers :: HasCallStack => One2OneRole -> App ()
testCreateOne2OneWithMembers One2OneRole
memberRole = do
(owner, tid, []) <- Domain -> Int -> App (Value, String, [Value])
forall domain.
(HasCallStack, MakesValue domain) =>
domain -> Int -> App (Value, String, [Value])
createTeam Domain
OwnDomain Int
1
teamMember <-
withWebSockets [owner] $ \[WebSocket
wsOwner] -> do
m <- Value -> CreateTeamMember -> App Value
forall inviter.
(HasCallStack, MakesValue inviter) =>
inviter -> CreateTeamMember -> App Value
createTeamMember Value
owner CreateTeamMember
forall a. Default a => a
def {role = one2OneRoleName memberRole}
memberJoin <- awaitMatch isTeamMemberJoinNotif wsOwner
memberJoin %. "payload.0.team" `shouldMatch` tid
memberJoin %. "payload.0.data.user" `shouldMatch` objId m
bindResponse (getTeamMembers owner tid) $ \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
members <- Response
resp.json Maybe Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"members" App Value -> (Value -> App [Value]) -> App [Value]
forall a b. App a -> (a -> App b) -> App b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Value -> App [Value]
forall a. (HasCallStack, MakesValue a) => a -> App [Value]
asList
length members `shouldMatchInt` 2
pure m
eventually $ postOne2OneConversation owner teamMember tid "chit-chat" >>= assertStatus 201
bindResponse (postOne2OneConversation owner teamMember tid "chit-chat") $ \Response
resp ->
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
testCreateOne2OneFailForNonTeamMembers :: (HasCallStack) => App ()
testCreateOne2OneFailForNonTeamMembers :: HasCallStack => App ()
testCreateOne2OneFailForNonTeamMembers = do
(owner1, tid1, []) <- Domain -> Int -> App (Value, String, [Value])
forall domain.
(HasCallStack, MakesValue domain) =>
domain -> Int -> App (Value, String, [Value])
createTeam Domain
OwnDomain Int
1
(owner2, _tid2, []) <- createTeam OwnDomain 1
postOne2OneConversation owner1 owner2 tid1 "chit-chat"
>>= assertLabel 403 "non-binding-team-members"