content: {-# LANGUAGE NoImplicitPrelude #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE TemplateHaskell #-}
  
  module Parser.DBTest where
  
  import ClassyPrelude
  
  import Test.Tasty
  import Test.Tasty.HUnit
  
  import Data.Either    (fromRight, isLeft)
  import Data.FileEmbed (embedFile)
  
  import Brok.Parser.DB (db)
  
  content :: Text
  content = decodeUtf8 $(embedFile "test/data/.brokdb")
  
  invalid :: Text
  invalid = decodeUtf8 $(embedFile "test/data/.brokdb-invalid")
  
  big :: Text
  big = decodeUtf8 $(embedFile "test/data/.brokdb-big")
  
  test_db :: TestTree
  test_db =
      testGroup
          "Brok.Parser.DB"
          [ testCase
                "parses .brokdb"
                (assertEqual
                     "Gives back URLs with timestamp"
                     (Right
                          [ ( "https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle"
                            , 1547542131)
                          , ( "https://www.amazon.co.uk/Code-Language-Computer-Hardware-Software/dp/0735611319"
                            , 1546959165)
                          , ("https://rosettacode.org/wiki/FizzBuzz", 1546440765)
                          , ( "https://medium.com/dailyjs/the-why-behind-the-wat-an-explanation-of-javascripts-weird-type-system-83b92879a8db"
                            , 1546008765)
                          ])
                     (db content))
          , testCase
                "big file (last)"
                (assertEqual
                     "Gives back final url"
                     (Just
                          "https://developmentarc.gitbooks.io/react-indepth/content/life_cycle/the_life_cycle_recap.html")
                     (fst <$> (lastMay . fromRight [] $ db big)))
          , testCase
                "big file (length)"
                (assertEqual "Gives back length" 142 (length $ fromRight [] (db big)))
          , testCase "invalid .brokdb" (assertEqual "Parse error" True (isLeft $ db invalid))
          , testCase "parses empty" (assertEqual "Gives back empty array" (Right []) (db ""))
          ]
  