mirror of
https://github.com/apache/superset.git
synced 2026-07-08 15:55:33 +00:00
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Evan <evan@preset.io>
101 lines
3.3 KiB
TypeScript
101 lines
3.3 KiB
TypeScript
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
import { render, screen, userEvent } from 'spec/helpers/testing-library';
|
|
import fetchMock from 'fetch-mock';
|
|
import URLShortLinkButton from 'src/dashboard/components/URLShortLinkButton';
|
|
import ToastContainer from 'src/components/MessageToasts/ToastContainer';
|
|
|
|
const DASHBOARD_ID = 10;
|
|
const PERMALINK_PAYLOAD = {
|
|
key: '123',
|
|
url: 'http://fakeurl.com/123',
|
|
};
|
|
// rewritePermalinkOrigin substitutes window.location.origin (jsdom: http://localhost)
|
|
// for the permalink's origin while preserving the path. See urlUtils.ts.
|
|
const REWRITTEN_URL = `${window.location.origin}/123`;
|
|
const FILTER_STATE_PAYLOAD = {
|
|
value: '{}',
|
|
};
|
|
|
|
const props = {
|
|
dashboardId: DASHBOARD_ID,
|
|
};
|
|
|
|
fetchMock.get(
|
|
`glob:*/api/v1/dashboard/${DASHBOARD_ID}/filter_state*`,
|
|
FILTER_STATE_PAYLOAD,
|
|
);
|
|
|
|
const postDashboardPermanentlinkMockUrl = `glob:*/api/v1/dashboard/${DASHBOARD_ID}/permalink`;
|
|
fetchMock.post(postDashboardPermanentlinkMockUrl, PERMALINK_PAYLOAD, {
|
|
name: postDashboardPermanentlinkMockUrl,
|
|
});
|
|
|
|
test('renders with default props', () => {
|
|
render(<URLShortLinkButton {...props} />, { useRedux: true });
|
|
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
});
|
|
|
|
test('renders overlay on click', async () => {
|
|
render(<URLShortLinkButton {...props} />, { useRedux: true });
|
|
userEvent.click(screen.getByRole('button'));
|
|
expect(await screen.findByRole('tooltip')).toBeInTheDocument();
|
|
});
|
|
|
|
test('obtains short url', async () => {
|
|
render(<URLShortLinkButton {...props} />, { useRedux: true });
|
|
userEvent.click(screen.getByRole('button'));
|
|
expect(await screen.findByRole('tooltip')).toHaveTextContent(REWRITTEN_URL);
|
|
});
|
|
|
|
test('creates email anchor', async () => {
|
|
const subject = 'Subject';
|
|
const content = 'Content';
|
|
|
|
render(
|
|
<URLShortLinkButton
|
|
{...props}
|
|
emailSubject={subject}
|
|
emailContent={content}
|
|
/>,
|
|
{
|
|
useRedux: true,
|
|
},
|
|
);
|
|
|
|
const href = `mailto:?Subject=${subject}%20&Body=${content}${REWRITTEN_URL}`;
|
|
userEvent.click(screen.getByRole('button'));
|
|
expect(await screen.findByRole('link')).toHaveAttribute('href', href);
|
|
});
|
|
|
|
test('renders error message on short url error', async () => {
|
|
fetchMock.removeRoute(postDashboardPermanentlinkMockUrl);
|
|
fetchMock.route(`glob:*/api/v1/dashboard/${DASHBOARD_ID}/permalink`, 500);
|
|
|
|
render(
|
|
<>
|
|
<URLShortLinkButton {...props} />
|
|
<ToastContainer />
|
|
</>,
|
|
{ useRedux: true },
|
|
);
|
|
userEvent.click(screen.getByRole('button'));
|
|
expect(await screen.findByRole('alert')).toBeInTheDocument();
|
|
});
|