packages feed

brok-1.1.0: test/IO/HttpTest.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}

module IO.HttpTest where

import ClassyPrelude

import Test.Tasty

import Brok.IO.Http      (check, mkManager)
import Brok.Types.Brok   (mkApp)
import Brok.Types.Config (defaultConfig)
import Brok.Types.Link   (Link (Link), LinkType (..), urlToLink)
import Test.Tasty.HUnit

testLink :: Text -> IO Link
testLink lnk = do
    manager <- mkManager False
    runReaderT (check (urlToLink lnk)) (mkApp defaultConfig manager)

test_http :: TestTree
test_http =
    testGroup
        "Brok.IO.Http"
        [ testCase "Medium (409 with HEAD)" $ do
              result <-
                  testLink
                      "https://medium.freecodecamp.org/understanding-redux-the-worlds-easiest-guide-to-beginning-redux-c695f45546f6"
              assertEqual
                  "Returns a 200"
                  (Link
                       "https://medium.freecodecamp.org/understanding-redux-the-worlds-easiest-guide-to-beginning-redux-c695f45546f6"
                       (Working 200))
                  result
        , testCase "TutsPlus (Requires User-Agent Header)" $ do
              result <-
                  testLink
                      "https://code.tutsplus.com/tutorials/stateful-vs-stateless-functional-components-in-react--cms-29541"
              assertEqual
                  "Returns a 200"
                  (Link
                       "https://code.tutsplus.com/tutorials/stateful-vs-stateless-functional-components-in-react--cms-29541"
                       (Working 200))
                  result
        , testCase "buginit.com (Incomplete certificate chain)" $ do
              result <-
                  testLink
                      "https://buginit.com/javascript/javascript-destructuring-es6-the-complete-guide/"
              assertEqual
                  "Returns a 200"
                  (Link
                       "https://buginit.com/javascript/javascript-destructuring-es6-the-complete-guide/"
                       (Working 200))
                  result
        , testCase "Non-existent site" $ do
              result <- testLink "http://askdjfhaksjdhfkajsdfh.com"
              assertEqual
                  "Returns a 200"
                  (Link "http://askdjfhaksjdhfkajsdfh.com" ConnectionFailure)
                  result
        , testCase "Invalid URL" $ do
              result <- testLink "http://user:password&#64;securesite.com/secret-file.json&quot;"
              assertEqual
                  "Returns a 200"
                  (Link "http://user:password&#64;securesite.com/secret-file.json&quot;" InvalidURL)
                  result
        ]