packages feed

exh-1.0.0: test/Spec.hs

module Main where

import Data.Either
import Data.Maybe
import Optics.Core
import Test.Hspec
import Text.HTML.DOM
import Web.Exhentai.API.Gallery
import qualified Web.Exhentai.Parsing.Gallery as G
import Web.Exhentai.Parsing.Image
import qualified Web.Exhentai.Parsing.Search as S
import Web.Exhentai.Utils
import Prelude hiding (readFile)

main :: IO ()
main = do
  sanityCheck

sanityCheck :: IO ()
sanityCheck = do
  image <- readFile "test/Image.html"
  galleryMpv <- readFile "test/Gallery-MPV.html"
  galleryNonMpv <- readFile "test/Gallery-NonMPV.html"
  galleryReplaced <- readFile "test/Gallery-Replaced.html"
  search <- readFile "test/Search-Extended.html"
  galleryWithAd <- readFile "test/Gallery-ADs.html"
  hspec $ do
    describe "Image.imageSrc" $ do
      it "should return the image source link" $ do
        (image ^?: imageSrc) `shouldSatisfy` isJust

    describe "Image.nextPage" $ do
      it "should return the link to the next page" $ do
        (image ^?: nextImage) `shouldSatisfy` isJust

    describe "Gallery.enTitle" $ do
      it "should return the title of the gallery" $ do
        (galleryMpv ^?: G.enTitle) `shouldSatisfy` isJust
        (galleryNonMpv ^?: G.enTitle) `shouldSatisfy` isJust
        (galleryReplaced ^?: G.enTitle) `shouldSatisfy` isJust

    describe "Gallery.jaTitle" $ do
      it "should return the original title of the gallery" $ do
        (galleryMpv ^?: G.jaTitle) `shouldSatisfy` isJust
        (galleryNonMpv ^?: G.jaTitle) `shouldSatisfy` isJust
        (galleryReplaced ^?: G.jaTitle) `shouldSatisfy` isJust

    describe "Gallery.category" $ do
      it "should return the category of the gallery" $ do
        (galleryMpv ^?: G.category) `shouldSatisfy` isJust
        (galleryNonMpv ^?: G.category) `shouldSatisfy` isJust
        (galleryReplaced ^?: G.category) `shouldSatisfy` isJust

    describe "Gallery.uploader" $ do
      it "should return the uploader of the gallery" $ do
        (galleryMpv ^?: G.uploader) `shouldSatisfy` isJust
        (galleryNonMpv ^?: G.uploader) `shouldSatisfy` isJust
        (galleryReplaced ^?: G.uploader) `shouldSatisfy` isJust

    describe "Gallery.ratingCount" $ do
      it "should return the total rating count of the gallery" $ do
        (galleryMpv ^?: G.ratingCount) `shouldSatisfy` isJust
        (galleryNonMpv ^?: G.ratingCount) `shouldSatisfy` isJust
        (galleryReplaced ^?: G.ratingCount) `shouldSatisfy` isJust

    describe "Gallery.averageRating" $ do
      it "should return the average rating of the gallery" $ do
        (galleryMpv ^?: G.averageRating) `shouldSatisfy` isJust
        (galleryNonMpv ^?: G.averageRating) `shouldSatisfy` isJust
        (galleryReplaced ^?: G.averageRating) `shouldSatisfy` isJust

    describe "Gallery.newer" $ do
      it "should return the link to the newer version of the library on replaced galleries and nothing otherwise" $ do
        (galleryMpv ^?: G.newer) `shouldSatisfy` isNothing
        (galleryNonMpv ^?: G.newer) `shouldSatisfy` isNothing
        (galleryReplaced ^?: G.newer) `shouldSatisfy` isJust

    describe "Gallery.parseGallery" $ do
      it "should parse gallery just fine" $ do
        parseGallery galleryMpv `shouldSatisfy` isRight
        parseGallery galleryNonMpv `shouldSatisfy` isRight
        parseGallery galleryReplaced `shouldSatisfy` isRight
        parseGallery galleryWithAd `shouldSatisfy` isRight

    describe "Search.pages" $ do
      it "should return available page range" $ do
        (search ^?: S.pages) `shouldSatisfy` isJust

    describe "Search.galleryPreviewElement" $ do
      it "should return gallery preview elements" $ do
        (search ^?: S.galleryPreviewElement) `shouldSatisfy` isJust

    describe "Search.galleryLink" $ do
      it "should return galleries" $ do
        (search ^?: S.galleryPreviewElement % S.galleryLink) `shouldSatisfy` isJust