swagger-test 0.2.4 → 0.2.5
raw patch · 4 files changed
+26/−7 lines, 4 filesdep ~swagger2PVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: swagger2
API changes (from Hackage documentation)
- Test.Swagger.Gen: generateRequest :: Seed -> Size -> NormalizedSwagger -> Maybe OperationId -> (Operation, HttpRequest)
- Test.Swagger.Print: FormatCurl :: Format
- Test.Swagger.Print: FormatHttp :: Format
- Test.Swagger.Print: FormatJSON :: Format
- Test.Swagger.Print: FormatNone :: Format
- Test.Swagger.Print: data Format
- Test.Swagger.Print: instance GHC.Enum.Bounded Test.Swagger.Print.Format
- Test.Swagger.Print: instance GHC.Enum.Enum Test.Swagger.Print.Format
- Test.Swagger.Print: instance GHC.Show.Show Test.Swagger.Print.Format
- Test.Swagger.Print: printRequest :: Format -> HttpRequest -> Builder
- Test.Swagger.Print: printResponse :: Format -> HttpResponse -> Builder
- Test.Swagger.Print: requestFormats :: [Format]
- Test.Swagger.Print: responseFormats :: [Format]
- Test.Swagger.Report: TestReport :: Seed -> Operation -> HttpRequest -> Maybe HttpResponse -> ValidationResult -> TestReport
- Test.Swagger.Report: [reportOperation] :: TestReport -> Operation
- Test.Swagger.Report: [reportRequest] :: TestReport -> HttpRequest
- Test.Swagger.Report: [reportResponse] :: TestReport -> Maybe HttpResponse
- Test.Swagger.Report: [reportResult] :: TestReport -> ValidationResult
- Test.Swagger.Report: [reportSeed] :: TestReport -> Seed
- Test.Swagger.Report: data TestReport
- Test.Swagger.Report: instance Data.Aeson.Types.ToJSON.ToJSON Test.Swagger.Report.TestReport
- Test.Swagger.Report: instance GHC.Classes.Eq Test.Swagger.Report.TestReport
- Test.Swagger.Report: instance GHC.Classes.Ord Test.Swagger.Report.TestReport
- Test.Swagger.Report: isSuccessful :: TestReport -> Bool
- Test.Swagger.Report: runTests :: NormalizedSwagger -> Int -> Size -> IO [TestReport]
- Test.Swagger.Report: writeErrorReportFile :: FilePath -> String -> IO ()
- Test.Swagger.Report: writeReportFile :: FilePath -> NormalizedSwagger -> [TestReport] -> IO ()
- Test.Swagger.Request: doHttpRequest :: HttpRequest -> IO HttpResponse
- Test.Swagger.Types: HttpRequest :: Maybe FullyQualifiedHost -> Method -> Text -> QueryText -> Headers -> Maybe ByteString -> HttpRequest
- Test.Swagger.Types: HttpResponse :: HttpVersion -> Status -> Headers -> Maybe ByteString -> HttpResponse
- Test.Swagger.Types: [requestBody] :: HttpRequest -> Maybe ByteString
- Test.Swagger.Types: [requestHeaders] :: HttpRequest -> Headers
- Test.Swagger.Types: [requestHost] :: HttpRequest -> Maybe FullyQualifiedHost
- Test.Swagger.Types: [requestMethod] :: HttpRequest -> Method
- Test.Swagger.Types: [requestPath] :: HttpRequest -> Text
- Test.Swagger.Types: [requestQuery] :: HttpRequest -> QueryText
- Test.Swagger.Types: [responseBody] :: HttpResponse -> Maybe ByteString
- Test.Swagger.Types: [responseHeaders] :: HttpResponse -> Headers
- Test.Swagger.Types: [responseHttpVersion] :: HttpResponse -> HttpVersion
- Test.Swagger.Types: [responseStatus] :: HttpResponse -> Status
- Test.Swagger.Types: data HttpRequest
- Test.Swagger.Types: data HttpResponse
- Test.Swagger.Types: data NormalizedSwagger
- Test.Swagger.Types: getSwagger :: NormalizedSwagger -> Swagger
- Test.Swagger.Types: instance Data.Aeson.Types.FromJSON.FromJSON Test.Swagger.Types.NormalizedSwagger
- Test.Swagger.Types: instance Data.Aeson.Types.ToJSON.ToJSON Test.Swagger.Types.HttpRequest
- Test.Swagger.Types: instance Data.Aeson.Types.ToJSON.ToJSON Test.Swagger.Types.HttpResponse
- Test.Swagger.Types: instance GHC.Classes.Eq Test.Swagger.Types.HttpRequest
- Test.Swagger.Types: instance GHC.Classes.Eq Test.Swagger.Types.HttpResponse
- Test.Swagger.Types: instance GHC.Show.Show Test.Swagger.Types.HttpRequest
- Test.Swagger.Types: instance GHC.Show.Show Test.Swagger.Types.HttpResponse
- Test.Swagger.Types: refToMaybe :: Referenced a -> Maybe a
- Test.Swagger.Types: type FullyQualifiedHost = String
- Test.Swagger.Types: type Headers = [HttpHeader]
- Test.Swagger.Types: type HttpHeader = (CI Text, Text)
- Test.Swagger.Types: type OperationId = Text
- Test.Swagger.Types: type Seed = Int
- Test.Swagger.Types: type Size = Int
- Test.Swagger.Validate: parseResponse :: ByteString -> Either String HttpResponse
- Test.Swagger.Validate: type ValidationResult = Either String ()
- Test.Swagger.Validate: validateResponse :: HttpResponse -> NormalizedSwagger -> OperationId -> ValidationResult
- Test.Swagger.Validate: validateResponseBytes :: ByteString -> NormalizedSwagger -> OperationId -> ValidationResult
- Test.Swagger.Validate: validateResponseWithOperation :: HttpResponse -> NormalizedSwagger -> Operation -> ValidationResult
+ Test.Swagger: FormatCurl :: Format
+ Test.Swagger: FormatHttp :: Format
+ Test.Swagger: FormatJSON :: Format
+ Test.Swagger: FormatNone :: Format
+ Test.Swagger: HttpRequest :: Maybe FullyQualifiedHost -> Method -> Text -> QueryText -> Headers -> Maybe ByteString -> HttpRequest
+ Test.Swagger: HttpResponse :: HttpVersion -> Status -> Headers -> Maybe ByteString -> HttpResponse
+ Test.Swagger: TestReport :: Seed -> Operation -> HttpRequest -> Maybe HttpResponse -> ValidationResult -> TestReport
+ Test.Swagger: [reportOperation] :: TestReport -> Operation
+ Test.Swagger: [reportRequest] :: TestReport -> HttpRequest
+ Test.Swagger: [reportResponse] :: TestReport -> Maybe HttpResponse
+ Test.Swagger: [reportResult] :: TestReport -> ValidationResult
+ Test.Swagger: [reportSeed] :: TestReport -> Seed
+ Test.Swagger: [requestBody] :: HttpRequest -> Maybe ByteString
+ Test.Swagger: [requestHeaders] :: HttpRequest -> Headers
+ Test.Swagger: [requestHost] :: HttpRequest -> Maybe FullyQualifiedHost
+ Test.Swagger: [requestMethod] :: HttpRequest -> Method
+ Test.Swagger: [requestPath] :: HttpRequest -> Text
+ Test.Swagger: [requestQuery] :: HttpRequest -> QueryText
+ Test.Swagger: [responseBody] :: HttpResponse -> Maybe ByteString
+ Test.Swagger: [responseHeaders] :: HttpResponse -> Headers
+ Test.Swagger: [responseHttpVersion] :: HttpResponse -> HttpVersion
+ Test.Swagger: [responseStatus] :: HttpResponse -> Status
+ Test.Swagger: data Format
+ Test.Swagger: data HttpRequest
+ Test.Swagger: data HttpResponse
+ Test.Swagger: data NormalizedSwagger
+ Test.Swagger: data TestReport
+ Test.Swagger: doHttpRequest :: HttpRequest -> IO HttpResponse
+ Test.Swagger: generateRequest :: Seed -> Size -> NormalizedSwagger -> Maybe OperationId -> (Operation, HttpRequest)
+ Test.Swagger: getSwagger :: NormalizedSwagger -> Swagger
+ Test.Swagger: isFailure :: TestReport -> Bool
+ Test.Swagger: isSuccessful :: TestReport -> Bool
+ Test.Swagger: parseResponse :: ByteString -> Either String HttpResponse
+ Test.Swagger: printRequest :: Format -> HttpRequest -> Builder
+ Test.Swagger: printResponse :: Format -> HttpResponse -> Builder
+ Test.Swagger: refToMaybe :: Referenced a -> Maybe a
+ Test.Swagger: requestFormats :: [Format]
+ Test.Swagger: responseFormats :: [Format]
+ Test.Swagger: runTests :: NormalizedSwagger -> Int -> Size -> IO [TestReport]
+ Test.Swagger: type FullyQualifiedHost = String
+ Test.Swagger: type Headers = [HttpHeader]
+ Test.Swagger: type HttpHeader = (CI Text, Text)
+ Test.Swagger: type OperationId = Text
+ Test.Swagger: type Seed = Int
+ Test.Swagger: type Size = Int
+ Test.Swagger: type ValidationResult = Either String ()
+ Test.Swagger: validateResponse :: HttpResponse -> NormalizedSwagger -> OperationId -> ValidationResult
+ Test.Swagger: validateResponseBytes :: ByteString -> NormalizedSwagger -> OperationId -> ValidationResult
+ Test.Swagger: validateResponseWithOperation :: HttpResponse -> NormalizedSwagger -> Operation -> ValidationResult
+ Test.Swagger: writeErrorReportFile :: FilePath -> String -> IO ()
+ Test.Swagger: writeReportFile :: FilePath -> NormalizedSwagger -> [TestReport] -> IO ()
Files
- app/Main.hs +8/−0
- src/Test/Swagger/Gen.hs +2/−1
- src/Test/Swagger/Report.hs +12/−2
- swagger-test.cabal +4/−4
app/Main.hs view
@@ -180,6 +180,7 @@ when (takeExtension schemaFile == ".json") $ do let schemaFilePath = schemasFolder </> schemaFile reportFile = reportFolder </> schemaFile -<.> "html"+ reportDataFile = reportFolder </> schemaFile -<.> "results.json" emodel <- eitherDecode <$> LBS.readFile schemaFilePath case emodel of Left e -> writeErrorReportFile reportFile $@@ -187,6 +188,7 @@ Right model -> do reports <- runTests model nTests size writeReportFile reportFile model reports+ writeReportDataFile reportDataFile reports where readSwagger :: FilePath -> IO NormalizedSwagger readSwagger swaggerFile= do contents <- LBS.readFile swaggerFile@@ -199,6 +201,12 @@ <> progDesc "Execute one of the commands available depending on your needs" <> header ("Property-based testing tool for Swagger APIs - v. " <> showVersion version) <> footer "Run `COMMAND --help` to get command specific options help")++ -- |Write a json of the structure data of the report+ writeReportDataFile :: FilePath -> [TestReport] -> IO ()+ writeReportDataFile fp reports =+ let failures = filter isFailure reports+ in LBS.writeFile fp $ encode failures doGenerate :: NormalizedSwagger -> Maybe Seed
src/Test/Swagger/Gen.hs view
@@ -285,7 +285,8 @@ -- |Generate a JSON from a schema genJSON :: Schema -> Gen Value genJSON Schema { _schemaAllOf = Just ss } | not (null ss) =- do jsons <- shuffle =<< mapM genJSON ss+ do let ss' = catMaybes $ refToMaybe <$> ss+ jsons <- shuffle =<< mapM genJSON ss' n <- choose (1, length jsons) pure $ foldl1 merge $ take n jsons
src/Test/Swagger/Report.hs view
@@ -12,6 +12,7 @@ -} module Test.Swagger.Report ( TestReport(..) , isSuccessful+ , isFailure , writeReportFile , writeErrorReportFile , runTests) where@@ -120,8 +121,11 @@ h2 "Operations" ul ! class_ "operations-menu" $ forM_ reportGroups $ \case- (TestReport { reportOperation=Operation { _operationOperationId=Just opid } }:_) ->- li $ a ! href (toValue $ "#" <> opid) $ toHtml opid+ gr@(TestReport { reportOperation=Operation { _operationOperationId=Just opid } }:_) ->+ do let hasFailure = any isFailure gr+ li $ a ! href (toValue $ "#" <> opid)+ ! class_ (if hasFailure then "failure" else "success")+ $ toHtml opid _ -> pure () forM_ reportGroups $ \case [] -> error "this shouldn't happen"@@ -209,6 +213,12 @@ \dd {\ \ margin-left: 17%;\ \ margin-bottom: 1em;\+ \}\+ \a.success {\+ \ color: green;\+ \}\+ \a.failure {\+ \ color: red;\ \}" body $ do h1 schemaTitle
swagger-test.cabal view
@@ -1,5 +1,5 @@ name: swagger-test-version: 0.2.4+version: 0.2.5 synopsis: Testing of Swagger APIs description: This package provides a library and executable tool that supports testing APIs specified with Swagger. It@@ -23,13 +23,13 @@ hs-source-dirs: src ghc-options: -Wall exposed-modules: Test.Swagger+ other-modules: Paths_swagger_test , Test.Swagger.Gen , Test.Swagger.Print , Test.Swagger.Report , Test.Swagger.Request , Test.Swagger.Types , Test.Swagger.Validate- other-modules: Paths_swagger_test build-depends: base >= 4.7 && < 5 , QuickCheck == 2.10.* , aeson@@ -49,7 +49,7 @@ , lens , random , scientific- , swagger2+ , swagger2 >= 2.1.5 && < 3 , syb , text , unordered-containers@@ -70,7 +70,7 @@ , optparse-applicative , random , swagger-test- , swagger2+ , swagger2 >= 2.1.5 && < 3 , text default-language: Haskell2010