packages feed

macbeth-lib-0.0.12: test/PlayersSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module PlayersSpec (spec) where

import qualified Macbeth.Fics.Api.Rating as R
import Macbeth.Fics.FicsMessage
import Macbeth.Fics.Api.Player
import Macbeth.Fics.Parsers.Players

import Test.Hspec
import Data.Attoparsec.ByteString.Char8
import qualified Data.ByteString.Char8 as BS


spec :: Spec
spec =
  describe "Players" $ do

    it "single player, Unregistered" $ parseOnly player' "++++^TeachMATE(U)\n"
      `shouldBe` Right (Player R.Guest InvolvedInAGame (UserHandle "TeachMATE" [Unregistered]))

    it "single player 2, with space" $ parseOnly player' "1173.kalithkar  "
      `shouldBe` Right (Player (R.Rating 1173 R.None) InactiveOrBusy (UserHandle "kalithkar" []))

    it "single player, Admin & TournamentDirectorOrBot" $ parseOnly player' "----:adminBOT(*)(TD)"
      `shouldBe` Right (Player R.Unrated NotOpenForMatch (UserHandle "adminBOT" [Admin,ServiceRepresentative]))

    it "players" $ parseOnly players' "\n2985.BigMomma(C)                 ++++ xcx(U)\n1123^littledul                \n\n 1055 players displayed (of 1055). (*) indicates system administrator.\n\ETB"
      `shouldBe` Right [Player (R.Rating 2985 R.None) InactiveOrBusy (UserHandle "BigMomma" [Computer]),Player R.Guest NotBusy (UserHandle "xcx" [Unregistered]),Player (R.Rating 1123 R.None) InvolvedInAGame (UserHandle "littledul" [])]

    it "check num players in block" $ fmap (\(Players x) -> length x) (parseOnly players "\NAK5\SYN146\SYN\n2985.BigMomma(C)                 ++++ xcx(U)\n1123^littledul                \n\n 1055 players displayed (of 1055). (*) indicates system administrator.\n\ETB")
      `shouldBe` Right 3

    it "check num players in block 2" $ fmap (\(Players x) -> length x) (parseOnly players "\NAK5\SYN146\SYN\n2985.BigMomma(C)                 ++++ xcx(U)\n\n 1055 players displayed (of 1055). (*) indicates system administrator.\n\ETB")
      `shouldBe` Right 2

    it "bughouse partner offer" $ parseOnly partnerOffer "GuestZTCG offers to be your bughouse partner; type \"partner GuestZTCG\" to accept.\n"
      `shouldBe` Right (PartnerOffer (UserHandle "GuestZTCG" []))

    it "bughouse partner accepted" $ parseOnly partnerAccepted "GuestCCGS agrees to be your partner.\n"
      `shouldBe` Right (PartnerAccepted (UserHandle "GuestCCGS" []))

    it "bughouse partner declined" $ parseOnly partnerDeclined "GuestCCGS declines the partnership request.\n"
      `shouldBe` Right (PartnerDeclined (UserHandle "GuestCCGS" []))

    it "bughouse partner not open" $ parseOnly partnerNotOpen "\NAK6\SYN84\SYNzerowin is not open for bughouse.\n\ETB\n"
      `shouldBe` Right (PartnerNotOpen (UserHandle "zerowin" []))

    it "finger" $ parseOnly finger "\NAK6\SYN37\SYNFinger of raffa:\n\nOn for: 6 mins   Idle: 13 secs\n(playing  Who knew?\n\ETB\n"
      `shouldBe` Right (Finger (UserHandle "raffa" []) "\n\nOn for: 6 mins   Idle: 13 secs\n(playing  Who knew?\n")

    it "history" $ parseOnly history "\NAK6\SYN51\SYN\nHistory for Guffster:\n                  Opponent      Type         ECO End Date\n76: - 1337 B 1490 vitaliyS      [ br  5   0] B06 Res Wed Feb 10, 18:29 EST 2016\n77: + 1348 W 1466 vitaliyS      [ br  5   0] C23 Mat Wed Feb 10, 18:38 EST 2016\n\ETB"
      `shouldBe` Right (History (UserHandle "Guffster" []) "\n                  Opponent      Type         ECO End Date\n76: - 1337 B 1490 vitaliyS      [ br  5   0] B06 Res Wed Feb 10, 18:29 EST 2016\n77: + 1348 W 1466 vitaliyS      [ br  5   0] C23 Mat Wed Feb 10, 18:38 EST 2016\n")