packages feed

Barracuda-1.0.2: Tests/HUnit/ChannelList.hs

module Tests.HUnit.ChannelList where

import Data.Monoid
import Data.List (sort)
import Data.Set as Set
import Data.Time
import Test.HUnit
import Tests.Data
import Network.AdHoc.Channel
import Network.AdHoc.UserID
import Barracuda.ChannelList

channelList1 = TestCase $ do
	let now = date_mlk
	let cl  =  update now cname_sep07 channel_sep07 "description" True [user_eq]
		 $ update now cname_sep07 channel_csstuds "description" False [user_eq] (mempty :: ChannelMap)
	let cl2 = join user_wechner cname_sep07 channel_sep07 cl
	assertEqual "join and leave on public channel"
		cl
		(leave user_igel cname_sep07 channel_sep07 $ join user_igel cname_sep07 channel_sep07 cl)
	assertEqual "join and leave on private channel"
		cl
		(leave user_igel cname_sep07 channel_csstuds $ join user_igel cname_sep07 channel_csstuds cl)
	assertEqual "complete users set"
		(Set.singleton user_eq)
		(usersAll cl)
	assertEqual "partial users set from public channel"
		(Set.singleton user_eq)
		(usersChannel cname_sep07 channel_csstuds cl)
	assertEqual "partial users set from private channel"
		(Set.singleton user_eq)
		(usersChannel cname_sep07 channel_sep07 cl)

channelList2 = TestCase $ do
	let now   = date_jfk
	let later = 1 `addUTCTime` now
	let cl    = update now cname_csstuds   channel_csstuds   "d1" True [user_spuall]
		  $ update now cname_barracuda channel_barracuda "d2" False [user_igel]
		  $ mempty :: ChannelMap
	assertEqual "channel list"
		[(cname_barracuda, channel_barracuda, "d2", False), (cname_csstuds, channel_csstuds, "d1", True)]
		(sort $ channels cl)
	assertEqual "announce purge"
		(update later cname_barracuda channel_barracuda "d2" False [user_igel] mempty
			,[(cname_barracuda, channel_barracuda, "d2", Set.singleton user_igel, False)])
		(announcePurge (Set.singleton user_igel) later later cl)