packages feed

swagger-petstore-0.0.1.0: tests/Instances.hs

module Instances where

import Data.Text (Text, pack)
import Data.Char (isSpace)
import Data.List (sort)
import Data.Time.Calendar (Day(..))
import Data.Time.Clock (UTCTime(..), secondsToDiffTime)
import Test.QuickCheck
import qualified Data.HashMap.Strict as HM
import qualified Data.Set as Set

import ApproxEq
import SwaggerPetstore.Model

instance Arbitrary Text where
  arbitrary = pack <$> arbitrary

instance Arbitrary Day where
  arbitrary = ModifiedJulianDay . (2000 +) <$> arbitrary
  shrink = (ModifiedJulianDay <$>) . shrink . toModifiedJulianDay

instance Arbitrary UTCTime where
  arbitrary =
    UTCTime <$> arbitrary <*> (secondsToDiffTime <$> choose (0, 86401))

-- | Checks if a given list has no duplicates in _O(n log n)_.
hasNoDups
  :: (Ord a)
  => [a] -> Bool
hasNoDups = go Set.empty
  where
    go _ [] = True
    go s (x:xs)
      | s' <- Set.insert x s
      , Set.size s' > Set.size s = go s' xs
      | otherwise = False

instance ApproxEq Day where
  (=~) = (==)

-- * Models
 
instance Arbitrary ApiResponse where
  arbitrary =
    ApiResponse
    <$> arbitrary -- apiResponseCode :: Maybe Int
    <*> arbitrary -- apiResponseType :: Maybe Text
    <*> arbitrary -- apiResponseMessage :: Maybe Text
    

instance Arbitrary Category where
  arbitrary =
    Category
    <$> arbitrary -- categoryId :: Maybe Integer
    <*> arbitrary -- categoryName :: Maybe Text
    

instance Arbitrary Order where
  arbitrary =
    Order
    <$> arbitrary -- orderId :: Maybe Integer
    <*> arbitrary -- orderPetId :: Maybe Integer
    <*> arbitrary -- orderQuantity :: Maybe Int
    <*> arbitrary -- orderShipDate :: Maybe UTCTime
    <*> arbitrary -- orderStatus :: Maybe Text
    <*> arbitrary -- orderComplete :: Maybe Bool
    

instance Arbitrary Pet where
  arbitrary =
    Pet
    <$> arbitrary -- petId :: Maybe Integer
    <*> arbitrary -- petCategory :: Maybe Category
    <*> arbitrary -- petName :: Text
    <*> arbitrary -- petPhotoUrls :: [Text]
    <*> arbitrary -- petTags :: Maybe [Tag]
    <*> arbitrary -- petStatus :: Maybe Text
    

instance Arbitrary Tag where
  arbitrary =
    Tag
    <$> arbitrary -- tagId :: Maybe Integer
    <*> arbitrary -- tagName :: Maybe Text
    

instance Arbitrary User where
  arbitrary =
    User
    <$> arbitrary -- userId :: Maybe Integer
    <*> arbitrary -- userUsername :: Maybe Text
    <*> arbitrary -- userFirstName :: Maybe Text
    <*> arbitrary -- userLastName :: Maybe Text
    <*> arbitrary -- userEmail :: Maybe Text
    <*> arbitrary -- userPassword :: Maybe Text
    <*> arbitrary -- userPhone :: Maybe Text
    <*> arbitrary -- userUserStatus :: Maybe Int