128 lines
4.4 KiB
Clojure
128 lines
4.4 KiB
Clojure
(ns the-great-game.merchants.merchant-utils-test
|
|
(:require [clojure.test :refer :all]
|
|
[the-great-game.utils :refer [deep-merge]]
|
|
[the-great-game.world.world :refer [default-world]]
|
|
[the-great-game.merchants.merchant-utils :refer :all]))
|
|
|
|
(deftest expected-price-test
|
|
(testing "Anticipated prices in markets"
|
|
(let [world (deep-merge
|
|
default-world
|
|
{:merchants
|
|
{:archie
|
|
{:known-prices
|
|
{:buckie
|
|
{:iron
|
|
[{:price 1.7 :date 1}
|
|
{:price 2 :date 0}]}}}}})]
|
|
(let [actual (expected-price (-> world :merchants :archie) :fish :edinburgh)
|
|
expected 1] ;;
|
|
(is (= actual expected) "if no information assume 1"))
|
|
(let [actual (expected-price (-> world :merchants :archie) :iron :buckie)
|
|
expected 1.7] ;;
|
|
(is (= actual expected) "if information select the most recent")))))
|
|
|
|
(deftest burden-test
|
|
(testing "Burden of merchant"
|
|
(let [world (deep-merge
|
|
default-world
|
|
{:merchants
|
|
{:archie
|
|
{:stock
|
|
{:iron 1}}
|
|
:belinda
|
|
{:stock
|
|
{:fish 2}}
|
|
:callum
|
|
{:stock
|
|
{:iron 1
|
|
:fish 1}}}})]
|
|
(let [actual (burden :archie world)
|
|
expected (-> world :commodities :iron :weight)]
|
|
(is (= actual expected)))
|
|
(let [actual (burden :belinda world)
|
|
expected (* 2 (-> world :commodities :fish :weight))]
|
|
(is (= actual expected)))
|
|
(let [actual (burden :callum world)
|
|
expected (+
|
|
(-> world :commodities :iron :weight)
|
|
(-> world :commodities :fish :weight))]
|
|
(is (= actual expected)))
|
|
(let [actual (burden {} world)
|
|
expected 0]
|
|
(is (= actual expected)))
|
|
(let [actual (burden (-> world :merchants :deidre) world)
|
|
expected 0]
|
|
(is (= actual expected))))))
|
|
|
|
(deftest can-carry-test
|
|
(testing "What merchants can carry"
|
|
(let [world (deep-merge
|
|
default-world
|
|
{:merchants
|
|
{:archie
|
|
{:cash 5
|
|
:stock
|
|
{:iron 1}}
|
|
:belinda
|
|
{:stock
|
|
{:fish 2}}
|
|
:callum
|
|
{:stock
|
|
{:iron 1
|
|
:fish 1}}}})]
|
|
(let [actual (can-carry :archie world :fish)
|
|
expected 0]
|
|
(is (= actual expected)))
|
|
(let [actual (can-carry :belinda world :fish)
|
|
expected 8]
|
|
(is (= actual expected)))
|
|
(let [actual (can-carry (-> world :merchants :archie) world :fish)
|
|
expected 0]
|
|
(is (= actual expected)))
|
|
(let [actual (can-carry {:stock {:fish 7} :capacity 10} world :fish)
|
|
expected 3]
|
|
(is (= actual expected))))))
|
|
|
|
|
|
(deftest affordability-test
|
|
(testing "What merchants can afford to purchase"
|
|
(let [world (deep-merge
|
|
default-world
|
|
{:merchants
|
|
{:archie
|
|
{:cash 5
|
|
:stock
|
|
{:iron 1}}
|
|
:belinda
|
|
{:stock
|
|
{:fish 2}}
|
|
:callum
|
|
{:stock
|
|
{:iron 1
|
|
:fish 1}}}})]
|
|
(let [actual (can-afford :archie world :fish)
|
|
expected 5]
|
|
(is (= actual expected)))
|
|
(let [actual (can-afford :belinda world :fish)
|
|
expected 100]
|
|
(is (= actual expected)))
|
|
(let [actual (can-afford (-> world :merchants :archie) world :fish)
|
|
expected 5]
|
|
(is (= actual expected)))
|
|
(let [actual (can-afford {:cash 3 :location :buckie} world :fish)
|
|
expected 3]
|
|
(is (= actual expected)))
|
|
(is (thrown-with-msg?
|
|
Exception
|
|
#"No merchant?"
|
|
(can-afford :no-one world :fish)))
|
|
(is (thrown-with-msg?
|
|
Exception
|
|
#"No known location for merchant.*"
|
|
(can-afford {:cash 3} world :fish))))))
|
|
|
|
(deftest add-stock-test
|
|
(let [actual (add-stock {:iron 2 :fish 5} {:fish 3 :whisky 7})
|
|
expected {:iron 2 :fish 8 :whisky 7}]))
|