manager_test.clj 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. (ns bombnet.manager-test
  2. (:require [clojure.test :refer :all]
  3. [clojure.core.async :refer [<! chan close! go]]
  4. [bombnet.manager :refer :all]))
  5. (defn new-room []
  6. (->Room {} #{} nil nil nil))
  7. (defn closed-chan []
  8. (let [ch (chan)]
  9. (close! ch)
  10. ch))
  11. (deftest room-test
  12. (testing "Clients can join"
  13. (let [room (new-room)]
  14. (is (= (->Room {100 {:id 100 :channel "chan"}} #{} nil nil nil)
  15. (client-join room {:id 100 :channel "chan"})))))
  16. (testing "Players leave when the client leaves"
  17. (let [ch (closed-chan)
  18. room (-> (new-room)
  19. (client-join {:id 100 :channel ch})
  20. (player-join 100))
  21. left-room (-> room
  22. (client-join {:id 101 :channel "chan"})
  23. (client-leave 100) )]
  24. (is (= (->Room {100 {:id 100 :channel ch}} #{100} nil nil nil)
  25. room))
  26. (is (= (->Room {101 {:id 101 :channel "chan"}} #{} nil nil nil)
  27. left-room))))
  28. (testing "Only up to 4 players can join"
  29. (let [chan-1 (chan)
  30. chan-5 (chan)
  31. empty-room (->Room {1 {:id 1 :channel chan-1}}
  32. #{} nil nil nil)
  33. full-room (->Room {1 {:id 1}
  34. 2 {:id 2}
  35. 3 {:id 3}
  36. 4 {:id 4}
  37. 5 {:id 5 :channel chan-5}}
  38. #{1 2 3 4}
  39. nil nil nil)]
  40. (go (is (= (<! chan-1) {:message "Joined game."})))
  41. (player-join empty-room 1)
  42. (go (is (= (<! chan-5) {:message "Could not join game. Lobby is full."})))
  43. (player-join full-room 5))))