import { describe, expect, it } from 'vitest'; import { gardenAudioConfig } from './garden-audio-config'; import { GardenAudioEnergy } from './garden-audio-energy'; describe('GardenAudioEnergy', () => { it('suspends activity but keeps a fading level when the gesture ends', () => { const energy = new GardenAudioEnergy(gardenAudioConfig); energy.beginGesture(0); energy.recordStroke(0.8, 0.1); energy.update(0.1); energy.update(0.2); const levelBeforeLift = energy.getLevel(); expect(energy.getActivity()).toBeGreaterThan(0); energy.endGesture(); expect(energy.getActivity()).toBe(0); expect(energy.getLevel()).toBe(levelBeforeLift); energy.update(0.3); expect(energy.getLevel()).toBeLessThan(levelBeforeLift); expect(energy.getLevel()).toBeGreaterThan(0); }); it('uses recent stroke intensity rather than gesture duration alone', () => { const energy = new GardenAudioEnergy(gardenAudioConfig); energy.beginGesture(0); energy.recordStroke(1, 0.1); energy.update(0.1); energy.update(0.2); const activeLevel = energy.getActivity(); energy.update(1.2); expect(energy.getActivity()).toBeLessThan(activeLevel); }); it('raises activity immediately when a stroke is recorded', () => { const energy = new GardenAudioEnergy(gardenAudioConfig); energy.beginGesture(0); energy.recordStroke(0.12, 0.05); expect(energy.getActivity()).toBeGreaterThan(0.09); }); });