@@ -32,6 +32,7 @@ import Data.ByteString.Lazy (toStrict)
3232import Data.String (fromString )
3333import Data.Maybe
3434import Distribution.Compiler ( CompilerId (.. ) )
35+ import Data.Aeson (toJSON )
3536
3637
3738-- TODO:
@@ -47,6 +48,7 @@ data ReportsFeature = ReportsFeature {
4748 queryBuildLog :: forall m . MonadIO m => BuildLog -> m Resource. BuildLog ,
4849 pkgReportDetails :: forall m . MonadIO m => (PackageIdentifier , Bool ) -> m BuildReport. PkgDetails ,
4950 queryLastReportStats :: forall m . MonadIO m => PackageIdentifier -> m (Maybe (BuildReportId , BuildReport , Maybe BuildCovg )),
51+ queryRunTests :: forall m . MonadIO m => PackageId -> m (Maybe Bool ),
5052 reportsResource :: ReportsResource
5153}
5254
@@ -59,6 +61,7 @@ data ReportsResource = ReportsResource {
5961 reportsPage :: Resource ,
6062 reportsLog :: Resource ,
6163 reportsReset :: Resource ,
64+ reportsTest :: Resource ,
6265 reportsListUri :: String -> PackageId -> String ,
6366 reportsPageUri :: String -> PackageId -> BuildReportId -> String ,
6467 reportsLogUri :: PackageId -> BuildReportId -> String
@@ -119,6 +122,7 @@ buildReportsFeature name
119122 , reportsPage
120123 , reportsLog
121124 , reportsReset
125+ , reportsTest
122126 ]
123127 , featureState = [abstractAcidStateComponent reportsState]
124128 }
@@ -140,6 +144,13 @@ buildReportsFeature name
140144 ]
141145 , resourceGet = [ (" " , resetBuildFails) ]
142146 }
147+ , reportsTest = (extendResourcePath " /reports/test/" corePackagePage) {
148+ resourceDesc = [ (GET , " Get reports test settings" )
149+ , (POST , " Set reports test settings" )
150+ ]
151+ , resourceGet = [ (" json" , getReportsTest) ]
152+ , resourcePost = [ (" " , postReportsTest) ]
153+ }
143154 , reportsPage = (extendResourcePath " /reports/:id.:format" corePackagePage) {
144155 resourceDesc = [ (GET , " Get a specific build report" )
145156 , (DELETE , " Delete a specific build report" )
@@ -216,6 +227,8 @@ buildReportsFeature name
216227 Nothing -> return Nothing
217228 Just (rptId, rpt, _, covg) -> return (Just (rptId, rpt, covg))
218229
230+ queryRunTests :: MonadIO m => PackageId -> m (Maybe Bool )
231+ queryRunTests pkgid = queryState reportsState $ LookupRunTests pkgid
219232
220233 ---------------------------------------------------------------------------
221234
@@ -319,6 +332,27 @@ buildReportsFeature name
319332 then seeOther (reportsListUri reportsResource " " pkgid) $ toResponse ()
320333 else errNotFound " Report not found" [MText " Build report does not exist" ]
321334
335+ getReportsTest :: DynamicPath -> ServerPartE Response
336+ getReportsTest dpath = do
337+ pkgid <- packageInPath dpath
338+ guardValidPackageId pkgid
339+ guardAuthorisedAsMaintainerOrTrustee (packageName pkgid)
340+ mRunTest <- queryRunTests pkgid
341+ case mRunTest of
342+ Nothing -> errNotFound " Package not found" [MText " Package does not exist" ]
343+ Just runTest -> pure $ toResponse $ toJSON runTest
344+
345+ postReportsTest :: DynamicPath -> ServerPartE Response
346+ postReportsTest dpath = do
347+ pkgid <- packageInPath dpath
348+ runTests <- body $ look " runTests"
349+ guardValidPackageId pkgid
350+ guardAuthorisedAsMaintainerOrTrustee (packageName pkgid)
351+ success <- updateState reportsState $ SetRunTests pkgid (runTests == " on" )
352+ if success
353+ then seeOther (reportsListUri reportsResource " " pkgid) $ toResponse ()
354+ else errNotFound " Package not found" [MText " Package does not exist" ]
355+
322356
323357 putAllReports :: DynamicPath -> ServerPartE Response
324358 putAllReports dpath = do
0 commit comments