fix: pass rawMana to activate() in DisciplinesTab to allow discipline reactivation after stop
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m18s

This commit is contained in:
2026-06-09 09:59:48 +02:00
parent e45c206321
commit 42053f41ac
5 changed files with 30 additions and 12 deletions
@@ -15,7 +15,7 @@ function resetDisciplineStore() {
describe('DisciplineStore — reactivate after deactivate (bug #163)', () => {
beforeEach(resetDisciplineStore);
it('BUG: should reactivate a raw discipline after deactivate (requires rawMana in gameState)', () => {
it('should reactivate a raw discipline after deactivate when rawMana is sufficient', () => {
// First activation succeeds because disciplineState is undefined (optimistic)
useDisciplineStore.getState().activate('raw-mastery');
expect(useDisciplineStore.getState().activeIds).toContain('raw-mastery');
@@ -25,16 +25,29 @@ describe('DisciplineStore — reactivate after deactivate (bug #163)', () => {
expect(useDisciplineStore.getState().activeIds).not.toContain('raw-mastery');
expect(useDisciplineStore.getState().disciplines['raw-mastery'].paused).toBe(true);
// Reactivate WITHOUT rawMana — reproduces the bug (silently fails)
useDisciplineStore.getState().activate('raw-mastery', { elements: {}, signedPacts: [] });
expect(useDisciplineStore.getState().activeIds).not.toContain('raw-mastery'); // BUG: still inactive
// Reactivate WITH rawMana — the fix
// Reactivate WITH sufficient rawMana — should succeed
useDisciplineStore.getState().activate('raw-mastery', { rawMana: 1000, elements: {}, signedPacts: [] });
expect(useDisciplineStore.getState().activeIds).toContain('raw-mastery');
expect(useDisciplineStore.getState().disciplines['raw-mastery'].paused).toBe(false);
});
it('should NOT reactivate a raw discipline when rawMana is insufficient', () => {
// Activate and build up XP
useDisciplineStore.getState().activate('raw-mastery');
useDisciplineStore.getState().processTick({ rawMana: 1000, elements: {} });
useDisciplineStore.getState().processTick({ rawMana: 1000, elements: {} });
const xp = useDisciplineStore.getState().disciplines['raw-mastery'].xp;
expect(xp).toBeGreaterThan(0);
// Deactivate
useDisciplineStore.getState().deactivate('raw-mastery');
expect(useDisciplineStore.getState().activeIds).not.toContain('raw-mastery');
// Reactivate with insufficient rawMana (0) — should fail
useDisciplineStore.getState().activate('raw-mastery', { rawMana: 0, elements: {}, signedPacts: [] });
expect(useDisciplineStore.getState().activeIds).not.toContain('raw-mastery');
});
it('should reactivate a discipline with elements after deactivating it', () => {
useDisciplineStore.getState().activate('attune-fire', {
elements: { fire: { unlocked: true, current: 100, max: 100, baseMax: 100 } },