packages feed

aura-2.0.0: test/Test.hs

{-# LANGUAGE OverloadedStrings #-}

module Main ( main ) where

import           Aura.Languages
import           Aura.Packages.Repository
import           Aura.Pacman
import           Aura.Pkgbuild.Security
import           Aura.Types
import           BasePrelude
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.Map.Strict as M
import qualified Data.Text as T
import qualified Data.Text.IO as T
import           Data.Versions
-- import           Language.Bash.Pretty (prettyText)
import           System.Path
import           Test.Tasty
import           Test.Tasty.HUnit
import           Text.Megaparsec
-- import           Text.Pretty.Simple (pPrintNoColor)

---

main :: IO ()
main = do
  conf <- T.readFile "test/pacman.conf"
  pkb  <- Pkgbuild <$> BL.readFile "test/aura.PKGBUILD"
  defaultMain $ suite conf pkb

suite :: T.Text -> Pkgbuild -> TestTree
suite conf pb = testGroup "Unit Tests"
  [ testGroup "Aura.Core"
    [ testCase "parseDep - python2" $ parseDep "python2" @?= Just (Dep "python2" Anything)
    , testCase "parseDep - python2-lxml>=3.1.0"
      $ parseDep "python2-lxml>=3.1.0" @?= Just (Dep "python2-lxml" . AtLeast . Ideal $ SemVer 3 1 0 [] [])
    , testCase "parseDep - foobar>1.2.3"
      $ parseDep "foobar>1.2.3" @?= Just (Dep "foobar" . MoreThan . Ideal $ SemVer 1 2 3 [] [])
    , testCase "parseDep - foobar=1.2.3"
      $ parseDep "foobar=1.2.3" @?= Just (Dep "foobar" . MustBe . Ideal $ SemVer 1 2 3 [] [])
    ]
  , testGroup "Aura.Types"
    [ testCase "simplepkg"
      $ simplepkg (PackagePath $ fromAbsoluteFilePath "/var/cache/pacman/pkg/linux-is-cool-3.2.14-1-x86_64.pkg.tar.xz")
      @?= Just (SimplePkg "linux-is-cool" . Ideal $ SemVer 3 2 14 [[Digits 1]] [])
    , testCase "simplepkg'"
      $ simplepkg' "xchat 2.8.8-19" @?= Just (SimplePkg "xchat" . Ideal $ SemVer 2 8 8 [[Digits 19]] [])
    ]
  , testGroup "Aura.Packages.Repository"
    [ testCase "extractVersion" $ extractVersion firefox @?= Just (Ideal $ SemVer 60 0 2 [[Digits 1]] [])
    ]
  , testGroup "Aura.Pacman"
    [ testCase "Parsing pacman.conf" $ do
        let p = parse config "pacman.conf" conf
            r = either (const Nothing) (\(Config c) -> Just c) p >>= M.lookup "HoldPkg"
        r @?= Just ["pacman", "glibc"]
    ]
  , testGroup "Aura.Languages"
    [ testCase "Language names are complete" $ do
        case [minBound..maxBound] :: [Language] of
          [] -> assertFailure "No languages found"
          lang:restOfLangs -> do
            let names = languageNames lang
            for_ restOfLangs $ \otherLang -> do
              let otherNames = languageNames otherLang
              assertEqual ("Language name maps for " ++ show lang ++ " and " ++ show otherLang ++ " have different size") (M.size names) (M.size otherNames)
    ]
  , testGroup "Aura.Pkgbuild.Security"
    [ testCase "Parsing - aura.PKGBUILD" $ do
        -- pPrintNoColor $ map (first prettyText) . bannedTerms <$> ppb
        -- pPrintNoColor ppb
        assertBool "Failed to parse" $ isJust ppb
    , testCase "Detecting banned terms" $ (length . bannedTerms <$> ppb) @?= Just 5
    ]
  ]
  where ppb = parsedPB pb

firefox :: T.Text
firefox = "Repository      : extra\n\
\Name            : firefox\n\
\Version         : 60.0.2-1\n\
\Description     : Standalone web browser from mozilla.org"