From 9bfcbfc5686f44debfaa98906715291a6337aa90 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Wed, 16 Nov 2022 16:01:35 +0100 Subject: [PATCH] test(avs): AvsCardNo instances adjusted for 8-digit codes --- src/Handler/PrintCenter.hs | 4 ++-- src/Model/Types/Avs.hs | 8 +++++--- test/Utils/TypesSpec.hs | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Handler/PrintCenter.hs b/src/Handler/PrintCenter.hs index 62af49bca..eda7c05aa 100644 --- a/src/Handler/PrintCenter.hs +++ b/src/Handler/PrintCenter.hs @@ -424,7 +424,7 @@ postPrintAckDirectR = do case enr of Left (e :: SomeException) -> do -- catch all to avoid ok220 in case of any error $logWarnS "APC" $ "Result upload failed parsing: " <> tshow e - return (badRequest400, "Exception: " <> tshow e) + return (badRequest400, "Error: " <> tshow e) Right lids -> do now <- liftIO getCurrentTime nr <- updateWhereCount @@ -444,7 +444,7 @@ postPrintAckDirectR = do $logWarnS "APC" msg return (ok200, msg) [] -> do - let msg = "Warning: No file received. A file of lms identifiers must be supplied for print job acknowledging." + let msg = "Error: No file received. A file of lms identifiers must be supplied for print job acknowledging." $logWarnS "APC" msg return (badRequest400, msg) _other -> do diff --git a/src/Model/Types/Avs.hs b/src/Model/Types/Avs.hs index 29c2956b1..063df660a 100644 --- a/src/Model/Types/Avs.hs +++ b/src/Model/Types/Avs.hs @@ -83,7 +83,7 @@ instance FromJSON SloppyBool where type AvsInternalPersonalNo = Text -- type synonym for clarity/documentation within types -- CompleteCardNo = xxxxxxxx.y --- where x is an 8 digit AvsCardNo prefixed by zeros +-- where x is an 8 digit AvsCardNo prefixed by zeros, see normalizeAvsCardNo -- and y is the 1 digit AvsVersionNo type AvsVersionNo = Text -- always 1 digit newtype AvsCardNo = AvsCardNo { avsCardNo :: Text } -- always 8 digits @@ -92,9 +92,11 @@ newtype AvsCardNo = AvsCardNo { avsCardNo :: Text } -- always 8 digits instance E.SqlString AvsCardNo -- AvsCardNo is an untagged Text with respect to FromJSON/ToJSON, as needed by AVS API instance FromJSON AvsCardNo where - parseJSON x = AvsCardNo . Text.justifyRight 8 '0' <$> parseJSON x + parseJSON x = AvsCardNo . normalizeAvsCardNo <$> parseJSON x instance ToJSON AvsCardNo where - toJSON (AvsCardNo cno) = toJSON cno + toJSON (AvsCardNo cno) = toJSON $ normalizeAvsCardNo cno +normalizeAvsCardNo :: Text -> Text +normalizeAvsCardNo = Text.justifyRight 8 '0' -- The AVS API requires PersonIds sometimes as as mere numbers `AvsPersonId` and sometimes as tagged objects `AvsObjPersonId` newtype AvsPersonId = AvsPersonId { avsPersonId :: Int } -- untagged Int diff --git a/test/Utils/TypesSpec.hs b/test/Utils/TypesSpec.hs index abc19b036..4a8ec9579 100644 --- a/test/Utils/TypesSpec.hs +++ b/test/Utils/TypesSpec.hs @@ -16,8 +16,8 @@ instance Arbitrary AvsPersonId where shrink (AvsPersonId x) = AvsPersonId <$> shrink x instance Arbitrary AvsCardNo where - arbitrary = AvsCardNo <$> arbitrary - shrink (AvsCardNo x) = AvsCardNo <$> shrink x + arbitrary = AvsCardNo . normalizeAvsCardNo <$> arbitrary + shrink (AvsCardNo x) = AvsCardNo . normalizeAvsCardNo <$> shrink x instance Arbitrary AvsLicence where arbitrary = genericArbitrary