Files
Paradise/code/tests/attack_chain/test_attack_chain_reagent_containers.dm
warriorstar-orion 064f0ce221 fix some tests (#29729)
* non airlock stuff

* pain unending

* comment local test define back out

* this needs a room to spawn mobs in
2025-07-09 14:16:36 +00:00

366 lines
16 KiB
Plaintext

/datum/game_test/room_test/attack_chain_applicator/Run()
var/datum/test_puppeteer/player = new(src)
var/datum/test_puppeteer/target = player.spawn_puppet_nearby()
var/obj/item/reagent_containers/applicator/mender = player.spawn_obj_in_hand(/obj/item/reagent_containers/applicator/burn)
mender.delay = 0
target.puppet.apply_damage(1, BURN)
player.click_on(target)
TEST_ASSERT(target.check_attack_log("Automends with"), "player failed to use mender on target")
TEST_ASSERT_EQUAL(target.puppet.health, target.puppet.getMaxHealth(), "mender failed to mend damage")
player.puppet.attack_log_old = null
player.puppet.apply_damage(1, BURN)
player.use_item_in_hand()
TEST_ASSERT(player.check_attack_log("Automends with"), "player failed to use mender on target")
TEST_ASSERT_EQUAL(player.puppet.health, player.puppet.getMaxHealth(), "mender failed to mend damage")
mender.reagents.total_volume = 0
player.click_on(target)
TEST_ASSERT_LAST_CHATLOG(player, "[mender] is empty")
var/obj/item/storage/backpack/backpack = player.spawn_obj_nearby(/obj/item/storage/backpack)
player.click_on(backpack)
TEST_ASSERT_LAST_CHATLOG(player, "You put")
// ToasTODO: Add an AltClick test
// Test recipe for testing reagent containers in old kitchen machinery
/datum/recipe/microwave/test_recipe
duplicate = FALSE
reagents = list("sodiumchloride" = 50)
items = list(/obj/item/food/grown/apple)
result = /obj/item/food/badrecipe
/datum/game_test/room_test/attack_chain_condiment/Run()
var/datum/test_puppeteer/player = new(src)
var/obj/item/reagent_containers/saltshaker = player.spawn_obj_in_hand(/obj/item/reagent_containers/condiment/saltshaker)
var/obj/structure/reagent_dispensers/watertank = player.spawn_obj_nearby(/obj/structure/reagent_dispensers/watertank)
player.click_on(watertank)
TEST_ASSERT_LAST_CHATLOG(player, "[saltshaker] is full!")
var/obj/machinery/kitchen_machine/microwave = player.spawn_obj_nearby(/obj/machinery/kitchen_machine/microwave)
player.click_on(microwave)
TEST_ASSERT_ANY_CHATLOG(player, "You transfer")
TEST_ASSERT_NOT_CHATLOG(player, "You hit")
player.click_on(player)
TEST_ASSERT_LAST_CHATLOG(player, "You swallow some")
saltshaker.reagents.total_volume = 0
player.click_on(microwave)
TEST_ASSERT_LAST_CHATLOG(player, "is empty!")
player.click_on(player)
TEST_ASSERT_LAST_CHATLOG(player, "None of [saltshaker] left, oh no!")
player.click_on(watertank)
TEST_ASSERT_LAST_CHATLOG(player, "You fill")
var/obj/item/storage/backpack = player.spawn_obj_nearby(/obj/item/storage/backpack)
player.click_on(backpack)
TEST_ASSERT_LAST_CHATLOG(player, "You put")
var/obj/item/food/sliced/margherita_pizza = player.spawn_obj_nearby(/obj/item/food/sliced/margherita_pizza)
player.spawn_obj_in_hand(/obj/item/reagent_containers/condiment/pack)
player.click_on(margherita_pizza)
TEST_ASSERT_LAST_CHATLOG(player, "You tear open")
player.spawn_obj_in_hand(/obj/item/reagent_containers/condiment/pack)
player.click_on(backpack)
TEST_ASSERT_LAST_CHATLOG(player, "You put")
/datum/game_test/room_test/attack_chain_drinks/Run()
var/datum/test_puppeteer/player = new(src)
var/obj/structure/reagent_dispensers/watertank/watertank = player.spawn_obj_nearby(/obj/structure/reagent_dispensers/watertank)
var/obj/item/reagent_containers/glass/bucket/bucket = player.spawn_obj_nearby(/obj/item/reagent_containers/glass/bucket)
var/obj/item/storage/backpack/backpack = player.spawn_obj_nearby(/obj/item/storage/backpack)
// Drinks
var/obj/item/reagent_containers/drinks/coffee/coffee = player.spawn_obj_in_hand(/obj/item/reagent_containers/drinks/coffee)
player.click_on(player)
TEST_ASSERT_ANY_CHATLOG(player, "You swallow a gulp of [coffee]")
player.click_on(bucket)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer")
coffee.reagents.total_volume = 0
player.click_on(player)
TEST_ASSERT_LAST_CHATLOG(player, "None of [coffee] left, oh no!")
player.click_on(bucket)
TEST_ASSERT_LAST_CHATLOG(player, "[coffee] is empty.")
player.click_on(watertank)
TEST_ASSERT_LAST_CHATLOG(player, "You fill [coffee] with")
player.click_on(backpack)
TEST_ASSERT(coffee in backpack.contents, "player failed to put [coffee] in backpack")
bucket.reagents.total_volume = 0
qdel(coffee)
// Cans
var/obj/item/reagent_containers/drinks/cans/can = player.spawn_obj_in_hand(/obj/item/reagent_containers/drinks/cans/cola)
player.click_on(player)
TEST_ASSERT_LAST_CHATLOG(player, "You need to open [can] first!")
player.use_item_in_hand()
TEST_ASSERT_LAST_CHATLOG(player, "You open the drink with an audible pop!")
player.click_on(watertank)
TEST_ASSERT_LAST_CHATLOG(player, "You fill [can] with")
player.click_on(player)
TEST_ASSERT_ANY_CHATLOG(player, "You swallow a gulp of [can]")
player.click_on(bucket)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer")
player.set_zone("head")
player.set_intent("harm")
can.reagents.total_volume = 0
player.click_on(player)
TEST_ASSERT_LAST_CHATLOG(player, "You crush [can] on your forehead.")
can = player.spawn_obj_in_hand(/obj/item/reagent_containers/drinks/cans/cola)
player.set_intent("help")
player.click_on(backpack)
TEST_ASSERT(can in backpack.contents, "player failed to put can in backpack")
qdel(can)
// Bottles
var/obj/item/reagent_containers/drinks/bottle/whiskey/bottle = player.spawn_obj_in_hand(/obj/item/reagent_containers/drinks/bottle/whiskey)
player.click_on(bucket)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer")
player.click_on(player)
TEST_ASSERT_ANY_CHATLOG(player, "You swallow a gulp of [bottle]")
player.click_on(watertank)
TEST_ASSERT_LAST_CHATLOG(player, "You fill [bottle] with")
player.set_intent("harm")
player.click_on(player)
TEST_ASSERT(player.check_attack_log("Hit with [bottle]"), "player failed to smash a bottle on harm intent")
TEST_ASSERT_NOTEQUAL(player.puppet.health, player.puppet.getMaxHealth(), "bottle smash didnt deal damage")
player.puppet.drop_item()
player.set_intent("help")
bottle = player.spawn_obj_in_hand(/obj/item/reagent_containers/drinks/bottle/whiskey)
player.click_on(backpack)
TEST_ASSERT(bottle in backpack.contents, "player failed to put bottle in backpack")
qdel(bottle)
// Molotov
var/obj/item/reagent_containers/drinks/bottle/molotov/molotov = player.spawn_obj_nearby(/obj/item/reagent_containers/drinks/bottle/molotov)
molotov.list_reagents = list("vodka" = 100)
var/lighter = player.spawn_obj_in_hand(/obj/item/lighter/zippo)
player.use_item_in_hand()
player.click_on(molotov)
TEST_ASSERT(molotov.active, "player failed to light molotov")
player.puppet.drop_item()
player.click_on(molotov)
player.use_item_in_hand()
TEST_ASSERT(!molotov.active, "player failed to extinguish molotov")
player.click_on(backpack)
TEST_ASSERT(molotov in backpack.contents, "player failed to put molotov in backpack")
qdel(molotov)
// Drinking glass
var/obj/item/reagent_containers/drinks/drinkingglass/glass = player.spawn_obj_nearby(/obj/item/reagent_containers/drinks/drinkingglass)
var/obj/item/food/egg/egg = player.spawn_obj_in_hand(/obj/item/food/egg)
player.click_on(glass)
TEST_ASSERT_LAST_CHATLOG(player, "You break [egg] in")
player.click_on(glass)
player.click_on(backpack)
TEST_ASSERT(glass in backpack.contents, "player failed to put drinking glass in backpack")
qdel(glass)
// Shot glass - For some reason the shotglass doesn't get clicked. Works ingame
var/obj/item/reagent_containers/drinks/drinkingglass/shotglass/shotglass = player.spawn_obj_nearby(/obj/item/reagent_containers/drinks/drinkingglass/shotglass)
shotglass.reagents.add_reagent("vodka", 15)
player.click_on(lighter)
player.click_on(shotglass)
TEST_ASSERT_LAST_CHATLOG(player, "The shot glass of Vodka begins to burn with a blue hue!")
player.puppet.drop_item()
player.click_on(shotglass)
player.use_item_in_hand()
TEST_ASSERT_LAST_CHATLOG(player, "The dancing flame on the flaming shot glass of Vodka dies out.")
/datum/game_test/room_test/attack_chain_medcontainers/Run()
var/datum/test_puppeteer/player = new(src)
var/datum/test_puppeteer/target = player.spawn_puppet_nearby()
var/obj/structure/table/table = player.spawn_obj_nearby(/obj/structure/table)
// Pills
var/obj/pill = player.spawn_obj_in_hand(/obj/item/reagent_containers/pill/salicylic)
player.click_on_self()
TEST_ASSERT_LAST_CHATLOG(player, "You swallow [pill].")
var/obj/beaker = player.spawn_obj_nearby(/obj/item/reagent_containers/glass/beaker)
player.puppet.swap_hand()
pill = player.spawn_obj_in_hand(/obj/item/reagent_containers/pill/salicylic)
player.click_on(beaker)
TEST_ASSERT_LAST_CHATLOG(player, "You break open [pill] in [beaker].")
pill = player.spawn_obj_in_hand(/obj/item/reagent_containers/pill/salicylic)
player.click_on(beaker)
TEST_ASSERT_LAST_CHATLOG(player, "You dissolve [pill] in [beaker].")
pill = player.spawn_obj_in_hand(/obj/item/reagent_containers/pill/salicylic)
player.use_item_in_hand()
TEST_ASSERT_LAST_CHATLOG(player, "You swallow [pill].")
pill = player.spawn_obj_in_hand(/obj/item/reagent_containers/pill/salicylic)
player.click_on(table)
TEST_ASSERT(pill in get_turf(table), "pill not placed on table")
// Patches
var/obj/item/reagent_containers/patch/patch = player.spawn_obj_in_hand(/obj/item/reagent_containers/patch/silver_sulf)
player.click_on_self()
TEST_ASSERT_LAST_CHATLOG(player, "You apply [patch].")
patch = player.spawn_obj_in_hand(/obj/item/reagent_containers/patch/silver_sulf)
patch.instant_application = TRUE
player.click_on(target)
TEST_ASSERT_LAST_CHATLOG(player, "[player.puppet] forces [target.puppet] to apply [patch].")
// Beakers
beaker = player.spawn_obj_in_hand(/obj/item/reagent_containers/glass/beaker)
var/obj/machinery/clonepod/clonepod = player.spawn_obj_nearby(/obj/machinery/clonepod)
beaker.reagents.add_reagent("sanguine_reagent", 10)
player.click_on(clonepod)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer 10 units of the solution to [clonepod].")
player.click_on(table)
TEST_ASSERT(beaker in get_turf(table), "beaker not placed on table")
// Pill bottles
var/obj/pill_bottle = player.spawn_obj_in_hand(/obj/item/storage/pill_bottle)
player.puppet.swap_hand()
pill = player.spawn_obj_in_hand(/obj/item/reagent_containers/pill/salicylic)
player.click_on(pill_bottle)
TEST_ASSERT_LAST_CHATLOG(player, "You put [pill] into [pill_bottle].")
/datum/game_test/room_test/attack_chain_syringes/Run()
var/datum/test_puppeteer/player = new(src)
var/datum/test_puppeteer/target = player.spawn_puppet_nearby()
var/obj/item/reagent_containers/syringe/syringe = player.spawn_obj_in_hand(/obj/item/reagent_containers/syringe)
var/obj/beaker = player.spawn_obj_nearby(/obj/item/reagent_containers/glass/beaker)
beaker.reagents.add_reagent("plasma_dust", 10)
player.click_on(beaker)
TEST_ASSERT_LAST_CHATLOG(player, "You fill the syringe with 5 units of the solution.")
qdel(syringe)
syringe = player.spawn_obj_in_hand(/obj/item/reagent_containers/syringe)
player.click_on(target)
TEST_ASSERT_LAST_CHATLOG(player, "[player.puppet] takes a blood sample from [target.puppet]")
qdel(syringe)
syringe = player.spawn_obj_in_hand(/obj/item/reagent_containers/syringe)
syringe.syringe_draw_time = 0
player.click_on_self()
TEST_ASSERT_LAST_CHATLOG(player, "[player.puppet] takes a blood sample from [player.puppet]")
var/obj/slime_extract = player.spawn_obj_nearby(/obj/item/slime_extract/grey)
player.click_on(slime_extract)
TEST_ASSERT_ANY_CHATLOG(player, "the used slime extract's power is consumed in the reaction")
player.click_on(beaker)
TEST_ASSERT_LAST_CHATLOG(player, "You inject 5 units of the solution")
/datum/game_test/room_test/attack_chain_iv_bags/Run()
var/datum/test_puppeteer/player = new(src)
var/datum/test_puppeteer/target = player.spawn_puppet_nearby()
var/obj/machinery/iv_drip/iv_drip = player.spawn_obj_nearby(/obj/machinery/iv_drip)
var/obj/blood_bag = player.spawn_obj_in_hand(/obj/item/reagent_containers/iv_bag)
player.click_on(iv_drip)
TEST_ASSERT_LAST_CHATLOG(player, "You attach [blood_bag] to [iv_drip].")
var/obj/beaker = player.spawn_obj_in_hand(/obj/item/reagent_containers/glass/beaker/cryoxadone)
player.click_on(iv_drip)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer 10 units of the solution to [blood_bag].")
player.put_away(beaker)
target.puppet.forceMove(get_turf(iv_drip))
iv_drip.drag_drop_onto(target.puppet, player.puppet)
TEST_ASSERT_LAST_CHATLOG(player, "[player.puppet] inserts [blood_bag]'s needle into [target.puppet]'s arm")
blood_bag = player.spawn_obj_in_hand(/obj/item/reagent_containers/iv_bag)
player.puppet.swap_hand()
player.retrieve(beaker)
player.click_on(blood_bag)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer 10 units of the solution to [blood_bag]")
player.puppet.swap_hand()
player.click_on(beaker)
TEST_ASSERT_LAST_CHATLOG(player, "You transfer 1 units of the solution to [beaker]")
/datum/game_test/room_test/attack_chain_chemistry_bags/Run()
var/datum/test_puppeteer/player = new(src)
var/obj/table = player.spawn_obj_nearby(/obj/structure/table)
var/turf/T = get_turf(table)
var/obj/last_patch
for(var/i in 1 to 5)
last_patch = new /obj/item/reagent_containers/patch/styptic(T)
var/obj/chem_bag = player.spawn_obj_in_hand(/obj/item/storage/bag/chemistry)
player.click_on(last_patch)
TEST_ASSERT_EQUAL(length(chem_bag.contents), 5, "chem bag failed to pick up patches")
var/obj/chem_fridge = player.spawn_obj_nearby(/obj/machinery/smartfridge/medbay)
player.click_on(chem_fridge)
TEST_ASSERT_LAST_CHATLOG(player, "You load [chem_fridge] with [chem_bag]")
player.puppet.swap_hand()
var/obj/patch = player.spawn_obj_in_hand(/obj/item/reagent_containers/patch/styptic)
player.click_on(chem_bag)
TEST_ASSERT_LAST_CHATLOG(player, "You put [patch] into [chem_bag]")
/datum/game_test/room_test/attack_chain_rags/Run()
var/datum/test_puppeteer/player = new(src)
var/turf/simulated/floor/floor = get_turf(player.puppet)
new/obj/effect/decal/cleanable/dirt(floor)
var/obj/item/reagent_containers/glass/rag/rag = player.spawn_obj_in_hand(/obj/item/reagent_containers/glass/rag)
rag.wipespeed = 0
player.click_on(floor)
TEST_ASSERT_LAST_CHATLOG(player, "You clean the floor with the damp rag.")
var/datum/test_puppeteer/target = player.spawn_puppet_nearby()
rag.reagents.add_reagent("omnizine", 10)
player.click_on(target)
TEST_ASSERT_LAST_CHATLOG(player, "You smother [target.puppet] with [rag]")
/datum/game_test/room_test/attack_chain_hyposprays/Run()
var/datum/test_puppeteer/player = new(src)
var/obj/autoinjector = player.spawn_obj_in_hand(/obj/item/reagent_containers/hypospray/autoinjector/stimpack)
player.click_on_self()
TEST_ASSERT_ANY_CHATLOG(player, "You feel a tiny prick")
TEST_ASSERT_ANY_CHATLOG(player, "You inject [player.puppet] with [autoinjector]")
var/mob/target = player.spawn_mob_nearby(/mob/living/carbon/human)
player.put_away(autoinjector)
autoinjector = player.spawn_obj_in_hand(/obj/item/reagent_containers/hypospray/autoinjector/stimpack)
player.click_on(target)
TEST_ASSERT_ANY_CHATLOG(player, "You inject [target] with [autoinjector]")
/datum/game_test/room_test/attack_chain_droppers/Run()
var/datum/test_puppeteer/player = new(src)
var/datum/test_puppeteer/target = player.spawn_puppet_nearby()
var/obj/item/reagent_containers/dropper/dropper = player.spawn_obj_in_hand(/obj/item/reagent_containers/dropper)
dropper.mob_drip_delay = 0
var/obj/item/beaker = player.spawn_obj_nearby(/obj/item/reagent_containers/glass/beaker/waterbottle)
player.click_on(beaker)
TEST_ASSERT_LAST_CHATLOG(player, "You fill [dropper] with 1 units of the solution.")
player.click_on(target)
TEST_ASSERT_ANY_CHATLOG(player, "[player.puppet] drips something into [target.puppet]'s eyes")
TEST_ASSERT_NOT_CHATLOG(player, "You cannot directly remove reagents from [target.puppet]")
/datum/game_test/room_test/attack_chain_spray/Run()
var/datum/test_puppeteer/player = new(src)
var/obj/item/reagent_containers/spray/spray = player.spawn_obj_in_hand(/obj/item/reagent_containers/spray)
var/obj/structure/table = player.spawn_obj_nearby(/obj/structure/table)
player.click_on(table)
TEST_ASSERT(spray in get_turf(table), "spray bottle not placed on table")