capitalism_game/mods/capitalism/land/tests/api_spec.lua

177 lines
4.6 KiB
Lua

package.path = 'mods/?.lua;' ..
package.path
_G.land = {}
_G.areas = { areas = {}, save = function() end }
_G.audit = function()
return { post = function() end }
end
_G.vector = {}
require("libs/lib_utils/vector")
require("capitalism/land/api")
_G.company = {}
function company.get_by_name(owner)
local data
if owner == "c:government" then
data = { name = "c:government", title = "Government", owner = "testuser" }
elseif owner == "c:test" then
data = { name = "c:test", title = "Test", owner = "testuser" }
else
return nil
end
function data:check_perm(pname, perm, meta)
return self.owner == pname
end
function data:is_government()
return self.name == "c:government"
end
return data
end
function company.get_active(pname)
if pname == "testuser" and company.is_active then
return company.get_by_name("c:government")
end
end
_G.minetest = {
player_exists = function(name)
return name == "testuser"
end,
check_player_privs = function()
return false
end,
}
describe("land", function()
it("get_by_area_id", function()
assert.is_nil(land.get_by_area_id(1))
areas.areas[1] = { owner = "c:test" }
assert.is_nil(land.get_by_area_id(1))
areas.areas[1].land_type = "commercial"
assert.equals(land.get_by_area_id(1), areas.areas[1])
end)
it("transfer", function()
local area = areas.areas[1]
area.owner = "c:government"
assert.equals(land.get_by_area_id(1), area)
assert.equals(area.owner, "c:government")
local suc, msg = land.transfer(2, "c:test", "testuser")
assert.is_false(suc)
assert.is_not_nil(msg:match("to find area"))
assert.equals(area.owner, "c:government")
suc, msg = land.transfer(1, "c:test", "testuser")
assert.is_false(suc)
assert.is_not_nil(msg:match("transfer root areas"))
assert.equals(area.owner, "c:government")
area.parent = 3
suc, msg = land.transfer(1, "c:test", "testuser")
assert.is_false(suc)
assert.is_not_nil(msg:match("acting on behalf"))
assert.equals(area.owner, "c:government")
company.is_active = true
suc, msg = land.transfer(1, "nonexist", "testuser")
assert.is_false(suc)
assert.is_not_nil(msg:match("did you forget"))
assert.equals(area.owner, "c:government")
suc, msg = land.transfer(1, "c:nonexist", "testuser")
assert.is_false(suc)
assert.is_not_nil(msg:match("doesn't exist"))
assert.equals(area.owner, "c:government")
suc = land.transfer(1, "c:test", "testuser")
assert.is_true(suc)
assert.equals(area.owner, "c:test")
end)
it("set_price", function()
company.is_active = false
local area = { owner = "c:test", id=1 }
assert.is_nil(area.land_sale)
local suc, msg = land.set_price(area, "foobar", 100)
assert.is_false(suc)
assert.is_not_nil(msg:match("unclassified"))
area.land_type = "commercial"
assert.is_nil(area.land_sale)
suc, msg = land.set_price(area, "foobar", -1)
assert.is_false(suc)
assert.is_not_nil(msg:match("greater than"))
assert.is_nil(area.land_sale)
suc, msg = land.set_price(area, "foobar", 100)
assert.is_false(suc)
assert.is_not_nil(msg:match("government is currently able"))
area.owner = "c:government"
assert.is_nil(area.land_sale)
suc, msg = land.set_price(area, "foobar", 100)
assert.is_false(suc)
assert.is_not_nil(msg:match("Root land is not sellable"))
area.parent = 3
assert.is_nil(area.land_sale)
suc, msg = land.set_price(area, "foobar", 100)
assert.is_false(suc)
assert.is_not_nil(msg:match("do not own"))
assert.is_nil(area.land_sale)
suc, msg = land.set_price(area, "testuser", 100)
assert.is_false(suc)
assert.is_not_nil(msg:match("do not own"))
company.is_active = true
assert.is_nil(area.land_sale)
suc, msg = land.set_price(area, "foobar", 100)
assert.is_false(suc)
assert.is_not_nil(msg:match("do not own"))
assert.is_nil(area.land_sale)
suc = land.set_price(area, "testuser", 100)
assert.is_true(suc)
assert.equals(area.land_sale, 100)
end)
it("calc_value", function()
local function v(x, y, z)
return { x=x, y=y, z=z }
end
areas.areas = {
{ owner="c:government", id=1, name="Root", pos1=v(0,0,0), pos2=v(100,100,100), parent=nil },
{ owner="c:government", id=2, name="City", pos1=v(0,0,0), pos2=v(100,100,100), parent=1 },
{ owner="c:government", id=3, name="Commercial", land_type="commercial", pos1=v(10,10,10), pos2=v(50,50,50),
parent=2, land_value=1000000 },
{ owner="c:test", id=4, name="Mall", land_type="commercial", pos1=v(10,10,10), pos2=v(30,30,30), parent=3 },
{ owner="c:test", id=5, name="Shop", land_type="commercial", pos1=v(10,10,10), pos2=v(20,13,20), parent=4 },
}
assert.equals(land.calc_value(areas.areas[5]), 200*(10*10*3*0.33) + 1000000 * 1 / (52.25*0.1 + 2))
end)
end)