technic-cd2025/technic_cnc/spec/interaction_spec.lua
SX e5e4cbe5a0 Fix mineunit tests for Technic and CNC (#226)
* Add modpaths, remove technic from CNC

* Add technic_cnc to error reporting
2021-10-24 17:03:46 +03:00

157 lines
5.7 KiB
Lua

require("mineunit")
mineunit("core")
mineunit("player")
mineunit("protection")
describe("CNC formspec interaction", function()
fixture("default")
fixture("basic_materials")
fixture("pipeworks")
fixture("digilines")
sourcefile("init")
-- Our player Sam will be helping, he promised to place some nodes
local Sam = Player("Sam")
local SX = Player("SX")
-- Construct test world with CNC machines
world.clear()
local pos = {x=3,y=2,z=1}
world.place_node(pos, {name = "technic:cnc_mk2", param2 = 0}, Sam)
local protectedpos = {x=2,y=2,z=2}
mineunit:protect(protectedpos, SX)
local nodedef = minetest.registered_nodes["technic:cnc_mk2"]
do -- prepare machines for simple upgrade check
world.place_node({x=98,y=98,z=98}, {name = "technic:cnc", param2 = 0}, Sam)
local meta = minetest.get_meta({x=98,y=98,z=98})
meta:set_string("cnc_product", "default:stone_technic_cnc_element_t")
meta:set_float("cnc_multiplier", 4.2)
end
do -- prepare machines for simple upgrade check
world.place_node({x=99,y=99,z=99}, {name = "technic:cnc_mk2", param2 = 0}, Sam)
local meta = minetest.get_meta({x=99,y=99,z=99})
meta:set_string("cnc_product", "default:stone_technic_cnc_element_t_double")
meta:set_float("cnc_multiplier", 4.2)
end
-- Let Sam do some formspec interaction tests with CNC machines
it("allows placing materials", function()
Sam:do_metadata_inventory_put(pos, "src", 1, ItemStack("default:stone 42"))
-- Check metadata values
local stack = minetest.get_meta(pos):get_inventory():get_stack("src", 1)
assert.equals("default:stone", stack:get_name())
assert.equals(42, stack:get_count())
end)
it("allows placing materials protected", function()
world.place_node(protectedpos, {name = "technic:cnc_mk2", param2 = 0}, SX)
SX:do_metadata_inventory_put(protectedpos, "src", 1, ItemStack("default:stone 42"))
-- Check metadata values
local stack = minetest.get_meta(protectedpos):get_inventory():get_stack("src", 1)
assert.equals("default:stone", stack:get_name())
assert.equals(42, stack:get_count())
end)
it("disallows placing materials protected", function()
world.place_node(protectedpos, {name = "technic:cnc_mk2", param2 = 0}, SX)
Sam:do_metadata_inventory_put(protectedpos, "src", 1, ItemStack("default:stone 42"))
-- Check metadata values
local stack = minetest.get_meta(protectedpos):get_inventory():get_stack("src", 1)
assert.equals("", stack:get_name())
assert.equals(0, stack:get_count())
end)
it("does not check protection for noop actions", function()
-- Check for unnecessary protection messages
spy.on(minetest, "is_protected")
-- Submit formspec without any meaningful action
nodedef.on_receive_fields(pos, "", { quit = true }, Sam)
-- Check that minetest.is_protected was not called
assert.spy(minetest.is_protected).was_not.called()
end)
it("checks protection for programming", function()
-- Check for unnecessary protection messages
spy.on(minetest, "is_protected")
-- Submit formspec without any meaningful action
nodedef.on_receive_fields(pos, "", { half = true }, Sam)
-- Check that minetest.is_protected was not called
assert.spy(minetest.is_protected).was.called()
end)
it("sets metadata on form submit", function()
-- Submit formspec selecting CNC sizes and digiline channel
nodedef.on_receive_fields(pos, "", { half = true }, Sam)
nodedef.on_receive_fields(pos, "", { full = true }, Sam)
nodedef.on_receive_fields(pos, "", { setchannel = true, channel = "Sam" }, Sam)
-- Check metadata values
local meta = minetest.get_meta(pos)
assert.equals(1, meta:get_int("size"))
assert.equals("Sam", meta:get("channel"))
end)
it("manufactures products", function()
-- Submit formspec selecting CNC sizes and program, 2 spheres and 16 sticks
nodedef.on_receive_fields(pos, "", { sphere = true }, Sam)
nodedef.on_receive_fields(pos, "", { stick = true }, Sam)
nodedef.on_receive_fields(pos, "", { sphere = true }, Sam)
nodedef.on_receive_fields(pos, "", { stick = true }, Sam)
-- Check metadata values
local meta = minetest.get_meta(pos)
assert.equals("stick", meta:get("program"))
-- Check output inventory for correct products
local stack1 = meta:get_inventory():get_stack("dst", 1)
assert.equals("default:stone_technic_cnc_sphere", stack1:get_name())
assert.equals(2, stack1:get_count())
local stack2 = meta:get_inventory():get_stack("dst", 2)
assert.equals("default:stone_technic_cnc_stick", stack2:get_name())
assert.equals(16, stack2:get_count())
end)
it("updates old machines", function()
do -- Verify starting point and set meta value that is used to look for old machine
local meta = minetest.get_meta({x=98,y=98,z=98})
assert.equals("default:stone_technic_cnc_element_t", meta:get("cnc_product"))
meta:set_float("technic_power_machine", 1)
end
do -- Verify starting point and set meta value that is used to look for old machine
local meta = minetest.get_meta({x=99,y=99,z=99})
assert.equals("default:stone_technic_cnc_element_t_double", meta:get("cnc_product"))
meta:set_float("technic_power_machine", 1)
end
nodedef.on_receive_fields({x=98,y=98,z=98}, "", { quit = true, channel = "Sam" }, Sam)
nodedef.on_receive_fields({x=99,y=99,z=99}, "", { quit = true, channel = "Sam" }, Sam)
do -- Check metadata values
local meta = minetest.get_meta({x=98,y=98,z=98})
assert.is_nil(meta:get("cnc_product"))
assert.is_nil(meta:get("cnc_multiplier"))
assert.equals("element_t", meta:get("program"))
assert.equals(2, meta:get_int("size"))
end
do -- Check metadata values
local meta = minetest.get_meta({x=99,y=99,z=99})
assert.is_nil(meta:get("cnc_product"))
assert.is_nil(meta:get("cnc_multiplier"))
assert.equals("element_t", meta:get("program"))
assert.equals(1, meta:get_int("size"))
end
end)
end)