packages feed

gemoire-1.0.0: test/Case/Gemlog.hs

{-# LANGUAGE OverloadedStrings #-}

module Case.Gemlog
    ( gemlog
    ) where

import Data.HashMap.Strict (empty, fromList, singleton)
import Test.HUnit (Test, (~=?))

import Gemoire.Gemlog.Feed (escapeFeed, lastModified, sortPosts)
import Gemoire.Gemlog.Post (parsePost)

gemlog :: [Test]
gemlog = feeds <> posts

feeds :: [Test]
feeds =
    let post =
            [ fromList [("post", "1"), ("modified", "2024-08-17T05:00:00+00:00")]
            , fromList [("post", "2"), ("modified", "2024-08-17T09:00:00+00:00")]
            , fromList [("post", "3"), ("modified", "2024-11-14T13:47:01+00:00")]
            ]
        feed =
            fromList
                [ ("test_url", "url test")
                , ("base", "also'url")
                , ("entries", "as&is")
                , ("other", "<escaped>")
                ]
     in [ [ fromList [("post", "3"), ("modified", "2024-11-14T13:47:01+00:00")]
          , fromList [("post", "2"), ("modified", "2024-08-17T09:00:00+00:00")]
          , fromList [("post", "1"), ("modified", "2024-08-17T05:00:00+00:00")]
          ]
            ~=? sortPosts post
        , fromList [("modified", "2024-11-14T13:47:01+00:00"), ("modified_date", "2024-11-14")]
            ~=? lastModified post
        , fromList
            [ ("test_url", "url%20test")
            , ("base", "also%27url")
            , ("entries", "as&is")
            , ("other", "&lt;escaped&gt;")
            ]
            ~=? escapeFeed False feed
        ]

posts :: [Test]
posts =
    [ fromList [("post", "post")] ~=? parsePost empty "post"
    , fromList [("title", "heading"), ("post", "# heading")] ~=? parsePost empty "# heading"
    , fromList [("data", "extras"), ("post", "with extras")]
        ~=? parsePost (singleton "data" "extras") "with {$data$}"
    , fromList [("data", "variables"), ("post", "with variables")]
        ~=? parsePost empty "{= data variables =}\CR\LFwith {$data$}"
    ]