|
3 | 3 | import React from 'react'; |
4 | 4 | import { act, cleanup, render, waitFor } from '@testing-library/react'; |
5 | 5 |
|
| 6 | +import { setGlobalFlag } from '@cloudscape-design/component-toolkit/internal/testing'; |
| 7 | + |
6 | 8 | import AppLayout from '../../../lib/components/app-layout'; |
7 | 9 | import BreadcrumbGroup, { BreadcrumbGroupProps } from '../../../lib/components/breadcrumb-group'; |
8 | 10 | import { getFunnelNameSelector } from '../../../lib/components/internal/analytics/selectors'; |
@@ -363,4 +365,33 @@ describeEachAppLayout({ themes: ['refresh-toolbar'], sizes: ['desktop'] }, () => |
363 | 365 |
|
364 | 366 | second.unregister(); |
365 | 367 | }); |
| 368 | + |
| 369 | + describe('with appLayoutHideToolbarBreadcrumbs flag', () => { |
| 370 | + const flagName = 'appLayoutHideToolbarBreadcrumbs'; |
| 371 | + |
| 372 | + beforeEach(() => setGlobalFlag(flagName, true)); |
| 373 | + afterEach(() => setGlobalFlag(flagName, undefined)); |
| 374 | + |
| 375 | + test('marks breadcrumbs as externally owned on first render without a consumer', () => { |
| 376 | + render(<AppLayout breadcrumbs={<BreadcrumbGroup items={defaultItems} />} />); |
| 377 | + expectAppLayoutBreadcrumbsToBeExternallyOwned(); |
| 378 | + expect(getAppLayoutBreadcrumbGroup()).toBeTruthy(); |
| 379 | + }); |
| 380 | + |
| 381 | + test('keeps breadcrumbs externally owned after the consumer unregisters', async () => { |
| 382 | + const externalContainer = document.createElement('div'); |
| 383 | + const { registration } = registerExternalContainer(externalContainer); |
| 384 | + render(<AppLayout breadcrumbs={<BreadcrumbGroup items={defaultItems} />} />); |
| 385 | + |
| 386 | + await waitFor(() => expect(externalContainer).toHaveTextContent('Home / Resource')); |
| 387 | + act(() => registration.unregister()); |
| 388 | + expectAppLayoutBreadcrumbsToBeExternallyOwned(); |
| 389 | + }); |
| 390 | + }); |
| 391 | + |
| 392 | + test('does not mark breadcrumbs as externally owned without the flag or a consumer', () => { |
| 393 | + render(<AppLayout breadcrumbs={<BreadcrumbGroup items={defaultItems} />} />); |
| 394 | + const breadcrumbsSection = getAppLayoutBreadcrumbsSection()?.getElement(); |
| 395 | + expect(breadcrumbsSection).not.toHaveAttribute('data-awsui-external-breadcrumbs'); |
| 396 | + }); |
366 | 397 | }); |
0 commit comments