Skip to content

Commit

Permalink
🪟 🔧 Don't request destination/source definition in `<ConnectionInfoCa…
Browse files Browse the repository at this point in the history
…rd />` directly, use `useConnectionFormService()` instead (#21869)

* don't request destination definition in ConnectionInfoCard directly, use useConnectionFormService instead

* add source mock: SourceDefinition and SourceDefinitionSpecification

* update and fix tests

* fix pr comment: use reference the source and destination icons off of the top-level source and destination objects instead of the definitions
  • Loading branch information
dizel852 committed Feb 1, 2023
1 parent 39a8d1e commit 22fc241
Show file tree
Hide file tree
Showing 8 changed files with 502 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { render } from "@testing-library/react";
import { mockDestinationDefinitionSpecification } from "test-utils/mock-data/mockDestinationDefinitionSpecification";
import { mockSourceDefinition } from "test-utils/mock-data/mockSourceDefinition";
import { mockDestinationDefinition } from "test-utils/mock-data/mockDestination";
import { mockSourceDefinition } from "test-utils/mock-data/mockSource";
import { mockConnection, TestWrapper } from "test-utils/testutils";

import { ConnectionStatus, SchemaChange } from "core/request/AirbyteClient";
Expand All @@ -15,12 +15,11 @@ jest.doMock("hooks/services/ConnectionEdit/ConnectionEditService", () => ({
useConnectionEditService: mockUseConnectionEditService,
}));

jest.doMock("services/connector/SourceDefinitionService", () => ({
useSourceDefinition: () => mockSourceDefinition,
}));

jest.doMock("services/connector/DestinationDefinitionService", () => ({
useDestinationDefinition: () => mockDestinationDefinitionSpecification,
jest.doMock("hooks/services/ConnectionForm/ConnectionFormService.tsx", () => ({
useConnectionFormService: () => ({
sourceDefinition: mockSourceDefinition,
destDefinition: mockDestinationDefinition,
}),
}));

jest.doMock("components/connection/ConnectionForm/refreshSourceSchemaWithConfirmationOnDirty", () => ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@ import { ConnectorCard } from "components";
import { ConnectionStatus } from "core/request/AirbyteClient";
import { useSchemaChanges } from "hooks/connection/useSchemaChanges";
import { useConnectionEditService } from "hooks/services/ConnectionEdit/ConnectionEditService";
import { useConnectionFormService } from "hooks/services/ConnectionForm/ConnectionFormService";
import { FeatureItem, useFeature } from "hooks/services/Feature";
import { RoutePaths } from "pages/routePaths";
import { useDestinationDefinition } from "services/connector/DestinationDefinitionService";
import { useSourceDefinition } from "services/connector/SourceDefinitionService";

import styles from "./ConnectionInfoCard.module.scss";
import { EnabledControl } from "./EnabledControl";
Expand All @@ -24,8 +23,7 @@ export const ConnectionInfoCard: React.FC = () => {
schemaHasBeenRefreshed,
} = useConnectionEditService();
const { hasSchemaChanges, hasBreakingSchemaChange, hasNonBreakingSchemaChange } = useSchemaChanges(schemaChange);
const sourceDefinition = useSourceDefinition(source.sourceDefinitionId);
const destinationDefinition = useDestinationDefinition(destination.destinationDefinitionId);
const { sourceDefinition, destDefinition } = useConnectionFormService();

const hasAllowSyncFeature = useFeature(FeatureItem.AllowSync);

Expand All @@ -52,7 +50,7 @@ export const ConnectionInfoCard: React.FC = () => {
>
<ConnectorCard
connectionName={source.sourceName}
icon={sourceDefinition?.icon}
icon={source?.icon}
connectorName={source.name}
releaseStage={sourceDefinition?.releaseStage}
/>
Expand All @@ -65,9 +63,9 @@ export const ConnectionInfoCard: React.FC = () => {
>
<ConnectorCard
connectionName={destination.destinationName}
icon={destinationDefinition?.icon}
icon={destination?.icon}
connectorName={destination.name}
releaseStage={destinationDefinition?.releaseStage}
releaseStage={destDefinition?.releaseStage}
/>
</Link>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,22 @@ import {
mockDestinationDefinition,
mockDestinationDefinitionSpecification,
} from "test-utils/mock-data/mockDestination";
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
import { TestWrapper } from "test-utils/testutils";

import { defaultOssFeatures, FeatureItem } from "hooks/services/Feature";
import * as sourceHook from "hooks/services/useSourceHook";

import { CreateConnectionForm } from "./CreateConnectionForm";

jest.mock("services/connector/SourceDefinitionService", () => ({
useSourceDefinition: () => mockSourceDefinition,
}));

jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
}));

jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
mockDestinationDefinition,
mockDestinationDefinitionSpecification,
} from "test-utils/mock-data/mockDestination";
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
import { mockWorkspace } from "test-utils/mock-data/mockWorkspace";
import { TestWrapper } from "test-utils/testutils";

Expand All @@ -14,6 +15,14 @@ import { WebBackendConnectionRead, WebBackendConnectionUpdate } from "core/reque
import { ConnectionEditServiceProvider, useConnectionEditService } from "./ConnectionEditService";
import { useConnectionFormService } from "../ConnectionForm/ConnectionFormService";

jest.mock("services/connector/SourceDefinitionService", () => ({
useSourceDefinition: () => mockSourceDefinition,
}));

jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
}));

jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
mockDestinationDefinition,
mockDestinationDefinitionSpecification,
} from "test-utils/mock-data/mockDestination";
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
import { mockWorkspace } from "test-utils/mock-data/mockWorkspace";
import { TestWrapper } from "test-utils/testutils";

Expand All @@ -16,6 +17,14 @@ import {
useConnectionFormService,
} from "./ConnectionFormService";

jest.mock("services/connector/SourceDefinitionService", () => ({
useSourceDefinition: () => mockSourceDefinition,
}));

jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
}));

jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@ import {
DestinationDefinitionRead,
DestinationDefinitionSpecificationRead,
OperationRead,
SourceDefinitionRead,
SourceDefinitionSpecificationRead,
WebBackendConnectionRead,
} from "core/request/AirbyteClient";
import { useNewTableDesignExperiment } from "hooks/connection/useNewTableDesignExperiment";
import { useDestinationDefinition } from "services/connector/DestinationDefinitionService";
import { useGetDestinationDefinitionSpecification } from "services/connector/DestinationDefinitionSpecificationService";
import { useSourceDefinition } from "services/connector/SourceDefinitionService";
import { useGetSourceDefinitionSpecification } from "services/connector/SourceDefinitionSpecificationService";
import { FormError, generateMessageFromError } from "utils/errorStatusMessage";

import { useUniqueFormId } from "../FormChangeTracker";
Expand Down Expand Up @@ -61,6 +65,8 @@ export const tidyConnectionFormValues = (
interface ConnectionFormHook {
connection: ConnectionOrPartialConnection;
mode: ConnectionFormMode;
sourceDefinition: SourceDefinitionRead;
sourceDefinitionSpecification: SourceDefinitionSpecificationRead;
destDefinition: DestinationDefinitionRead;
destDefinitionSpecification: DestinationDefinitionSpecificationRead;
initialValues: FormikConnectionFormValues;
Expand All @@ -77,10 +83,16 @@ const useConnectionForm = ({
schemaError,
refreshSchema,
}: ConnectionServiceProps): ConnectionFormHook => {
const destDefinition = useDestinationDefinition(connection.destination.destinationDefinitionId);
const destDefinitionSpecification = useGetDestinationDefinitionSpecification(
connection.destination.destinationDefinitionId
);
const {
source: { sourceDefinitionId },
destination: { destinationDefinitionId },
} = connection;

const sourceDefinition = useSourceDefinition(sourceDefinitionId);
const sourceDefinitionSpecification = useGetSourceDefinitionSpecification(sourceDefinitionId);
const destDefinition = useDestinationDefinition(destinationDefinitionId);
const destDefinitionSpecification = useGetDestinationDefinitionSpecification(destinationDefinitionId);

const initialValues = useInitialValues(connection, destDefinition, destDefinitionSpecification, mode !== "create");
const { formatMessage } = useIntl();
const [submitError, setSubmitError] = useState<FormError | null>(null);
Expand Down Expand Up @@ -109,6 +121,8 @@ const useConnectionForm = ({
return {
connection,
mode,
sourceDefinition,
sourceDefinitionSpecification,
destDefinition,
destDefinitionSpecification,
initialValues,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
mockDestinationDefinition,
mockDestinationDefinitionSpecification,
} from "test-utils/mock-data/mockDestination";
import { mockSourceDefinition, mockSourceDefinitionSpecification } from "test-utils/mock-data/mockSource";
import { mockWorkspace } from "test-utils/mock-data/mockWorkspace";
import { mockWorkspaceId } from "test-utils/mock-data/mockWorkspaceId";
import { TestWrapper } from "test-utils/testutils";
Expand All @@ -21,6 +22,14 @@ import * as connectionHook from "hooks/services/useConnectionHook";

import { ConnectionReplicationPage } from "./ConnectionReplicationPage";

jest.mock("services/connector/SourceDefinitionService", () => ({
useSourceDefinition: () => mockSourceDefinition,
}));

jest.mock("services/connector/SourceDefinitionSpecificationService", () => ({
useGetSourceDefinitionSpecification: () => mockSourceDefinitionSpecification,
}));

jest.mock("services/connector/DestinationDefinitionSpecificationService", () => ({
useGetDestinationDefinitionSpecification: () => mockDestinationDefinitionSpecification,
}));
Expand Down

0 comments on commit 22fc241

Please sign in to comment.