go_games_collection/wayfarer_save_test.go

82 lines
3.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"os"
"path/filepath"
"testing"
)
func TestSaveLoadWayfarerShipRoundTrip(t *testing.T) {
withTempConfigDir(t)
s := NewWayfarerShip(wayfarerStartSystem)
s.Credits = 12345
s.RegularMissiles = 1
if err := SaveWayfarerShip(s); err != nil {
t.Fatalf("неожиданная ошибка сохранения: %v", err)
}
loaded, err := LoadWayfarerShip()
if err != nil {
t.Fatalf("неожиданная ошибка загрузки: %v", err)
}
if loaded.Credits != 12345 {
t.Errorf("кредиты не сохранились корректно, получено %v", loaded.Credits)
}
if loaded.MissileCapacity != 2 {
t.Errorf("ожидалась вместимость ракетных слотов 2, получено %d", loaded.MissileCapacity)
}
if loaded.RegularMissiles != 1 {
t.Errorf("боезапас ракет не сохранился корректно, получено %d", loaded.RegularMissiles)
}
}
// TestLoadWayfarerShipMigratesMissingMissileCapacity — регрессия:
// поле MissileCapacity появилось позже, чем базовое сохранение
// Странника. У сохранений, созданных ДО этого, поле в JSON
// отсутствует вовсе, и при десериализации остаётся нулевым — из-за
// чего "свободных ракетных слотов" не было НИКОГДА, даже если ракет
// на борту нет вовсе (0 >= 0). Загрузка должна восстанавливать
// разумное значение по умолчанию.
func TestLoadWayfarerShipMigratesMissingMissileCapacity(t *testing.T) {
withTempConfigDir(t)
oldSaveJSON := `{
"Credits": 500,
"FuelCapacity": 7,
"Fuel": 7,
"CargoCapacity": 20,
"MaxHull": 100,
"Hull": 100,
"MaxShield": 50,
"Shield": 50,
"LaserPower": 12,
"CurrentSystem": "0:0"
}`
path, err := wayfarerSavePath()
if err != nil {
t.Fatalf("неожиданная ошибка получения пути сохранения: %v", err)
}
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
t.Fatalf("не удалось создать директорию сохранения: %v", err)
}
if err := os.WriteFile(path, []byte(oldSaveJSON), 0o644); err != nil {
t.Fatalf("не удалось записать тестовое сохранение: %v", err)
}
loaded, err := LoadWayfarerShip()
if err != nil {
t.Fatalf("неожиданная ошибка загрузки старого сохранения: %v", err)
}
if loaded.MissileCapacity != 2 {
t.Errorf("ожидалась миграция вместимости ракетных слотов к значению по умолчанию (2), получено %d", loaded.MissileCapacity)
}
if loaded.RegularMissiles != 0 || loaded.HomingMissiles != 0 {
t.Errorf("в старом сохранении ракет не было — ожидались нулевые значения")
}
if loaded.MissilesLoaded() >= loaded.MissileCapacity {
t.Errorf("после миграции покупка ракеты должна была стать возможной, но MissilesLoaded()=%d >= MissileCapacity=%d",
loaded.MissilesLoaded(), loaded.MissileCapacity)
}
if err := loaded.BuyMissile(WayfarerWeaponMissileRegular, 1); err != nil {
t.Errorf("покупка ракеты после миграции должна была пройти успешно, получено: %v", err)
}
}