Skip to content

Commit cbf694f

Browse files
committed
Add tests
1 parent 21b34c2 commit cbf694f

File tree

2 files changed

+1657
-1411
lines changed

2 files changed

+1657
-1411
lines changed

src/LiveComponent/assets/test/controller/loading.test.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,4 +223,51 @@ describe('LiveController data-loading Tests', () => {
223223
await (new Promise(resolve => setTimeout(resolve, 30)));
224224
expect(getByTestId(test.element, 'loading-element')).not.toBeVisible();
225225
});
226+
227+
it('does not trigger loading inside component children', async () => {
228+
const childTemplate = (data: any) => `
229+
<div ${initComponent(data, {id: 'child-id'})} data-testid="child">
230+
<span data-loading="show" data-testid="child-loading-element-showing">Loading...</span>
231+
<span data-loading="hide" data-testid="child-loading-element-hiding">Loading...</span>
232+
</div>
233+
`;
234+
235+
const test = await createTest({} , (data: any) => `
236+
<div ${initComponent(data, {id: 'parent-id'})} data-testid="parent">
237+
<span data-loading="show" data-testid="parent-loading-element-showing">Loading...</span>
238+
<span data-loading="hide" data-testid="parent-loading-element-hiding">Loading...</span>
239+
${childTemplate({})}
240+
<button data-action="live#$render">Render</button>
241+
</div>
242+
`);
243+
244+
test.expectsAjaxCall()
245+
// delay so we can check loading
246+
.delayResponse(20);
247+
248+
// All showing elements should be hidden / hiding elements should be visible
249+
await waitFor(() => expect(getByTestId(test.element, 'parent-loading-element-showing')).not.toBeVisible());
250+
await waitFor(() => expect(getByTestId(test.element, 'parent-loading-element-hiding')).toBeVisible());
251+
await waitFor(() => expect(getByTestId(test.element, 'child-loading-element-showing')).not.toBeVisible());
252+
await waitFor(() => expect(getByTestId(test.element, 'child-loading-element-hiding')).toBeVisible());
253+
254+
getByText(test.element, 'Render').click();
255+
256+
// Parent: showing elements should be visible / hiding elements should be hidden
257+
expect(getByTestId(test.element, 'parent-loading-element-showing')).toBeVisible();
258+
expect(getByTestId(test.element, 'parent-loading-element-hiding')).not.toBeVisible();
259+
// Child: no change
260+
expect(getByTestId(test.element, 'child-loading-element-showing')).not.toBeVisible();
261+
expect(getByTestId(test.element, 'child-loading-element-hiding')).toBeVisible();
262+
263+
// wait for loading to finish
264+
await (new Promise(resolve => setTimeout(resolve, 30)));
265+
266+
// Parent: back to original state
267+
expect(getByTestId(test.element, 'parent-loading-element-showing')).not.toBeVisible();
268+
expect(getByTestId(test.element, 'parent-loading-element-hiding')).toBeVisible();
269+
// Child: no change
270+
expect(getByTestId(test.element, 'child-loading-element-showing')).not.toBeVisible();
271+
expect(getByTestId(test.element, 'child-loading-element-hiding')).toBeVisible();
272+
});
226273
});

0 commit comments

Comments
 (0)