packages feed

voicebase-0.2.0.0: test/ConfigJSONSpec.hs

--
-- Copyright © 2018 Daisee Pty Ltd - All Rights Reserved
--

{-# LANGUAGE CPP               #-}
{-# LANGUAGE NamedFieldPuns    #-}
{-# LANGUAGE OverloadedLists   #-}
{-# LANGUAGE OverloadedStrings #-}

module ConfigJSONSpec(spec) where

import           Data.Aeson
import           Data.Aeson.Roundtrip
import           Data.Traversable
import           Test.Hspec
import           Voicebase.V2Beta.Client
#if MIN_VERSION_base(4,8,0)
import           Data.Foldable
import           Data.Monoid
#endif

expectedDefault = Object []

configPCI =
    Configuration {
            _channels = Just ChannelSpeakers {
                _left = Speaker "Agent"
              , _right = Speaker "Caller"
            }
          , _language = EnglishAus
          , _detections = [RedactingPCI]
        }
expectedPCI = Object
  [ ( "configuration"
    , Object
      ( [ ( "detections"
          , Array
            [ Object
                ( [ ( "redact"
                    , Object
                      ( [ ("transcripts", String "[redacted]")
                        , ( "audio"
                          , Object
                            ([("tone", Number 270.0), ("gain", Number 0.5)])
                          )
                        ]
                      )
                    )
                  , ("model", String "PCI")
                  ]
                )
            ]
          )
        , ( "ingest"
          , Object
            ( [ ( "channels"
                , Object
                  ( [ ("left" , Object ([("speaker", String "Agent")]))
                    , ("right", Object ([("speaker", String "Caller")]))
                    ]
                  )
                )
              ]
            )
          )
        , ("language", String "en-AU")
        ]
      )
    )
  ]

data ConfigSpec = ConfigSpec {
    label       :: String
  , config      :: Configuration
  , expectation :: Value
}

specs :: [ConfigSpec]
specs = [ ConfigSpec "PCI redaction" configPCI expectedPCI ]

spec :: Spec
spec =
  describe "JSON marshalling" $
    for_ specs $ \s@ConfigSpec{label, config, expectation} ->
      it ("meets spec for " <> label) $
        runBuilder syntax config `shouldBe` Right expectation