package main import ( "testing" "time" ) func TestSaveLoadStoryModeStateRoundTrip(t *testing.T) { withTempConfigDir(t) s := NewStoryModeState(StoryDifficultyHard, time.Now()) s.RecordWin(StoryResChess) s.RecordWin(StoryResChess) s.Locked[StoryResGo] = true s.Resources[StoryResGo] = StoryTargetGo if err := SaveStoryModeState(s); err != nil { t.Fatalf("неожиданная ошибка сохранения: %v", err) } loaded, err := LoadStoryModeState() if err != nil { t.Fatalf("неожиданная ошибка загрузки: %v", err) } if loaded.Difficulty != StoryDifficultyHard { t.Errorf("сложность не сохранилась корректно, получено %v", loaded.Difficulty) } if loaded.Resources[StoryResChess] != storyStartingAmount+2 { t.Errorf("ресурс шахмат не сохранился корректно, получено %d", loaded.Resources[StoryResChess]) } if !loaded.Locked[StoryResGo] { t.Errorf("запертый ресурс Го должен был остаться запертым после загрузки") } } func TestLoadStoryModeStateNoSaveReturnsErr(t *testing.T) { withTempConfigDir(t) _, err := LoadStoryModeState() if err != ErrStoryModeNoSave { t.Errorf("ожидалась ошибка ErrStoryModeNoSave при отсутствии сохранения, получено: %v", err) } } func TestDeleteStoryModeSaveRemovesFile(t *testing.T) { withTempConfigDir(t) s := NewStoryModeState(StoryDifficultyEasy, time.Now()) if err := SaveStoryModeState(s); err != nil { t.Fatalf("неожиданная ошибка сохранения: %v", err) } if err := DeleteStoryModeSave(); err != nil { t.Fatalf("неожиданная ошибка удаления: %v", err) } if _, err := LoadStoryModeState(); err != ErrStoryModeNoSave { t.Errorf("после удаления сохранения ожидалась ErrStoryModeNoSave, получено: %v", err) } } func TestDeleteStoryModeSaveWithoutExistingFileIsNotError(t *testing.T) { withTempConfigDir(t) if err := DeleteStoryModeSave(); err != nil { t.Errorf("удаление отсутствующего сохранения не должно быть ошибкой, получено: %v", err) } }