expect(actualMount).toHaveBeenCalled();
});
+ it('should handle the "finished" phase correctly when the story finishes successfully', async () => {
+ // Arrange - setup StoryRender and async gate blocking finished phase
+ const [finishGate, resolveFinishGate] = createGate();
+ const story = buildStory({
+ playFunction: vi.fn(async () => {
+ await finishGate;
+ }),
+ });
+ const store = buildStore();
+
+ const channel = new Channel({});
+ const emitSpy = vi.spyOn(channel, 'emit');
+
+ const render = new StoryRender(
+ channel,
+ store,
+ vi.fn() as any,
+ {} as any,
+ entry.id,
+ 'story',
+ { autoplay: true },
+ story
+ );
+
+ // Act - render, resolve finish gate, teardown
+ render.renderToElement({} as any);
+ await tick(); // go from 'loading' to 'rendering' phase
+ resolveFinishGate();
+ await tick(); // go from 'rendering' to 'finished' phase
+ render.teardown();
+
+ // Assert - ensure finished phase is handled correctly
+ expect(render.phase).toBe('finished');
+ expect(emitSpy).toHaveBeenCalledWith(STORY_FINISHED, {
+ reporters: [],
+ status: 'success',
+ storyId: 'id',
+ });