Skip to content

Commit bcff32e

Browse files
committed
Address comments
1 parent ff4ce2d commit bcff32e

File tree

5 files changed

+153
-136
lines changed

5 files changed

+153
-136
lines changed

packages/compass-collection/src/components/collection-header/collection-header.spec.tsx

Lines changed: 26 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,48 @@ import { expect } from 'chai';
22
import type { ComponentProps } from 'react';
33
import React from 'react';
44
import {
5-
render,
5+
renderWithConnections,
66
screen,
77
cleanup,
88
within,
99
userEvent,
1010
} from '@mongodb-js/testing-library-compass';
11-
import { UnconnectedCollectionHeader as CollectionHeader } from './collection-header';
11+
import { Provider } from 'react-redux';
12+
import { createStore } from 'redux';
13+
import CollectionHeader from './collection-header';
1214
import {
1315
WorkspacesServiceProvider,
1416
type WorkspacesService,
1517
} from '@mongodb-js/compass-workspaces/provider';
1618
import { MockDataGeneratorStep } from '../mock-data-generator-modal/types';
19+
1720
import Sinon from 'sinon';
1821

1922
function renderCollectionHeader(
2023
props: Partial<ComponentProps<typeof CollectionHeader>> = {},
2124
workspaceService: Partial<WorkspacesService> = {}
2225
) {
23-
return render(
24-
<WorkspacesServiceProvider value={workspaceService as WorkspacesService}>
25-
<CollectionHeader
26-
isAtlas={false}
27-
isReadonly={false}
28-
isTimeSeries={false}
29-
isClustered={false}
30-
isFLE={false}
31-
namespace="test.test"
32-
isMockDataModalOpen={false}
33-
currentStep={MockDataGeneratorStep.AI_DISCLAIMER}
34-
onOpenMockDataModal={() => {}}
35-
onCloseMockDataModal={() => {}}
36-
onSetMockDataGeneratorStep={() => {}}
37-
{...props}
38-
/>
39-
</WorkspacesServiceProvider>
26+
const mockStore = createStore(() => ({
27+
mockDataGenerator: {
28+
isModalOpen: false,
29+
currentStep: MockDataGeneratorStep.AI_DISCLAIMER,
30+
},
31+
}));
32+
33+
return renderWithConnections(
34+
<Provider store={mockStore}>
35+
<WorkspacesServiceProvider value={workspaceService as WorkspacesService}>
36+
<CollectionHeader
37+
isAtlas={false}
38+
isReadonly={false}
39+
isTimeSeries={false}
40+
isClustered={false}
41+
isFLE={false}
42+
namespace="test.test"
43+
{...props}
44+
/>
45+
</WorkspacesServiceProvider>
46+
</Provider>
4047
);
4148
}
4249

@@ -287,34 +294,4 @@ describe('CollectionHeader [Component]', function () {
287294
});
288295
});
289296
});
290-
291-
context('Mock Data Generator Modal', function () {
292-
it('should close modal when cancel button is clicked', function () {
293-
const onCloseMockDataModal = Sinon.stub();
294-
295-
renderCollectionHeader({
296-
isMockDataModalOpen: true,
297-
onCloseMockDataModal,
298-
});
299-
300-
const cancelButton = screen.getByText('Cancel');
301-
userEvent.click(cancelButton);
302-
303-
expect(onCloseMockDataModal).to.have.been.calledOnce;
304-
});
305-
306-
it('should close modal when X button is clicked', function () {
307-
const onCloseMockDataModal = Sinon.stub();
308-
309-
renderCollectionHeader({
310-
isMockDataModalOpen: true,
311-
onCloseMockDataModal,
312-
});
313-
314-
const closeButton = screen.getByLabelText('Close modal');
315-
userEvent.click(closeButton);
316-
317-
expect(onCloseMockDataModal).to.have.been.calledOnce;
318-
});
319-
});
320297
});

packages/compass-collection/src/components/collection-header/collection-header.tsx

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,8 @@ import { useOpenWorkspace } from '@mongodb-js/compass-workspaces/provider';
1919
import { useConnectionInfo } from '@mongodb-js/compass-connections/provider';
2020
import { getConnectionTitle } from '@mongodb-js/connection-info';
2121
import MockDataGeneratorModal from '../mock-data-generator-modal/mock-data-generator-modal';
22-
import type { MockDataGeneratorStep } from '../mock-data-generator-modal/types';
2322
import { connect } from 'react-redux';
24-
import type { CollectionState } from '../../modules/collection-tab';
25-
import {
26-
mockDataGeneratorModalOpened,
27-
mockDataGeneratorModalClosed,
28-
mockDataGeneratorStepChanged,
29-
} from '../../modules/collection-tab';
23+
import { mockDataGeneratorModalOpened } from '../../modules/collection-tab';
3024

3125
const collectionHeaderStyles = css({
3226
padding: spacing[400],
@@ -67,11 +61,7 @@ type CollectionHeaderProps = {
6761
sourceName?: string;
6862
editViewName?: string;
6963
sourcePipeline?: unknown[];
70-
isMockDataModalOpen: boolean;
71-
currentStep: MockDataGeneratorStep;
7264
onOpenMockDataModal: () => void;
73-
onCloseMockDataModal: () => void;
74-
onSetMockDataGeneratorStep: (step: MockDataGeneratorStep) => void;
7565
};
7666

7767
const getInsightsForPipeline = (pipeline: any[], isAtlas: boolean) => {
@@ -106,11 +96,7 @@ const CollectionHeader: React.FunctionComponent<CollectionHeaderProps> = ({
10696
sourceName,
10797
editViewName,
10898
sourcePipeline,
109-
isMockDataModalOpen,
110-
currentStep,
11199
onOpenMockDataModal,
112-
onCloseMockDataModal,
113-
onSetMockDataGeneratorStep,
114100
}) => {
115101
const darkMode = useDarkMode();
116102
const showInsights = usePreference('showInsights');
@@ -190,37 +176,13 @@ const CollectionHeader: React.FunctionComponent<CollectionHeaderProps> = ({
190176
onOpenMockDataModal={onOpenMockDataModal}
191177
/>
192178
</div>
193-
<MockDataGeneratorModal
194-
isOpen={isMockDataModalOpen}
195-
onClose={onCloseMockDataModal}
196-
currentStep={currentStep}
197-
onCurrentStepChange={onSetMockDataGeneratorStep}
198-
/>
179+
<MockDataGeneratorModal />
199180
</div>
200181
);
201182
};
202183

203-
const mapStateToProps = (state: CollectionState) => ({
204-
isMockDataModalOpen: state.mockDataGenerator.isModalOpen,
205-
currentStep: state.mockDataGenerator.currentStep,
206-
});
207-
208-
type ConnectedCollectionHeaderProps = Omit<
209-
CollectionHeaderProps,
210-
| 'isMockDataModalOpen'
211-
| 'currentStep'
212-
| 'onOpenMockDataModal'
213-
| 'onCloseMockDataModal'
214-
| 'onSetMockDataGeneratorStep'
215-
>;
216-
217-
const ConnectedCollectionHeader = connect(mapStateToProps, {
184+
const ConnectedCollectionHeader = connect(undefined, {
218185
onOpenMockDataModal: mockDataGeneratorModalOpened,
219-
onCloseMockDataModal: mockDataGeneratorModalClosed,
220-
onSetMockDataGeneratorStep: mockDataGeneratorStepChanged,
221-
})(CollectionHeader) as React.ComponentType<ConnectedCollectionHeaderProps>;
186+
})(CollectionHeader);
222187

223-
export {
224-
ConnectedCollectionHeader as CollectionHeader,
225-
CollectionHeader as UnconnectedCollectionHeader, // For tests
226-
};
188+
export default ConnectedCollectionHeader;

packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { expect } from 'chai';
22
import React from 'react';
33
import { render, screen } from '@mongodb-js/testing-library-compass';
44
import Sinon from 'sinon';
5-
import MockDataGeneratorModal from './mock-data-generator-modal';
5+
import { UnconnectedMockDataGeneratorModal as MockDataGeneratorModal } from './mock-data-generator-modal';
66
import { MockDataGeneratorStep } from './types';
77
import { StepButtonLabelMap } from './constants';
88

@@ -18,25 +18,22 @@ describe('MockDataGeneratorModal', () => {
1818
sandbox.restore();
1919
});
2020

21+
const onNextStep = Sinon.stub();
22+
const onPreviousStep = Sinon.stub();
23+
2124
function renderModal({
2225
isOpen = true,
2326
currentStep = MockDataGeneratorStep.AI_DISCLAIMER,
2427
} = {}) {
25-
function MockDataGeneratorModalWrapper() {
26-
const [currentStepStateMock, onCurrentStepChangeStateMock] =
27-
React.useState<MockDataGeneratorStep>(currentStep);
28-
return (
29-
<MockDataGeneratorModal
30-
isOpen={isOpen}
31-
onClose={onClose}
32-
currentStep={currentStepStateMock}
33-
onCurrentStepChange={(step) => {
34-
onCurrentStepChangeStateMock(step);
35-
}}
36-
/>
37-
);
38-
}
39-
return render(<MockDataGeneratorModalWrapper />);
28+
return render(
29+
<MockDataGeneratorModal
30+
isOpen={isOpen}
31+
onClose={onClose}
32+
currentStep={currentStep}
33+
onNextStep={onNextStep}
34+
onPreviousStep={onPreviousStep}
35+
/>
36+
);
4037
}
4138

4239
it('renders the modal when isOpen is true', () => {

packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.tsx

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import { connect } from 'react-redux';
23

34
import {
45
css,
@@ -15,7 +16,12 @@ import {
1516
} from '@mongodb-js/compass-components';
1617
import { MockDataGeneratorStep } from './types';
1718
import { StepButtonLabelMap } from './constants';
18-
import { getNextStep, getPreviousStep } from './utils';
19+
import type { CollectionState } from '../../modules/collection-tab';
20+
import {
21+
mockDataGeneratorModalClosed,
22+
mockDataGeneratorNextButtonClicked,
23+
mockDataGeneratorPreviousButtonClicked,
24+
} from '../../modules/collection-tab';
1925

2026
const footerStyles = css`
2127
flex-direction: row;
@@ -32,25 +38,17 @@ interface Props {
3238
isOpen: boolean;
3339
onClose: () => void;
3440
currentStep: MockDataGeneratorStep;
35-
onCurrentStepChange: (step: MockDataGeneratorStep) => void;
41+
onNextStep: () => void;
42+
onPreviousStep: () => void;
3643
}
3744

3845
const MockDataGeneratorModal = ({
3946
isOpen,
4047
onClose,
4148
currentStep,
42-
onCurrentStepChange,
49+
onNextStep,
50+
onPreviousStep,
4351
}: Props) => {
44-
const onNext = () => {
45-
const nextStep = getNextStep(currentStep);
46-
onCurrentStepChange(nextStep);
47-
};
48-
49-
const onBack = () => {
50-
const previousStep = getPreviousStep(currentStep);
51-
onCurrentStepChange(previousStep);
52-
};
53-
5452
return (
5553
<Modal
5654
open={isOpen}
@@ -68,7 +66,7 @@ const MockDataGeneratorModal = ({
6866
</ModalBody>
6967
<ModalFooter className={footerStyles}>
7068
<Button
71-
onClick={onBack}
69+
onClick={onPreviousStep}
7270
disabled={currentStep === MockDataGeneratorStep.AI_DISCLAIMER}
7371
>
7472
Back
@@ -77,7 +75,7 @@ const MockDataGeneratorModal = ({
7775
<Button onClick={onClose}>Cancel</Button>
7876
<Button
7977
variant={ButtonVariant.Primary}
80-
onClick={onNext}
78+
onClick={onNextStep}
8179
data-testid="next-step-button"
8280
>
8381
{StepButtonLabelMap[currentStep]}
@@ -88,4 +86,16 @@ const MockDataGeneratorModal = ({
8886
);
8987
};
9088

91-
export default MockDataGeneratorModal;
89+
const mapStateToProps = (state: CollectionState) => ({
90+
isOpen: state.mockDataGenerator.isModalOpen,
91+
currentStep: state.mockDataGenerator.currentStep,
92+
});
93+
94+
const ConnectedMockDataGeneratorModal = connect(mapStateToProps, {
95+
onClose: mockDataGeneratorModalClosed,
96+
onNextStep: mockDataGeneratorNextButtonClicked,
97+
onPreviousStep: mockDataGeneratorPreviousButtonClicked,
98+
})(MockDataGeneratorModal);
99+
100+
export default ConnectedMockDataGeneratorModal;
101+
export { MockDataGeneratorModal as UnconnectedMockDataGeneratorModal };

0 commit comments

Comments
 (0)