-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
replace String with Text in Validation #8
- Loading branch information
Oliver Braun
committed
Jun 6, 2017
1 parent
1e4e18a
commit 4b73181
Showing
9 changed files
with
144 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,74 +1,77 @@ | ||
{-# LANGUAGE OverloadedStrings #-} | ||
module Plexams.Validation.Exports | ||
( validateZPAExport | ||
) where | ||
|
||
import Control.Monad.Writer | ||
import Data.Text (Text, append) | ||
import Plexams.Import.Misc (importZPAExamsFromJSONFile) | ||
import Plexams.Types | ||
import TextShow (showt) | ||
|
||
validateZPAExport :: FilePath -> Plan -> IO (ValidationResult, [String]) | ||
validateZPAExport :: FilePath -> Plan -> IO (ValidationResult, [Text]) | ||
validateZPAExport fp plan = do | ||
maybeZpaExams <- importZPAExamsFromJSONFile fp | ||
case maybeZpaExams of | ||
Nothing -> return ( HardConstraintsBroken | ||
, ["ZPAExams cannot be imported from "++ fp]) | ||
, ["ZPAExams cannot be imported from " `append` showt fp]) | ||
Just zpaExams -> return $ runWriter $ validate zpaExams plan | ||
|
||
validate :: [ZPAExam] -> Plan | ||
-> Writer [String] ValidationResult | ||
-> Writer [Text] ValidationResult | ||
validate zpaExams plan = do | ||
tell ["# Validating ZPA export"] | ||
allOk <- allZPAExamsInExams zpaExams plan | ||
allExported <- allPlannedExamsInZPAExams zpaExams plan | ||
return $ validationResult [allOk, allExported] | ||
|
||
allZPAExamsInExams :: [ZPAExam] -> Plan | ||
-> Writer [String] ValidationResult | ||
-> Writer [Text] ValidationResult | ||
allZPAExamsInExams zpaExams plan = | ||
validationResult <$> mapM (`zpaExamInExams` allExams plan) zpaExams | ||
where | ||
zpaExamInExams :: ZPAExam -> [Exam] | ||
-> Writer [String] ValidationResult | ||
-> Writer [Text] ValidationResult | ||
zpaExamInExams zpaExam exams = | ||
case filter ((== zpaExamAnCode zpaExam) . anCode) exams of | ||
[] -> do | ||
tell ["Exported exam " ++ show (zpaExamAnCode zpaExam) | ||
++ " does not exist"] | ||
tell ["Exported exam " `append` showt (zpaExamAnCode zpaExam) | ||
`append` " does not exist"] | ||
return HardConstraintsBroken | ||
[exam] -> do | ||
plannedByMeOk <- | ||
if plannedByMe exam | ||
then return EverythingOk | ||
else do | ||
tell ["Exported exam " ++ show (zpaExamAnCode zpaExam) | ||
++ " is not planned by me"] | ||
tell ["Exported exam " `append` showt (zpaExamAnCode zpaExam) | ||
`append` " is not planned by me"] | ||
return HardConstraintsBroken | ||
dayOk <- | ||
if zpaExamDate zpaExam == examDateAsString exam plan | ||
then return EverythingOk | ||
else do | ||
tell ["Exported exam " ++ show (zpaExamAnCode zpaExam) | ||
++ " has wrong date"] | ||
tell ["Exported exam " `append` showt (zpaExamAnCode zpaExam) | ||
`append` " has wrong date"] | ||
return HardConstraintsBroken | ||
slotOk <- | ||
if zpaExamTime zpaExam == examSlotAsString exam plan | ||
then return EverythingOk | ||
else do | ||
tell ["Exported exam " ++ show (zpaExamAnCode zpaExam) | ||
++ " has wrong time"] | ||
tell ["Exported exam " `append` showt (zpaExamAnCode zpaExam) | ||
`append` " has wrong time"] | ||
return HardConstraintsBroken | ||
return $ validationResult [plannedByMeOk, dayOk, slotOk] | ||
|
||
allPlannedExamsInZPAExams :: [ZPAExam] -> Plan | ||
-> Writer [String] ValidationResult | ||
-> Writer [Text] ValidationResult | ||
allPlannedExamsInZPAExams zpaExams plan = do | ||
let examsPlannedByMe = filter plannedByMe $ allExams plan | ||
validationResult <$> mapM (`examExported` zpaExams) examsPlannedByMe | ||
where | ||
examExported :: Exam -> [ZPAExam] -> Writer [String] ValidationResult | ||
examExported :: Exam -> [ZPAExam] -> Writer [Text] ValidationResult | ||
examExported exam zpaExams = | ||
if anCode exam `elem` map zpaExamAnCode zpaExams | ||
then return EverythingOk | ||
else do | ||
tell ["Exam " ++ show (anCode exam) ++ " not exported"] | ||
tell ["Exam " `append` showt (anCode exam) `append` " not exported"] | ||
return HardConstraintsBroken |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.