@@ -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 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" )
@@ -201,12 +212,13 @@ buildReportsFeature name
201212 pkgReportDetails (pkgid, docs) = do
202213 failCnt <- queryState reportsState $ LookupFailCount pkgid
203214 latestRpt <- queryState reportsState $ LookupLatestReport pkgid
215+ runTests <- fmap Just . queryState reportsState $ LookupRunTests pkgid
204216 (time, ghcId) <- case latestRpt of
205217 Nothing -> return (Nothing ,Nothing )
206218 Just (_, brp, _, _) -> do
207219 let (CompilerId _ vrsn) = compiler brp
208220 return (time brp, Just vrsn)
209- return (BuildReport. PkgDetails pkgid docs failCnt time ghcId)
221+ return (BuildReport. PkgDetails pkgid docs failCnt time ghcId runTests )
210222
211223 queryLastReportStats :: MonadIO m => PackageIdentifier -> m (Maybe (BuildReportId , BuildReport , Maybe BuildCovg ))
212224 queryLastReportStats pkgid = do
@@ -215,6 +227,8 @@ buildReportsFeature name
215227 Nothing -> return Nothing
216228 Just (rptId, rpt, _, covg) -> return (Just (rptId, rpt, covg))
217229
230+ queryRunTests :: MonadIO m => PackageId -> m Bool
231+ queryRunTests pkgid = queryState reportsState $ LookupRunTests pkgid
218232
219233 ---------------------------------------------------------------------------
220234
@@ -318,6 +332,25 @@ buildReportsFeature name
318332 then seeOther (reportsListUri reportsResource " " pkgid) $ toResponse ()
319333 else errNotFound " Report not found" [MText " Build report does not exist" ]
320334
335+ getReportsTest :: DynamicPath -> ServerPartE Response
336+ getReportsTest dpath = do
337+ pkgid <- packageInPath dpath
338+ guardValidPackageId pkgid
339+ guardAuthorisedAsMaintainerOrTrustee (packageName pkgid)
340+ runTest <- queryRunTests pkgid
341+ pure $ toResponse $ toJSON runTest
342+
343+ postReportsTest :: DynamicPath -> ServerPartE Response
344+ postReportsTest dpath = do
345+ pkgid <- packageInPath dpath
346+ runTests <- body $ looks " runTests"
347+ guardValidPackageId pkgid
348+ guardAuthorisedAsMaintainerOrTrustee (packageName pkgid)
349+ success <- updateState reportsState $ SetRunTests pkgid (" on" `elem` runTests)
350+ if success
351+ then seeOther (reportsListUri reportsResource " " pkgid) $ toResponse ()
352+ else errNotFound " Package not found" [MText " Package does not exist" ]
353+
321354
322355 putAllReports :: DynamicPath -> ServerPartE Response
323356 putAllReports dpath = do
0 commit comments