feat(engine): track manualCompletionCounts on action complete

This commit is contained in:
ginnoir
2026-06-12 00:19:24 -05:00
parent f7ad9e7ecd
commit d625216018
6 changed files with 97 additions and 1 deletions
+43
View File
@@ -79,6 +79,22 @@ describe('createSave()', () => {
state.enabledLoopActionIds.rest = false;
expect(save.state.enabledLoopActionIds).toEqual({ rest: true });
});
it('snapshots manualCompletionCounts and automationQueue in the save payload', () => {
const state = sampleState() as ReturnType<typeof sampleState> & {
manualCompletionCounts: Record<string, number>;
automationQueue: string[];
};
state.manualCompletionCounts = { forage: 2 };
state.automationQueue = ['forage'];
const save = createSave(state, 1700);
expect(save.state.manualCompletionCounts).toEqual({ forage: 2 });
expect(save.state.automationQueue).toEqual(['forage']);
state.manualCompletionCounts.forage = 3;
state.automationQueue.push('forage');
expect(save.state.manualCompletionCounts).toEqual({ forage: 2 });
expect(save.state.automationQueue).toEqual(['forage']);
});
});
describe('serialize / deserialize round-trip', () => {
@@ -101,6 +117,18 @@ describe('serialize / deserialize round-trip', () => {
expect(restored.state.enabledLoopActionIds).toEqual({ rest: true, patrol: false });
});
it('preserves manualCompletionCounts and automationQueue through a round-trip', () => {
const state = sampleState() as ReturnType<typeof sampleState> & {
manualCompletionCounts: Record<string, number>;
automationQueue: string[];
};
state.manualCompletionCounts = { forage: 4 };
state.automationQueue = ['forage'];
const restored = deserializeSave(serializeSave(createSave(state, 1700)));
expect(restored.state.manualCompletionCounts).toEqual({ forage: 4 });
expect(restored.state.automationQueue).toEqual(['forage']);
});
it('defaults enabledLoopActionIds to {} when absent from save JSON', () => {
const json = JSON.stringify({
version: 1,
@@ -114,6 +142,21 @@ describe('serialize / deserialize round-trip', () => {
const restored = deserializeSave(json);
expect(restored.state.enabledLoopActionIds).toEqual({});
});
it('defaults manualCompletionCounts and automationQueue when absent from save JSON', () => {
const json = JSON.stringify({
version: 1,
savedAt: 1700,
state: {
resources: { gold: 0 },
activeActionId: null,
actionElapsedMs: 0,
},
});
const restored = deserializeSave(json);
expect(restored.state.manualCompletionCounts).toEqual({});
expect(restored.state.automationQueue).toEqual([]);
});
});
describe('invalid / tampered saves', () => {