packages feed

yeshql-core-4.1.0.0: tests/Database/YeshQL/ParserTests.hs

{-#LANGUAGE QuasiQuotes #-}
{-#LANGUAGE RankNTypes #-}
{-#LANGUAGE LambdaCase #-}
{-#LANGUAGE TemplateHaskell #-}
module Database.YeshQL.ParserTests
( tests
)
where

import Test.Tasty
import Test.Tasty.HUnit
import Database.YeshQL
import Database.YeshQL.Parser
import qualified Data.Map as Map

tests =
  [ testAllTheThings
  ]

testAllTheThings :: TestTree
testAllTheThings =
  testCase "all parser features" $
    assertEqual "" expected actual
    where
      actual = parseQuery query
      query = unlines
        [ "-- name:perfectlyNormal :: (Integer)"
        , "-- A completely normal query."
        , "-- One more free-form comment."
        , "-- :username :: String"
        , "SELECT id FROM users WHERE username = :username"
        ]
      expected =
        Right ParsedQuery
          { pqQueryName = "perfectlyNormal"
          , pqQueryString = "SELECT id FROM users WHERE username = ?\n"
          , pqParamsRaw = [ExtractedParam "username" [] AutoType]
          , pqParamNames = ["username"]
          , pqParamTypes = Map.fromList [("username", PlainType "String")]
          , pqReturnType = ReturnTuple One [PlainType "Integer"]
          , pqDocComment = "A completely normal query.\nOne more free-form comment.\n"
          , pqDDL = False
          }