require "lunit"

module("tests.eressea.spells", package.seeall, lunit.testcase)

local r, f, u

function setup()
    eressea.free_game()
    eressea.settings.set("magic.regeneration.enable", "0")
    eressea.settings.set("magic.fumble.enable", "0")
    eressea.settings.set("rules.economy.food", "4")

    r = region.create(0, 0, "plain")
    f = faction.create("spell_payment@eressea.de", "elf", "de")
    u = unit.create(f, r, 1)
    u.magic = "gray"
    u:set_skill("magic", 12)
end

function test_spell_payment()
    u:add_spell("create_roi")

    local permaura = u:get_pooled("permaura")
    u:add_item("money", 3000)
    u.aura = 50
    u:clear_orders()
    u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ")
    process_orders()
    write_reports()
    assert_equal(1, u:get_item("roi"))
    assert_equal(0, u:get_item("money"))
    assert_equal(0, u.aura)
    assert_equal(permaura-1, u:get_pooled("permaura"))
end

function test_spell_not_found_no_payment()
    local permaura = u:get_pooled("permaura")
    u:add_item("money", 3000)
    u.aura = 50

    u:clear_orders()
    u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ")
    process_orders()

    assert_equal(0, u:get_item("roi"))
    assert_equal(3000, u:get_item("money"))
    assert_equal(50, u.aura)
    assert_equal(permaura, u:get_pooled("permaura"))
end

function test_create_roi()
    u:add_spell('create_roi')
    u:cast_spell('create_roi')
    assert_equal(1, u:get_item("roi"))
end

function test_create_roqf()
    u:add_spell('create_roqf')
    u:cast_spell('create_roqf')
    assert_equal(1, u:get_item("roqf"))
end

function test_create_aots()
    u:add_spell('create_aots')
    u:cast_spell('create_aots')
    assert_equal(1, u:get_item("aots"))
end

function test_create_ror()
    u:add_spell('create_ror')
    u:cast_spell('create_ror')
    assert_equal(1, u:get_item("ror"))
end

function test_create_trollbelt()
    u:add_spell('create_trollbelt')
    u:cast_spell('create_trollbelt')
    assert_equal(1, u:get_item("trollbelt"))
end

function test_create_dreameye()
    u:add_spell('create_dreameye')
    u:cast_spell('create_dreameye')
    assert_equal(1, u:get_item("dreameye"))
end

function test_create_antimagic()
    u:add_spell('create_antimagic')
    u:cast_spell('create_antimagic')
    assert_equal(1, u:get_item("antimagic"))
end

function test_create_rop()
    u:add_spell('create_rop')
    u:cast_spell('create_rop')
    assert_equal(1, u:get_item("rop"))
end