{-|
Module      : Core.AsyncUpdates
Description :
Copyright   : (c) CNRS, 2017-Present
License     : AGPL + CECILL v3
Maintainer  : team@gargantext.org
Stability   : experimental
Portability : POSIX

-}

module Test.Core.AsyncUpdates
  ( test
  , qcTests )
where

import Data.Aeson qualified as A
import Gargantext.Core.AsyncUpdates.CentralExchange.Types
import Gargantext.Core.AsyncUpdates.Dispatcher.Types
import Gargantext.Prelude
import Test.Hspec
import Test.Instances ()
import Test.Tasty
import Test.Tasty.QuickCheck qualified as QC


test :: Spec
test = do
  describe "check if json serialization of CEMessage works" $ do
    it "UpdateTreeFirstLevel serialization" $ do
      let ce = UpdateTreeFirstLevel 15
      A.decode (A.encode ce) `shouldBe` (Just ce)

qcTests :: TestTree
qcTests =
  testGroup "Notifications QuickCheck tests" $ do
    [ QC.testProperty "CEMessage aeson encoding" $ \m -> A.decode (A.encode (m :: CEMessage)) == Just m
      , QC.testProperty "Topic aeson encoding" $ \t -> A.decode (A.encode (t :: Topic)) == Just t
      , QC.testProperty "Message aeson encoding" $ \m -> A.decode (A.encode (m :: Message)) == Just m
      , QC.testProperty "WSRequest aeson encoding" $ \ws -> A.decode (A.encode (ws :: WSRequest)) == Just ws ]