-- a root element \<message\> that contains an entire news item.
--
module TSN.XML.News (
+ dtd,
pickle_message,
-- * Tests
news_tests,
import Data.Typeable ( Typeable )
import Database.Groundhog (
countAll,
- executeRaw,
+ deleteAll,
insert_,
migrate,
runMigration,
unsafe_unpickle )
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
+--
+dtd :: String
+dtd = "newsxml.dtd"
+
+
--
-- DB/XML Data types
--
-- use our own codegen to peel those off before naming the columns.
mkPersist tsn_codegen_config [groundhog|
- entity: News
- dbName: news
constructors:
- name: News
uniques:
test_on_delete_cascade :: TestTree
test_on_delete_cascade = testGroup "cascading delete tests"
[ check "deleting news deletes its children"
- "test/xml/newsxml.xml" ]
+ "test/xml/newsxml.xml"
+ 4 -- 2 news_teams and 2 news_locations that should remain.
+ ]
where
- check desc path = testCase desc $ do
+ check desc path expected = testCase desc $ do
news <- unsafe_unpickle path pickle_message
let a = undefined :: News
let b = undefined :: NewsTeam
migrate d
migrate e
_ <- dbimport news
- -- No idea how 'delete' works, so do this instead.
- executeRaw False "DELETE FROM news;" []
+ deleteAll a
count_a <- countAll a
count_b <- countAll b
count_c <- countAll c
count_d <- countAll d
count_e <- countAll e
return $ count_a + count_b + count_c + count_d + count_e
- -- There are 2 news_teams and 2 news_locations that should remain.
- let expected = 4
actual @?= expected