Skip to content

Commit ffcfe3b

Browse files
feat: improve relationship selected COMPASS-9478 (#7135)
--------- Co-authored-by: Sergey Petushkov <[email protected]>
1 parent 5a8d598 commit ffcfe3b

File tree

10 files changed

+603
-196
lines changed

10 files changed

+603
-196
lines changed

packages/compass-components/src/components/accordion.spec.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
import React from 'react';
22
import { expect } from 'chai';
33

4-
import {
5-
fireEvent,
6-
render,
7-
screen,
8-
cleanup,
9-
} from '@mongodb-js/testing-library-compass';
4+
import { userEvent, render, screen } from '@mongodb-js/testing-library-compass';
105

116
import { Accordion } from './accordion';
127

@@ -21,25 +16,36 @@ function renderAccordion(
2116
}
2217

2318
describe('Accordion Component', function () {
24-
afterEach(cleanup);
25-
2619
it('should open the accordion on click', function () {
2720
renderAccordion();
2821

2922
expect(screen.getByTestId('my-test-id')).to.exist;
3023
const button = screen.getByText('Accordion Test');
31-
fireEvent.click(button);
24+
userEvent.click(button);
25+
expect(screen.getByText('Hello World')).to.be.visible;
26+
});
27+
28+
it('should close the accordion on click - default open', function () {
29+
renderAccordion({
30+
defaultOpen: true,
31+
});
32+
33+
expect(screen.getByTestId('my-test-id')).to.exist;
34+
const button = screen.getByText('Accordion Test');
3235
expect(screen.getByText('Hello World')).to.be.visible;
36+
userEvent.click(button);
37+
38+
expect(screen.queryByText('Hello World')).not.to.exist;
3339
});
3440

3541
it('should close the accordion after clicking to open then close', function () {
3642
renderAccordion();
3743

3844
expect(screen.getByTestId('my-test-id')).to.exist;
3945
const button = screen.getByText('Accordion Test');
40-
fireEvent.click(button);
46+
userEvent.click(button);
4147
expect(screen.getByText('Hello World')).to.be.visible;
42-
fireEvent.click(button);
48+
userEvent.click(button);
4349
expect(screen.queryByText('Hello World')).to.not.exist;
4450
});
4551

packages/compass-components/src/components/accordion.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,22 @@ const buttonHintStyles = css({
5050
interface AccordionProps extends React.HTMLProps<HTMLButtonElement> {
5151
text: string | React.ReactNode;
5252
hintText?: string;
53+
textClassName?: string;
5354
open?: boolean;
55+
defaultOpen?: boolean;
5456
setOpen?: (newValue: boolean) => void;
5557
}
5658
function Accordion({
5759
text,
5860
hintText,
61+
textClassName,
5962
open: _open,
6063
setOpen: _setOpen,
64+
defaultOpen = false,
6165
...props
6266
}: React.PropsWithChildren<AccordionProps>): React.ReactElement {
6367
const darkMode = useDarkMode();
64-
const [localOpen, setLocalOpen] = useState(_open ?? false);
68+
const [localOpen, setLocalOpen] = useState(_open ?? defaultOpen);
6569
const setOpenRef = useRef(_setOpen);
6670
setOpenRef.current = _setOpen;
6771
const onOpenChange = useCallback(() => {
@@ -80,7 +84,8 @@ function Accordion({
8084
{...props}
8185
className={cx(
8286
darkMode ? buttonDarkThemeStyles : buttonLightThemeStyles,
83-
buttonStyles
87+
buttonStyles,
88+
textClassName
8489
)}
8590
id={labelId}
8691
type="button"

packages/compass-data-modeling/src/components/diagram-editor-side-panel.spec.tsx

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import {
1717
selectRelationship,
1818
} from '../store/diagram';
1919
import dataModel from '../../test/fixtures/data-model-with-relationships.json';
20-
import type { MongoDBDataModelDescription } from '../services/data-model-storage';
20+
import type {
21+
MongoDBDataModelDescription,
22+
Relationship,
23+
} from '../services/data-model-storage';
2124

2225
async function comboboxSelectItem(
2326
label: string,
@@ -67,7 +70,37 @@ describe('DiagramEditorSidePanel', function () {
6770
result.plugin.store.dispatch(
6871
selectRelationship('204b1fc0-601f-4d62-bba3-38fade71e049')
6972
);
70-
expect(screen.getByText('Edit Relationship')).to.be.visible;
73+
74+
const name = screen.getByLabelText('Name');
75+
expect(name).to.be.visible;
76+
expect(name).to.have.value('Airport Country');
77+
78+
const localCollectionInput = screen.getByLabelText('Local collection');
79+
expect(localCollectionInput).to.be.visible;
80+
expect(localCollectionInput).to.have.value('countries');
81+
82+
const foreignCollectionInput = screen.getByLabelText('Foreign collection');
83+
expect(foreignCollectionInput).to.be.visible;
84+
expect(foreignCollectionInput).to.have.value('airports');
85+
86+
const localFieldInput = screen.getByLabelText('Local field');
87+
expect(localFieldInput).to.be.visible;
88+
expect(localFieldInput).to.have.value('name');
89+
90+
const foreignFieldInput = screen.getByLabelText('Foreign field');
91+
expect(foreignFieldInput).to.be.visible;
92+
expect(foreignFieldInput).to.have.value('Country');
93+
94+
const localCardinalityInput = screen.getByLabelText('Local cardinality');
95+
expect(localCardinalityInput).to.be.visible;
96+
expect(localCardinalityInput).to.have.value('1');
97+
98+
const foreignCardinalityInput = screen.getByLabelText(
99+
'Foreign cardinality'
100+
);
101+
expect(foreignCardinalityInput).to.be.visible;
102+
expect(foreignCardinalityInput).to.have.value('100');
103+
71104
expect(
72105
document.querySelector(
73106
'[data-relationship-id="204b1fc0-601f-4d62-bba3-38fade71e049"]'
@@ -120,7 +153,7 @@ describe('DiagramEditorSidePanel', function () {
120153
userEvent.click(
121154
within(relationshipCard!).getByRole('button', { name: 'Edit' })
122155
);
123-
expect(screen.getByText('Edit Relationship')).to.be.visible;
156+
expect(screen.getByLabelText('Local field')).to.be.visible;
124157

125158
// Select new values
126159
await comboboxSelectItem('Local collection', 'planes');
@@ -133,7 +166,7 @@ describe('DiagramEditorSidePanel', function () {
133166
// model here
134167
const modifiedRelationship = selectCurrentModel(
135168
getCurrentDiagramFromState(result.plugin.store.getState()).edits
136-
).relationships.find((r) => {
169+
).relationships.find((r: Relationship) => {
137170
return r.id === '204b1fc0-601f-4d62-bba3-38fade71e049';
138171
});
139172

@@ -148,7 +181,7 @@ describe('DiagramEditorSidePanel', function () {
148181
{
149182
ns: 'flights.countries',
150183
fields: ['iso_code'],
151-
cardinality: 1,
184+
cardinality: 100,
152185
},
153186
]);
154187
});

0 commit comments

Comments
 (0)