Compare commits

...

5 Commits

Author SHA1 Message Date
Phoomparin Mano
de1ef356b3 Merge branch 'master' into feat-sdk-surface-errors 2025-06-13 10:18:46 +02:00
Phoomparin Mano
7ff6aed197 Merge branch 'master' into feat-sdk-surface-errors 2025-06-12 22:00:38 +02:00
Phoomparin Mano
6da2d43280 cleanup tests 2025-06-12 20:05:09 +02:00
Phoomparin Mano
4a72170ca3 add tests for error message 2025-06-12 20:04:02 +02:00
Phoomparin Mano
04ac9728f6 surface SdkError inline 2025-06-12 19:57:10 +02:00
2 changed files with 28 additions and 3 deletions

View File

@@ -37,7 +37,7 @@ const PublicComponentWrapperInner = React.forwardRef<
// The SDK components should not load if there is a license error.
if (usageProblem?.severity === "error") {
content = null;
content = <SdkError message={usageProblem.message} />;
}
return (

View File

@@ -4,6 +4,7 @@ import {
createMockLoginStatusState,
createMockSdkState,
} from "embedding-sdk/test/mocks/state";
import type { SdkUsageProblem } from "embedding-sdk/types/usage-problem";
import type { LoginStatus } from "embedding-sdk/types/user";
import { createMockState } from "metabase-types/store/mocks";
@@ -13,11 +14,15 @@ import { PublicComponentWrapper } from "./PublicComponentWrapper";
const setup = (
status: LoginStatus = { status: "uninitialized" },
insideProvider = true,
{
insideProvider = true,
usageProblem,
}: { insideProvider?: boolean; usageProblem?: SdkUsageProblem } = {},
) => {
const state = createMockState({
sdk: createMockSdkState({
loginStatus: createMockLoginStatusState(status),
usageProblem,
}),
});
@@ -68,8 +73,28 @@ describe("PublicComponentWrapper", () => {
});
it("should not render children when rendered outside of the provider (metabase#50736)", () => {
setup({ status: "success" }, false);
setup({ status: "success" }, { insideProvider: false });
const component = screen.queryByText("My component");
expect(component).not.toBeInTheDocument();
});
it("should render error message when usageProblem contains an error", () => {
const errorMessage = "This error should be shown on the page.";
setup(
{ status: "success" },
{
usageProblem: {
type: "API_KEYS_WITHOUT_LICENSE",
title: "API Keys without License",
documentationUrl:
"https://www.metabase.com/docs/latest/embedding/sdk/introduction",
severity: "error",
message: errorMessage,
},
},
);
expect(screen.getByText(errorMessage)).toBeVisible();
});
});