{-# LANGUAGE DuplicateRecordFields #-}
{-# OPTIONS_GHC -Wno-ambiguous-fields #-}
module Test.PushToken where
import API.Common
import API.Gundeck
import SetupHelpers
import Testlib.Prelude
testRegisterPushToken :: App ()
testRegisterPushToken :: App ()
testRegisterPushToken = do
alice <- Domain -> CreateUser -> App Value
forall domain.
(HasCallStack, MakesValue domain) =>
domain -> CreateUser -> App Value
randomUser Domain
OwnDomain CreateUser
forall a. Default a => a
def
aliceC2 <- randomClientId
aliceC1 <- randomClientId
c1Apns1 <- randomSnsToken APNS
c1Apns1Overlap <- randomSnsToken APNS
c1Apns2 <- randomSnsToken APNS
c1Gcm1 <- randomSnsToken GCM
c2Apns1 <- randomSnsToken APNS
c2Gcm1 <- randomSnsToken GCM
c2Gcm1Overlap <- randomSnsToken GCM
let apnsToken = String -> String -> String -> String -> PushToken
PushToken String
"APNS_SANDBOX" String
"test"
let gcmToken = String -> String -> String -> String -> PushToken
PushToken String
"GCM" String
"test"
let c1Apns1Token = String -> String -> PushToken
apnsToken String
c1Apns1 String
aliceC1
let c1Apns1OverlapToken = String -> String -> PushToken
apnsToken String
c1Apns1Overlap String
aliceC1
let c1Apns2Token = (String -> String -> PushToken
apnsToken String
c1Apns2 String
aliceC1 :: PushToken) {app = "com.wire.ent"}
let c1Gcm1Token = String -> String -> PushToken
gcmToken String
c1Gcm1 String
aliceC1
let c2Apns1Token = String -> String -> PushToken
apnsToken String
c2Apns1 String
aliceC2
let c2Gcm1Token = String -> String -> PushToken
gcmToken String
c2Gcm1 String
aliceC2
let c2Gcm1OverlapToken = String -> String -> PushToken
gcmToken String
c2Gcm1Overlap String
aliceC2
assertStatus 201 =<< (postPushToken alice c1Apns1Token)
assertStatus 201 =<< (postPushToken alice c1Apns2Token)
assertStatus 201 =<< (postPushToken alice c1Gcm1Token)
assertStatus 201 =<< (postPushToken alice c2Apns1Token)
assertStatus 201 =<< (postPushToken alice c2Gcm1Token)
bindResponse (listPushTokens alice) \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
allTokens <- Response
resp.json App Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"tokens"
allTokens
`shouldMatchSet` [ c1Apns1Token,
c1Apns2Token,
c1Gcm1Token,
c2Apns1Token,
c2Gcm1Token
]
assertStatus 201 =<< postPushToken alice c1Apns1OverlapToken
assertStatus 201 =<< postPushToken alice c2Gcm1OverlapToken
bindResponse (listPushTokens alice) \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
allTokens <- Response
resp.json App Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"tokens"
allTokens
`shouldMatchSet` [ c1Apns1OverlapToken,
c1Apns2Token,
c1Gcm1Token,
c2Apns1Token,
c2Gcm1OverlapToken
]
assertStatus 200 =<< unregisterClient alice aliceC1
assertStatus 200 =<< unregisterClient alice aliceC2
bindResponse (listPushTokens alice) \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
200
allTokens <- Response
resp.json App Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"tokens"
allTokens
`shouldMatchSet` ([] :: [PushToken])
testVoipTokenRegistrationFails :: App ()
testVoipTokenRegistrationFails :: App ()
testVoipTokenRegistrationFails = do
alice <- Domain -> CreateUser -> App Value
forall domain.
(HasCallStack, MakesValue domain) =>
domain -> CreateUser -> App Value
randomUser Domain
OwnDomain CreateUser
forall a. Default a => a
def
aliceC2 <- randomClientId
token <- randomSnsToken APNS
let apnsVoipToken = String -> String -> String -> String -> PushToken
PushToken String
"APNS_VOIP_SANDBOX" String
"test" String
token String
aliceC2
postPushToken alice apnsVoipToken `bindResponse` \Response
resp -> do
Response
resp.status Int -> Int -> App ()
forall a. (MakesValue a, HasCallStack) => a -> Int -> App ()
`shouldMatchInt` Int
400
Response
resp.json App Value -> String -> App Value
forall a. (HasCallStack, MakesValue a) => a -> String -> App Value
%. String
"label" App Value -> String -> App ()
forall a b.
(MakesValue a, MakesValue b, HasCallStack) =>
a -> b -> App ()
`shouldMatch` String
"apns-voip-not-supported"