netfishing/tests/inventory_storage_persistence_validation.gd

83 lines
2.8 KiB
GDScript

extends SceneTree
const MainScene: PackedScene = preload("res://main/main.tscn")
const ItemCatalogResource: ItemCatalog = preload(
"res://items/catalog/item_catalog.tres"
)
func _initialize() -> void:
call_deferred("_run")
func _run() -> void:
root.size = Vector2i(1280, 720)
var main: Node = MainScene.instantiate()
root.add_child(main)
for _frame: int in 4:
await process_frame
if not bool(main.get("_application_initialized")):
main.call("_activate_selected_data_path", "", true)
for _frame: int in 8:
await process_frame
assert(bool(main.get("_application_initialized")))
var save_manager := main.get("_save_manager") as PlayerSaveManager
var player := main.get("_player") as Player
assert(save_manager != null and player != null)
const TEST_WORLD_SEED := 918273
assert(save_manager.initialize_new_game(
TEST_WORLD_SEED,
WorldLayout.STARTER_ISLAND,
))
save_manager.set_autosave_enabled(true)
assert(player.bag.add_item(&"art_kit"))
assert(player.bag.add_item(&"coffee"))
assert(player.bag.add_item(&"worms"))
assert(player.bag.add_item(&"the_standby"))
assert(player.equip_bait(ItemCatalogResource.get_item_by_id(&"worms")))
assert(player.equip_lure(ItemCatalogResource.get_item_by_id(&"the_standby")))
assert(player.bag.move_item_to_storage_slot(&"basic_fishing_rod", 14))
assert(player.bag.move_item_to_storage_slot(&"coffee", 12))
assert(save_manager.save_now())
var decoded: Dictionary = ProgressionSaveCodec.read_local_save(
str(save_manager.get("_save_path"))
)
assert(bool(decoded.get("ok", false)))
var parsed: Dictionary = decoded["data"]
var records: Array = parsed["bag"]["items"]
assert(str(parsed["world"]["layout"]) == String(WorldLayout.STARTER_ISLAND))
assert(int(parsed["world"]["seed"]) == TEST_WORLD_SEED)
assert(_saved_slot(records, &"basic_fishing_rod") == 14)
assert(_saved_slot(records, &"coffee") == 12)
assert(player.bag.move_item_to_storage_slot(&"basic_fishing_rod", 0))
assert(player.bag.move_item_to_storage_slot(&"coffee", 0))
player.unequip_bait()
player.unequip_lure()
assert(save_manager.load_player_data())
assert(save_manager.get_world_layout() == WorldLayout.STARTER_ISLAND)
assert(save_manager.get_world_seed() == TEST_WORLD_SEED)
assert(player.bag.get_storage_slot(&"basic_fishing_rod") == 14)
assert(player.bag.get_storage_slot(&"coffee") == 12)
assert(player.active_bait_id == &"worms")
assert(player.active_lure_id == &"the_standby")
main.queue_free()
for _frame: int in 4:
await process_frame
await create_timer(0.1).timeout
print("Inventory storage persistence validation: PASS")
quit()
func _saved_slot(records: Array, item_id: StringName) -> int:
for value: Variant in records:
if (
typeof(value) == TYPE_DICTIONARY
and str((value as Dictionary).get("item_id", ""))
== String(item_id)
):
return int((value as Dictionary).get("storage_slot", -1))
return -1