{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} module ApiParserTest (tests) where -- Import the module and function we are testing import qualified Convex.Parser as APIParser import Test.HUnit import Text.Parsec (parse) -- The test suite for the apiFileParser, exported to be used by Main. tests :: Test tests = "API File Parser" ~: runTest "parses module paths from api.d.ts" (APIParser.apiFileParser) sampleApiFile expectedApiPaths where runTest testName parser input expected = testName ~: TestCase $ do -- Use the pure `parse` function since this parser is stateless. case parse parser "(test input)" input of Left err -> assertFailure ("Parser failed: " ++ show err) Right actual -> actual @?= expected -- A sample input string that mimics the structure of a real api.d.ts file. sampleApiFile :: String sampleApiFile = unlines [ "/* eslint-disable */", "import type * as admin_actions from \"../admin/actions.js\";", "import type * as custom from \"../custom.js\";", "declare const fullApi: ApiFromModules<{", " \"admin/actions\": typeof admin_actions;", " custom: typeof custom;", " \"stripe/checkout\": typeof stripe_checkout;", "}>;" ] -- The list of module paths we expect the parser to extract. expectedApiPaths :: [String] expectedApiPaths = [ "admin/actions", "custom", "stripe/checkout" ]