module Network.Mattermost.QuickCheck where import qualified Data.Sequence as Seq import qualified Data.Text as T import Data.Time.Calendar (Day(..)) import Data.Time.Clock (UTCTime(..), secondsToDiffTime) import Network.Mattermost.Types import Test.QuickCheck genUserText :: Gen UserText genUserText :: Gen UserText genUserText = Text -> UserText UserText forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText genText :: Gen T.Text genText :: Gen Text genText = forall a. (Int -> Gen a) -> Gen a sized forall a b. (a -> b) -> a -> b $ \Int s -> forall a. [Gen a] -> Gen a oneof [ forall (m :: * -> *) a. Monad m => a -> m a return Text T.empty , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Char -> Text T.singleton Char 'a' , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Char -> Text T.singleton Char '1' , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ String -> Text T.pack String "b2" , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Char -> Text T.singleton Char ' ' , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Char -> Text T.singleton Char '\n' , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Char -> Text T.singleton Char '\r' , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Char -> Text T.singleton Char '\t' , forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ String -> Text T.pack String " \n\r\t" , String -> Text T.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Int -> Gen a -> Gen [a] vectorOf Int s forall a. Arbitrary a => Gen a arbitrary ] genMaybe :: Gen a -> Gen (Maybe a) genMaybe :: forall a. Gen a -> Gen (Maybe a) genMaybe Gen a g = forall a. [(Int, Gen a)] -> Gen a frequency [ (Int 1, forall (m :: * -> *) a. Monad m => a -> m a return forall a. Maybe a Nothing) , (Int 11, forall a. a -> Maybe a Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen a g) ] genSeq :: Gen a -> Gen (Seq.Seq a) genSeq :: forall a. Gen a -> Gen (Seq a) genSeq Gen a g = forall a. (Int -> Gen a) -> Gen a sized forall a b. (a -> b) -> a -> b $ \Int s -> forall a. [(Int, Gen a)] -> Gen a frequency [ (Int 1, forall (m :: * -> *) a. Monad m => a -> m a return forall a. Seq a Seq.empty) , (Int 9, forall a. [a] -> Seq a Seq.fromList forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Int -> Gen a -> Gen [a] vectorOf Int s Gen a g) ] genTime :: Gen ServerTime genTime :: Gen ServerTime genTime = UTCTime -> ServerTime ServerTime forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Day -> DiffTime -> UTCTime UTCTime forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Integer -> Day ModifiedJulianDay forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (Integer 2000 forall a. Num a => a -> a -> a +) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Arbitrary a => Gen a arbitrary) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (Integer -> DiffTime secondsToDiffTime forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Random a => (a, a) -> Gen a choose (Integer 0, Integer 86400))) genPostId :: Gen PostId genPostId :: Gen PostId genPostId = Id -> PostId PI forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> Id Id forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText genChannelId :: Gen ChannelId genChannelId :: Gen ChannelId genChannelId = Id -> ChannelId CI forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> Id Id forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText genFileId :: Gen FileId genFileId :: Gen FileId genFileId = Id -> FileId FI forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> Id Id forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText genUserId :: Gen UserId genUserId :: Gen UserId genUserId = Id -> UserId UI forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> Id Id forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText genType :: Gen Type genType :: Gen Type genType = forall a. [Gen a] -> Gen a oneof [ forall (m :: * -> *) a. Monad m => a -> m a return Type Ordinary , forall (m :: * -> *) a. Monad m => a -> m a return Type Direct , forall (m :: * -> *) a. Monad m => a -> m a return Type Private , forall (m :: * -> *) a. Monad m => a -> m a return Type Group , Text -> Type Unknown forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText ] genPostProps :: Gen PostProps genPostProps :: Gen PostProps genPostProps = Maybe Text -> Maybe Text -> Maybe Bool -> Maybe (Seq PostPropAttachment) -> Maybe Text -> Maybe Text -> PostProps PostProps forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Gen a -> Gen (Maybe a) genMaybe Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe forall a. Arbitrary a => Gen a arbitrary forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen (Maybe (Seq PostPropAttachment)) attached forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen Text genText attached :: Gen (Maybe (Seq.Seq PostPropAttachment)) attached :: Gen (Maybe (Seq PostPropAttachment)) attached = forall a. [Gen a] -> Gen a oneof [ forall (m :: * -> *) a. Monad m => a -> m a return forall a. Maybe a Nothing , forall a. a -> Maybe a Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (forall a. Gen a -> Gen (Seq a) genSeq Gen PostPropAttachment genPostPropAttachment) ] genPostPropAttachmentField :: Gen PostPropAttachmentField genPostPropAttachmentField :: Gen PostPropAttachmentField genPostPropAttachmentField = Text -> Text -> Bool -> PostPropAttachmentField PostPropAttachmentField forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. [Gen a] -> Gen a oneof [ forall (m :: * -> *) a. Monad m => a -> m a return Bool True, forall (m :: * -> *) a. Monad m => a -> m a return Bool False ] genPostPropAttachment :: Gen PostPropAttachment genPostPropAttachment :: Gen PostPropAttachment genPostPropAttachment = Int -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Seq PostPropAttachmentField -> Text -> Text -> Text -> Text -> PostPropAttachment PostPropAttachment forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Arbitrary a => Gen a arbitrary forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Seq a) genSeq Gen PostPropAttachmentField genPostPropAttachmentField forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText genPostType :: Gen PostType genPostType :: Gen PostType genPostType = forall a. [Gen a] -> Gen a oneof [ forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeJoinChannel , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeLeaveChannel , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeAddToChannel , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeRemoveFromChannel , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeHeaderChange , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeDisplayNameChange , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypePurposeChange , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeChannelDeleted , forall (m :: * -> *) a. Monad m => a -> m a return PostType PostTypeEphemeral , Text -> PostType PostTypeUnknown forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen Text genText ] genMetadata :: Gen PostMetadata genMetadata :: Gen PostMetadata genMetadata = forall (m :: * -> *) a. Monad m => a -> m a return forall a b. (a -> b) -> a -> b $ Seq FileInfo -> Seq Reaction -> PostMetadata PostMetadata forall a. Monoid a => a mempty forall a. Monoid a => a mempty genPost :: Gen Post genPost :: Gen Post genPost = Maybe PostId -> Maybe PostId -> PostProps -> Maybe PostId -> Seq FileId -> PostId -> PostType -> UserText -> Maybe ServerTime -> Text -> ServerTime -> ServerTime -> Maybe UserId -> ServerTime -> ChannelId -> Bool -> Maybe Bool -> PostMetadata -> Post Post forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Gen a -> Gen (Maybe a) genMaybe Gen PostId genPostId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen PostId genPostId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen PostProps genPostProps forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen PostId genPostId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Seq a) genSeq Gen FileId genFileId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen PostId genPostId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen PostType genPostType forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen UserText genUserText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen ServerTime genTime forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen Text genText forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen ServerTime genTime forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen ServerTime genTime forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe Gen UserId genUserId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen ServerTime genTime forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen ChannelId genChannelId forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Arbitrary a => Gen a arbitrary forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall a. Gen a -> Gen (Maybe a) genMaybe forall a. Arbitrary a => Gen a arbitrary forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen PostMetadata genMetadata