packages feed

hunt-searchengine-0.3.0.1: test/Hunt/Index/ContextIndexTests.hs

module Hunt.Index.ContextIndexTests
(contextIndexTests)
where

import           Data.Maybe
import           Control.Monad

import           Test.Framework
import           Test.Framework.Providers.QuickCheck2
import           Test.Framework.Providers.HUnit
import           Test.HUnit                           hiding (Test)
import           Test.QuickCheck
import           Test.QuickCheck.Monadic

import           Hunt.Common.Document

import qualified Hunt.ContextIndex                    as ConIx
import qualified Hunt.DocTable                        as Dt
import           Hunt.TestHelper

contextIndexTests :: [Test]
contextIndexTests
      -- XXX todo: test schema insertion on contextinsert. (ignored right now)
    = [ testCase     "ContextIndex:            insert context"    test_insert_cx
      , testCase     "ContextIndex:            delete context"    test_delete_cx
      , testProperty "ContextIndex:            insertList"        test_insertlist
      ]

-- ----------------------------------------------------------------------------
-- helpers
-- ----------------------------------------------------------------------------

-- | check insert context on ContextIndex
test_insert_cx :: Assertion
test_insert_cx
    = True @?= length after == 1 && head after == cxName
    where
     cxName = "context"
     (ConIx.ContextIndex m _) = insertCx cxName
     after = ConIx.contexts m

test_delete_cx :: Assertion
test_delete_cx
    = True @?= length before == 1 && length after == 0
    where
      context = "context"
      cix@(ConIx.ContextIndex m _) = insertCx context
      before  = ConIx.contexts m
      (ConIx.ContextIndex m' _ ) = ConIx.deleteContext context cix
      after   = ConIx.contexts m'

-- | check insert on ContextIndex
test_insertlist :: Property
test_insertlist
  = monadicIO $ do
    -- insert random documents and docIds
    documents <- pick mkDocuments
    let cxIx = insertCx "context"
    insertData <- pick $ mkInsertList $ documents
    (ConIx.ContextIndex _ dt) <- ConIx.insertList insertData cxIx
    -- check if docuemnts are in document table
    docsTrue <- foldM (\b doc -> Dt.lookupByURI (uri doc) dt >>= \mid -> return (b && isJust mid)) True documents
    -- check if documents are in index
    -- XXX TODO
    return docsTrue