]> gitweb.michael.orlitzky.com - dead/htsn-import.git/blobdiff - src/TSN/XML/News.hs
Change the order of init_logging's arguments.
[dead/htsn-import.git] / src / TSN / XML / News.hs
index 31587a35b0435ca6665c82b8e3a905ccbaa07855..565c7a52fb038b10e377b651bee1b58c73a49777 100644 (file)
@@ -30,13 +30,14 @@ import Database.Groundhog.Core ( DefaultKey )
 import Database.Groundhog.TH (
   groundhog,
   mkPersist )
+import System.Console.CmdArgs.Default ( Default(..) )
 import Test.Tasty ( TestTree, testGroup )
 import Test.Tasty.HUnit ( (@?=), testCase )
 import Text.XML.HXT.Core (
   PU,
   XmlPickler(..),
   unpickleDoc,
-  xp12Tuple,
+  xp13Tuple,
   xpAttr,
   xpElem,
   xpInt,
@@ -51,7 +52,7 @@ import TSN.Codegen (
   tsn_codegen_config,
   tsn_db_field_namer ) -- Used in a test
 import TSN.DbImport ( DbImport(..), ImportResult(..) )
-import Xml ( ToFromXml(..), pickle_unpickle )
+import Xml ( ToFromXml(..), pickle_unpickle, unpickleable )
 
 
 
@@ -148,6 +149,7 @@ data MessageXml =
     xml_teams :: [NewsTeamXml],
     xml_locations :: [NewsLocationXml],
     xml_sms :: String,
+    xml_editor :: Maybe String,
     xml_text :: String,
     xml_continue :: String,
     xml_time_stamp :: String }
@@ -159,6 +161,7 @@ data Message =
     db_sport :: String,
     db_url :: String,
     db_sms :: String,
+    db_editor :: Maybe String,
     db_text :: String,
     db_continue :: String }
   deriving (Data, Eq, Show, Typeable)
@@ -171,23 +174,24 @@ instance ToFromXml Message where
   -- used our named fields.
   to_xml (Message {..}) =
     MessageXml
-      0
-      ""
+      def
+      def
       db_mid
-      ""
+      def
       db_sport
       db_url
-      []
-      []
+      def
+      def
       db_sms
+      db_editor
       db_text
       db_continue
-      ""
+      def
 
   -- We don't need the key argument (from_xml_fk) since the XML type
   -- contains more information in this case.
-  from_xml (MessageXml _ _ c _ e f _ _ g h i _) =
-    Message c e f g h i
+  from_xml (MessageXml _ _ c _ e f _ _ i j k l _) =
+    Message c e f i j k l
 
 
 mkPersist tsn_codegen_config [groundhog|
@@ -260,15 +264,16 @@ pickle_message :: PU MessageXml
 pickle_message =
   xpElem "message" $
     xpWrap (from_tuple, to_tuple) $
-    xp12Tuple (xpElem "XML_File_ID" xpInt)
+    xp13Tuple (xpElem "XML_File_ID" xpInt)
               (xpElem "heading" xpText)
               pickle_msg_id
               (xpElem "category" xpText)
               (xpElem "sport" xpText)
               (xpElem "url" xpText)
-              (xpList pickle_news_team)
-              (xpList pickle_location)
+              (xpList pickle_news_team)
+              (xpList pickle_location)
               (xpElem "SMS" xpText)
+              (xpOption (xpElem "Editor" xpText))
               (xpElem "text" xpText)
               pickle_continue
               (xpElem "time_stamp" xpText)
@@ -283,6 +288,7 @@ pickle_message =
                   xml_teams m,
                   xml_locations m,
                   xml_sms m,
+                  xml_editor m,
                   xml_text m,
                   xml_continue m,
                   xml_time_stamp m)
@@ -291,7 +297,7 @@ pickle_message =
     pickle_continue =
       xpWrap (to_string, from_string) $
         xpElem "continue" $
-          (xpList $ xpElem "P" xpText)
+          xpList (xpElem "P" xpText)
       where
         from_string :: String -> [String]
         from_string = split "\n"
@@ -333,20 +339,13 @@ news_tests =
   testGroup
     "News tests"
     [ test_news_fields_have_correct_names,
-      test_pickle_of_unpickle_is_identity ]
-
-
-test_pickle_of_unpickle_is_identity :: TestTree
-test_pickle_of_unpickle_is_identity =
-  testCase "pickle composed with unpickle is the identity" $ do
-    let path = "test/xml/newsxml.xml"
-    (expected :: [MessageXml], actual) <- pickle_unpickle "message" path
-    actual @?= expected
+      test_pickle_of_unpickle_is_identity,
+      test_unpickle_succeeds ]
 
 
 test_news_fields_have_correct_names :: TestTree
 test_news_fields_have_correct_names =
-  testCase "news fields get correct database names" $ do
+  testCase "news fields get correct database names" $
     mapM_ check (zip actual expected)
   where
     -- This is cool, it uses the (derived) Data instance of
@@ -360,6 +359,35 @@ test_news_fields_have_correct_names =
       map (\x -> tsn_db_field_namer "herp" "derp" 8675309 x 90210) field_names
 
     actual :: [String]
-    actual = ["mid", "sport", "url", "sms", "text", "continue"]
+    actual = ["mid", "sport", "url", "sms", "editor", "text", "continue"]
 
     check (x,y) = (x @?= y)
+
+
+-- | Warning, succeess of this test does not mean that unpickling
+--   succeeded.
+test_pickle_of_unpickle_is_identity :: TestTree
+test_pickle_of_unpickle_is_identity = testGroup "pickle-unpickle tests"
+  [ check "pickle composed with unpickle is the identity"
+          "test/xml/newsxml.xml",
+
+    check "pickle composed with unpickle is the identity (with Editor)"
+          "test/xml/newsxml-with-editor.xml" ]
+  where
+    check desc path = testCase desc $ do
+      (expected :: [MessageXml], actual) <- pickle_unpickle "message" path
+      actual @?= expected
+
+
+test_unpickle_succeeds :: TestTree
+test_unpickle_succeeds = testGroup "unpickle tests"
+  [ check "unpickling succeeds"
+          "test/xml/newsxml.xml",
+
+    check "unpickling succeeds (with Editor)"
+          "test/xml/newsxml-with-editor.xml" ]
+  where
+    check desc path = testCase desc $ do
+      actual <- unpickleable path pickle_message
+      let expected = True
+      actual @?= expected