@capillarytech/creatives-library 8.0.242-alpha.0 → 8.0.242-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +2 -1
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/sagas/__tests__/assetPolling.test.js +74 -3
- package/sagas/assetPolling.js +8 -1
- package/services/api.js +10 -5
- package/services/tests/api.test.js +18 -0
- package/translations/en.json +0 -1
- package/utils/common.js +5 -0
- package/utils/commonUtils.js +14 -1
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/transformTemplateConfig.js +0 -10
- package/utils/transformerUtils.js +0 -42
- package/v2Components/CapDeviceContent/index.js +61 -56
- package/v2Components/CapImageUpload/constants.js +0 -2
- package/v2Components/CapImageUpload/index.js +14 -54
- package/v2Components/CapImageUpload/index.scss +1 -4
- package/v2Components/CapImageUpload/messages.js +0 -4
- package/v2Components/CapTagList/index.js +6 -1
- package/v2Components/CapTagListWithInput/index.js +5 -1
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
- package/v2Components/ErrorInfoNote/index.js +412 -72
- package/v2Components/ErrorInfoNote/messages.js +22 -0
- package/v2Components/ErrorInfoNote/style.scss +279 -2
- package/v2Components/HtmlEditor/HTMLEditor.js +217 -90
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1132 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +17 -12
- package/v2Components/HtmlEditor/_htmlEditor.scss +15 -23
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +13 -101
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -139
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -0
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +1 -0
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +10 -11
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +87 -62
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +362 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +29 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +95 -85
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +99 -101
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +34 -41
- package/v2Components/MobilePushPreviewV2/index.js +32 -7
- package/v2Components/TemplatePreview/_templatePreview.scss +44 -24
- package/v2Components/TemplatePreview/index.js +47 -32
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/index.js +31 -25
- package/v2Containers/App/constants.js +0 -5
- package/v2Containers/BeeEditor/index.js +82 -80
- package/v2Containers/BeePopupEditor/constants.js +10 -0
- package/v2Containers/BeePopupEditor/index.js +193 -0
- package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +0 -1
- package/v2Containers/CreativesContainer/SlideBoxContent.js +148 -120
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +9 -3
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +1 -2
- package/v2Containers/CreativesContainer/index.js +173 -193
- package/v2Containers/CreativesContainer/messages.js +4 -4
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +36 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +13 -0
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +41 -6
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1046 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +193 -7
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +436 -67
- package/v2Containers/EmailWrapper/index.js +99 -23
- package/v2Containers/EmailWrapper/messages.js +61 -1
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +26 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +111 -77
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
- package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
- package/v2Containers/InApp/actions.js +7 -0
- package/v2Containers/InApp/constants.js +20 -4
- package/v2Containers/InApp/index.js +800 -357
- package/v2Containers/InApp/index.scss +4 -3
- package/v2Containers/InApp/messages.js +7 -3
- package/v2Containers/InApp/reducer.js +21 -3
- package/v2Containers/InApp/sagas.js +29 -9
- package/v2Containers/InApp/selectors.js +25 -5
- package/v2Containers/InApp/tests/index.test.js +154 -50
- package/v2Containers/InApp/tests/reducer.test.js +34 -0
- package/v2Containers/InApp/tests/sagas.test.js +61 -9
- package/v2Containers/InApp/tests/selectors.test.js +612 -0
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +162 -0
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +9 -0
- package/v2Containers/InAppWrapper/constants.js +16 -0
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
- package/v2Containers/InAppWrapper/index.js +148 -0
- package/v2Containers/InAppWrapper/messages.js +49 -0
- package/v2Containers/InappAdvance/index.js +1099 -0
- package/v2Containers/InappAdvance/index.scss +10 -0
- package/v2Containers/InappAdvance/tests/index.test.js +448 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -25
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -18
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -46
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -8
- package/v2Containers/TagList/index.js +67 -1
- package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
- package/v2Containers/Templates/_templates.scss +56 -200
- package/v2Containers/Templates/actions.js +1 -2
- package/v2Containers/Templates/constants.js +0 -1
- package/v2Containers/Templates/index.js +124 -277
- package/v2Containers/Templates/messages.js +4 -24
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/Templates/tests/index.test.js +0 -10
- package/v2Containers/TemplatesV2/index.js +2 -3
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -132
- package/v2Components/CapImageUrlUpload/constants.js +0 -19
- package/v2Components/CapImageUrlUpload/index.js +0 -455
- package/v2Components/CapImageUrlUpload/index.scss +0 -35
- package/v2Components/CapImageUrlUpload/messages.js +0 -47
- package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -175
- package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
- package/v2Containers/WebPush/Create/components/ButtonList.js +0 -144
- package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -80
- package/v2Containers/WebPush/Create/index.js +0 -1755
- package/v2Containers/WebPush/Create/index.scss +0 -123
- package/v2Containers/WebPush/Create/messages.js +0 -199
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -241
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -290
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -81
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -240
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -144
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
- package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -44
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -110
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -72
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -55
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -70
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -512
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -77
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -527
- package/v2Containers/WebPush/Create/preview/constants.js +0 -162
- package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -104
- package/v2Containers/WebPush/Create/preview/preview.scss +0 -409
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -300
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -303
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -188
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -106
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -75
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -174
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1077
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -943
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -128
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -121
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -127
- package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -116
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
- package/v2Containers/WebPush/actions.js +0 -60
- package/v2Containers/WebPush/constants.js +0 -108
- package/v2Containers/WebPush/index.js +0 -2
- package/v2Containers/WebPush/reducer.js +0 -104
- package/v2Containers/WebPush/sagas.js +0 -119
- package/v2Containers/WebPush/selectors.js +0 -65
- package/v2Containers/WebPush/tests/reducer.test.js +0 -863
- package/v2Containers/WebPush/tests/sagas.test.js +0 -566
- package/v2Containers/WebPush/tests/selectors.test.js +0 -960
|
@@ -1,633 +0,0 @@
|
|
|
1
|
-
import React, { act } from 'react';
|
|
2
|
-
import { mountWithIntl, shallowWithIntl } from '../../../../../helpers/intl-enzym-test-helpers';
|
|
3
|
-
import CapButton from '@capillarytech/cap-ui-library/CapButton';
|
|
4
|
-
import ButtonList from '../ButtonList';
|
|
5
|
-
import ButtonItem from '../ButtonItem';
|
|
6
|
-
import messages from '../../messages';
|
|
7
|
-
|
|
8
|
-
// Mock ButtonItem component
|
|
9
|
-
jest.mock('../ButtonItem', () => {
|
|
10
|
-
return function MockButtonItem({
|
|
11
|
-
button,
|
|
12
|
-
index,
|
|
13
|
-
onEdit,
|
|
14
|
-
onDelete,
|
|
15
|
-
onDragStart,
|
|
16
|
-
onDragOver,
|
|
17
|
-
onDrop,
|
|
18
|
-
onDragEnd,
|
|
19
|
-
disabled,
|
|
20
|
-
}) {
|
|
21
|
-
return (
|
|
22
|
-
<div
|
|
23
|
-
className="mock-button-item"
|
|
24
|
-
data-testid={`button-item-${index}`}
|
|
25
|
-
data-disabled={disabled}
|
|
26
|
-
draggable={!disabled}
|
|
27
|
-
onDragStart={(e) => {
|
|
28
|
-
if (!disabled) {
|
|
29
|
-
e.dataTransfer = { effectAllowed: 'move', setData: jest.fn() };
|
|
30
|
-
onDragStart(index);
|
|
31
|
-
}
|
|
32
|
-
}}
|
|
33
|
-
onDragOver={(e) => {
|
|
34
|
-
if (!disabled) {
|
|
35
|
-
e.preventDefault();
|
|
36
|
-
e.dataTransfer = { dropEffect: 'move' };
|
|
37
|
-
onDragOver(index);
|
|
38
|
-
}
|
|
39
|
-
}}
|
|
40
|
-
onDrop={(e) => {
|
|
41
|
-
if (!disabled) {
|
|
42
|
-
e.preventDefault();
|
|
43
|
-
onDrop(index);
|
|
44
|
-
}
|
|
45
|
-
}}
|
|
46
|
-
onDragEnd={() => {
|
|
47
|
-
if (!disabled) {
|
|
48
|
-
onDragEnd();
|
|
49
|
-
}
|
|
50
|
-
}}
|
|
51
|
-
>
|
|
52
|
-
<span className="button-text">{button.text}</span>
|
|
53
|
-
<span className="button-url">{button.url}</span>
|
|
54
|
-
<span className="button-type">{button.type}</span>
|
|
55
|
-
<button
|
|
56
|
-
className="edit-button"
|
|
57
|
-
onClick={() => !disabled && onEdit(index)}
|
|
58
|
-
disabled={disabled}
|
|
59
|
-
>
|
|
60
|
-
Edit
|
|
61
|
-
</button>
|
|
62
|
-
<button
|
|
63
|
-
className="delete-button"
|
|
64
|
-
onClick={() => !disabled && onDelete(index)}
|
|
65
|
-
disabled={disabled}
|
|
66
|
-
>
|
|
67
|
-
Delete
|
|
68
|
-
</button>
|
|
69
|
-
</div>
|
|
70
|
-
);
|
|
71
|
-
};
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
describe('ButtonList', () => {
|
|
75
|
-
const mockOnEdit = jest.fn();
|
|
76
|
-
const mockOnDelete = jest.fn();
|
|
77
|
-
const mockOnReorder = jest.fn();
|
|
78
|
-
const mockOnAddPrimary = jest.fn();
|
|
79
|
-
const mockOnAddSecondary = jest.fn();
|
|
80
|
-
const mockRenderInlineForm = jest.fn(() => <div className="inline-form">Inline Form</div>);
|
|
81
|
-
|
|
82
|
-
const mockButtons = [
|
|
83
|
-
{ text: 'Primary Button', url: 'https://example.com', type: 'primary' },
|
|
84
|
-
{ text: 'Secondary Button', url: 'https://example2.com', type: 'secondary' },
|
|
85
|
-
];
|
|
86
|
-
|
|
87
|
-
const defaultProps = {
|
|
88
|
-
buttons: mockButtons,
|
|
89
|
-
onEdit: mockOnEdit,
|
|
90
|
-
onDelete: mockOnDelete,
|
|
91
|
-
onReorder: mockOnReorder,
|
|
92
|
-
onAddPrimary: mockOnAddPrimary,
|
|
93
|
-
onAddSecondary: mockOnAddSecondary,
|
|
94
|
-
showAddPrimary: true,
|
|
95
|
-
showAddSecondary: true,
|
|
96
|
-
disabled: false,
|
|
97
|
-
disableSecondaryButton: false,
|
|
98
|
-
isInlineFormVisible: false,
|
|
99
|
-
inlineFormIndex: null,
|
|
100
|
-
renderInlineForm: null,
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
beforeEach(() => {
|
|
104
|
-
jest.clearAllMocks();
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
describe('Rendering', () => {
|
|
108
|
-
it('should render correctly with default props', () => {
|
|
109
|
-
const wrapper = shallowWithIntl(<ButtonList {...defaultProps} />);
|
|
110
|
-
expect(wrapper).toMatchSnapshot();
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should return null when buttons array is empty', () => {
|
|
114
|
-
const wrapper = shallowWithIntl(
|
|
115
|
-
<ButtonList {...defaultProps} buttons={[]} />
|
|
116
|
-
);
|
|
117
|
-
expect(wrapper.isEmptyRender()).toBe(true);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('should render all buttons', () => {
|
|
121
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
122
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
123
|
-
expect(buttonItems).toHaveLength(2);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('should render button items with correct props', () => {
|
|
127
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
128
|
-
const firstButtonItem = wrapper.find(ButtonItem).first();
|
|
129
|
-
|
|
130
|
-
expect(firstButtonItem.prop('button')).toEqual(mockButtons[0]);
|
|
131
|
-
expect(firstButtonItem.prop('index')).toBe(0);
|
|
132
|
-
expect(firstButtonItem.prop('onEdit')).toBe(mockOnEdit);
|
|
133
|
-
expect(firstButtonItem.prop('onDelete')).toBe(mockOnDelete);
|
|
134
|
-
expect(firstButtonItem.prop('disabled')).toBe(false);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
describe('Add Primary Button', () => {
|
|
139
|
-
it('should render add primary button when showAddPrimary is true', () => {
|
|
140
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} showAddPrimary={true} />);
|
|
141
|
-
const addPrimaryButton = wrapper.find(CapButton).findWhere(
|
|
142
|
-
(node) => node.prop('className') === 'add-primary-button button-add-trigger'
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
expect(addPrimaryButton.exists()).toBe(true);
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it('should not render add primary button when showAddPrimary is false', () => {
|
|
149
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} showAddPrimary={false} />);
|
|
150
|
-
const addPrimaryButton = wrapper.find(CapButton).findWhere(
|
|
151
|
-
(node) => node.prop('className') === 'add-primary-button button-add-trigger'
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
expect(addPrimaryButton.exists()).toBe(false);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('should call onAddPrimary when add primary button is clicked', () => {
|
|
158
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} showAddPrimary={true} />);
|
|
159
|
-
const addPrimaryButton = wrapper.find(CapButton).findWhere(
|
|
160
|
-
(node) => node.prop('className') === 'add-primary-button button-add-trigger'
|
|
161
|
-
).first();
|
|
162
|
-
|
|
163
|
-
addPrimaryButton.prop('onClick')();
|
|
164
|
-
|
|
165
|
-
expect(mockOnAddPrimary).toHaveBeenCalledTimes(1);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it('should disable add primary button when disabled prop is true', () => {
|
|
169
|
-
const wrapper = mountWithIntl(
|
|
170
|
-
<ButtonList {...defaultProps} showAddPrimary={true} disabled={true} />
|
|
171
|
-
);
|
|
172
|
-
const addPrimaryButton = wrapper.find(CapButton).findWhere(
|
|
173
|
-
(node) => node.prop('className') === 'add-primary-button button-add-trigger'
|
|
174
|
-
).first();
|
|
175
|
-
|
|
176
|
-
expect(addPrimaryButton.prop('disabled')).toBe(true);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
it('should not call onAddPrimary when button is disabled and clicked', () => {
|
|
180
|
-
const wrapper = mountWithIntl(
|
|
181
|
-
<ButtonList {...defaultProps} showAddPrimary={true} disabled={true} />
|
|
182
|
-
);
|
|
183
|
-
const addPrimaryButton = wrapper.find(CapButton).findWhere(
|
|
184
|
-
(node) => node.prop('className') === 'add-primary-button button-add-trigger'
|
|
185
|
-
).first();
|
|
186
|
-
|
|
187
|
-
// Even if we try to call onClick, it should be disabled
|
|
188
|
-
expect(addPrimaryButton.prop('disabled')).toBe(true);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
describe('Add Secondary Button', () => {
|
|
193
|
-
it('should render add secondary button when showAddSecondary is true', () => {
|
|
194
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} showAddSecondary={true} />);
|
|
195
|
-
const addSecondaryButton = wrapper.find(CapButton).findWhere(
|
|
196
|
-
(node) => node.prop('className') === 'add-secondary-button button-add-trigger'
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
expect(addSecondaryButton.exists()).toBe(true);
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it('should not render add secondary button when showAddSecondary is false', () => {
|
|
203
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} showAddSecondary={false} />);
|
|
204
|
-
const addSecondaryButton = wrapper.find(CapButton).findWhere(
|
|
205
|
-
(node) => node.prop('className') === 'add-secondary-button button-add-trigger'
|
|
206
|
-
);
|
|
207
|
-
|
|
208
|
-
expect(addSecondaryButton.exists()).toBe(false);
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('should call onAddSecondary when add secondary button is clicked', () => {
|
|
212
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} showAddSecondary={true} />);
|
|
213
|
-
const addSecondaryButton = wrapper.find(CapButton).findWhere(
|
|
214
|
-
(node) => node.prop('className') === 'add-secondary-button button-add-trigger'
|
|
215
|
-
).first();
|
|
216
|
-
|
|
217
|
-
addSecondaryButton.prop('onClick')();
|
|
218
|
-
|
|
219
|
-
expect(mockOnAddSecondary).toHaveBeenCalledTimes(1);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
it('should disable add secondary button when disabled prop is true', () => {
|
|
223
|
-
const wrapper = mountWithIntl(
|
|
224
|
-
<ButtonList {...defaultProps} showAddSecondary={true} disabled={true} />
|
|
225
|
-
);
|
|
226
|
-
const addSecondaryButton = wrapper.find(CapButton).findWhere(
|
|
227
|
-
(node) => node.prop('className') === 'add-secondary-button button-add-trigger'
|
|
228
|
-
).first();
|
|
229
|
-
|
|
230
|
-
expect(addSecondaryButton.prop('disabled')).toBe(true);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it('should disable add secondary button when disableSecondaryButton prop is true', () => {
|
|
234
|
-
const wrapper = mountWithIntl(
|
|
235
|
-
<ButtonList
|
|
236
|
-
{...defaultProps}
|
|
237
|
-
showAddSecondary={true}
|
|
238
|
-
disableSecondaryButton={true}
|
|
239
|
-
/>
|
|
240
|
-
);
|
|
241
|
-
const addSecondaryButton = wrapper.find(CapButton).findWhere(
|
|
242
|
-
(node) => node.prop('className') === 'add-secondary-button button-add-trigger'
|
|
243
|
-
).first();
|
|
244
|
-
|
|
245
|
-
expect(addSecondaryButton.prop('disabled')).toBe(true);
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
it('should disable add secondary button when both disabled and disableSecondaryButton are true', () => {
|
|
249
|
-
const wrapper = mountWithIntl(
|
|
250
|
-
<ButtonList
|
|
251
|
-
{...defaultProps}
|
|
252
|
-
showAddSecondary={true}
|
|
253
|
-
disabled={true}
|
|
254
|
-
disableSecondaryButton={true}
|
|
255
|
-
/>
|
|
256
|
-
);
|
|
257
|
-
const addSecondaryButton = wrapper.find(CapButton).findWhere(
|
|
258
|
-
(node) => node.prop('className') === 'add-secondary-button button-add-trigger'
|
|
259
|
-
).first();
|
|
260
|
-
|
|
261
|
-
expect(addSecondaryButton.prop('disabled')).toBe(true);
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
describe('Edit Button', () => {
|
|
266
|
-
it('should call onEdit with correct index when edit is clicked on primary button', () => {
|
|
267
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
268
|
-
const firstButtonItem = wrapper.find(ButtonItem).first();
|
|
269
|
-
|
|
270
|
-
firstButtonItem.prop('onEdit')(0);
|
|
271
|
-
|
|
272
|
-
expect(mockOnEdit).toHaveBeenCalledWith(0);
|
|
273
|
-
expect(mockOnEdit).toHaveBeenCalledTimes(1);
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
it('should call onEdit with correct index when edit is clicked on secondary button', () => {
|
|
277
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
278
|
-
const secondButtonItem = wrapper.find(ButtonItem).at(1);
|
|
279
|
-
|
|
280
|
-
secondButtonItem.prop('onEdit')(1);
|
|
281
|
-
|
|
282
|
-
expect(mockOnEdit).toHaveBeenCalledWith(1);
|
|
283
|
-
expect(mockOnEdit).toHaveBeenCalledTimes(1);
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
it('should not call onEdit when button item is disabled', () => {
|
|
287
|
-
const wrapper = mountWithIntl(
|
|
288
|
-
<ButtonList {...defaultProps} disabled={true} />
|
|
289
|
-
);
|
|
290
|
-
const firstButtonItem = wrapper.find(ButtonItem).first();
|
|
291
|
-
|
|
292
|
-
// ButtonItem should be disabled, so onEdit should not be called
|
|
293
|
-
expect(firstButtonItem.prop('disabled')).toBe(true);
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
describe('Delete Button', () => {
|
|
298
|
-
it('should call onDelete with correct index when delete is clicked', () => {
|
|
299
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
300
|
-
const firstButtonItem = wrapper.find(ButtonItem).first();
|
|
301
|
-
|
|
302
|
-
firstButtonItem.prop('onDelete')(0);
|
|
303
|
-
|
|
304
|
-
expect(mockOnDelete).toHaveBeenCalledWith(0);
|
|
305
|
-
expect(mockOnDelete).toHaveBeenCalledTimes(1);
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
it('should not call onDelete when button item is disabled', () => {
|
|
309
|
-
const wrapper = mountWithIntl(
|
|
310
|
-
<ButtonList {...defaultProps} disabled={true} />
|
|
311
|
-
);
|
|
312
|
-
const firstButtonItem = wrapper.find(ButtonItem).first();
|
|
313
|
-
|
|
314
|
-
// ButtonItem should be disabled, so onDelete should not be called
|
|
315
|
-
expect(firstButtonItem.prop('disabled')).toBe(true);
|
|
316
|
-
});
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
describe('Reorder Buttons (Drag and Drop)', () => {
|
|
320
|
-
it('should set draggedIndex on drag start', () => {
|
|
321
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
322
|
-
|
|
323
|
-
// Simulate drag start - call with index directly
|
|
324
|
-
act(() => {
|
|
325
|
-
wrapper.find(ButtonItem).first().prop('onDragStart')(0);
|
|
326
|
-
});
|
|
327
|
-
wrapper.update();
|
|
328
|
-
|
|
329
|
-
// Get fresh references after state update
|
|
330
|
-
act(() => {
|
|
331
|
-
wrapper.find(ButtonItem).at(1).prop('onDragOver')(1);
|
|
332
|
-
});
|
|
333
|
-
wrapper.update();
|
|
334
|
-
|
|
335
|
-
expect(mockOnReorder).toHaveBeenCalledWith(0, 1);
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
it('should call onReorder when dragging over a different button', () => {
|
|
339
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
340
|
-
|
|
341
|
-
// Start drag on first button - call with index directly
|
|
342
|
-
act(() => {
|
|
343
|
-
wrapper.find(ButtonItem).first().prop('onDragStart')(0);
|
|
344
|
-
});
|
|
345
|
-
wrapper.update();
|
|
346
|
-
|
|
347
|
-
// Get fresh references after state update and drag over second button
|
|
348
|
-
act(() => {
|
|
349
|
-
wrapper.find(ButtonItem).at(1).prop('onDragOver')(1);
|
|
350
|
-
});
|
|
351
|
-
wrapper.update();
|
|
352
|
-
|
|
353
|
-
expect(mockOnReorder).toHaveBeenCalledWith(0, 1);
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
it('should not call onReorder when dragging over the same button', () => {
|
|
357
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
358
|
-
|
|
359
|
-
// Start drag on first button - call with index directly
|
|
360
|
-
act(() => {
|
|
361
|
-
wrapper.find(ButtonItem).first().prop('onDragStart')(0);
|
|
362
|
-
});
|
|
363
|
-
wrapper.update();
|
|
364
|
-
|
|
365
|
-
// Drag over the same button - call with index directly
|
|
366
|
-
act(() => {
|
|
367
|
-
wrapper.find(ButtonItem).first().prop('onDragOver')(0);
|
|
368
|
-
});
|
|
369
|
-
wrapper.update();
|
|
370
|
-
|
|
371
|
-
expect(mockOnReorder).not.toHaveBeenCalled();
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
it('should not call onReorder when component is disabled', () => {
|
|
375
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} disabled={true} />);
|
|
376
|
-
|
|
377
|
-
// Try to start drag (should be prevented) - call with index directly
|
|
378
|
-
act(() => {
|
|
379
|
-
wrapper.find(ButtonItem).first().prop('onDragStart')(0);
|
|
380
|
-
});
|
|
381
|
-
wrapper.update();
|
|
382
|
-
|
|
383
|
-
// Try to drag over (should be prevented) - call with index directly
|
|
384
|
-
act(() => {
|
|
385
|
-
wrapper.find(ButtonItem).at(1).prop('onDragOver')(1);
|
|
386
|
-
});
|
|
387
|
-
wrapper.update();
|
|
388
|
-
|
|
389
|
-
expect(mockOnReorder).not.toHaveBeenCalled();
|
|
390
|
-
});
|
|
391
|
-
|
|
392
|
-
it('should reset draggedIndex on drag end', () => {
|
|
393
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
394
|
-
|
|
395
|
-
// Start drag - call with index directly
|
|
396
|
-
act(() => {
|
|
397
|
-
wrapper.find(ButtonItem).first().prop('onDragStart')(0);
|
|
398
|
-
});
|
|
399
|
-
wrapper.update();
|
|
400
|
-
|
|
401
|
-
// End drag
|
|
402
|
-
act(() => {
|
|
403
|
-
wrapper.find(ButtonItem).first().prop('onDragEnd')();
|
|
404
|
-
});
|
|
405
|
-
wrapper.update();
|
|
406
|
-
|
|
407
|
-
// Try to drag over after drag end (should not call onReorder) - call with index directly
|
|
408
|
-
mockOnReorder.mockClear();
|
|
409
|
-
act(() => {
|
|
410
|
-
wrapper.find(ButtonItem).at(1).prop('onDragOver')(1);
|
|
411
|
-
});
|
|
412
|
-
wrapper.update();
|
|
413
|
-
|
|
414
|
-
expect(mockOnReorder).not.toHaveBeenCalled();
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
it('should handle multiple reorder operations', () => {
|
|
418
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
419
|
-
|
|
420
|
-
// First reorder: move button 0 to position 1 - call with index directly
|
|
421
|
-
act(() => {
|
|
422
|
-
wrapper.find(ButtonItem).first().prop('onDragStart')(0);
|
|
423
|
-
});
|
|
424
|
-
wrapper.update();
|
|
425
|
-
|
|
426
|
-
act(() => {
|
|
427
|
-
wrapper.find(ButtonItem).at(1).prop('onDragOver')(1);
|
|
428
|
-
});
|
|
429
|
-
wrapper.update();
|
|
430
|
-
|
|
431
|
-
expect(mockOnReorder).toHaveBeenCalledWith(0, 1);
|
|
432
|
-
|
|
433
|
-
// End drag
|
|
434
|
-
act(() => {
|
|
435
|
-
wrapper.find(ButtonItem).first().prop('onDragEnd')();
|
|
436
|
-
});
|
|
437
|
-
wrapper.update();
|
|
438
|
-
|
|
439
|
-
// Second reorder: move button 1 to position 0 - call with index directly
|
|
440
|
-
mockOnReorder.mockClear();
|
|
441
|
-
act(() => {
|
|
442
|
-
wrapper.find(ButtonItem).at(1).prop('onDragStart')(1);
|
|
443
|
-
});
|
|
444
|
-
wrapper.update();
|
|
445
|
-
|
|
446
|
-
act(() => {
|
|
447
|
-
wrapper.find(ButtonItem).first().prop('onDragOver')(0);
|
|
448
|
-
});
|
|
449
|
-
wrapper.update();
|
|
450
|
-
|
|
451
|
-
expect(mockOnReorder).toHaveBeenCalledWith(1, 0);
|
|
452
|
-
});
|
|
453
|
-
});
|
|
454
|
-
|
|
455
|
-
describe('Disabled States', () => {
|
|
456
|
-
it('should disable all button items when disabled prop is true', () => {
|
|
457
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} disabled={true} />);
|
|
458
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
459
|
-
|
|
460
|
-
buttonItems.forEach((item) => {
|
|
461
|
-
expect(item.prop('disabled')).toBe(true);
|
|
462
|
-
});
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
it('should disable button items that are not being edited when inline form is visible', () => {
|
|
466
|
-
const wrapper = mountWithIntl(
|
|
467
|
-
<ButtonList
|
|
468
|
-
{...defaultProps}
|
|
469
|
-
isInlineFormVisible={true}
|
|
470
|
-
inlineFormIndex={0}
|
|
471
|
-
/>
|
|
472
|
-
);
|
|
473
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
474
|
-
|
|
475
|
-
// First button (index 0) should not be disabled (being edited)
|
|
476
|
-
expect(buttonItems.at(0).prop('disabled')).toBe(false);
|
|
477
|
-
// Second button (index 1) should be disabled (not being edited)
|
|
478
|
-
expect(buttonItems.at(1).prop('disabled')).toBe(true);
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
it('should disable button items when both disabled and inline form are active', () => {
|
|
482
|
-
const wrapper = mountWithIntl(
|
|
483
|
-
<ButtonList
|
|
484
|
-
{...defaultProps}
|
|
485
|
-
disabled={true}
|
|
486
|
-
isInlineFormVisible={true}
|
|
487
|
-
inlineFormIndex={0}
|
|
488
|
-
/>
|
|
489
|
-
);
|
|
490
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
491
|
-
|
|
492
|
-
// All buttons should be disabled when disabled prop is true
|
|
493
|
-
buttonItems.forEach((item) => {
|
|
494
|
-
expect(item.prop('disabled')).toBe(true);
|
|
495
|
-
});
|
|
496
|
-
});
|
|
497
|
-
|
|
498
|
-
it('should not disable buttons when inline form is not visible', () => {
|
|
499
|
-
const wrapper = mountWithIntl(
|
|
500
|
-
<ButtonList
|
|
501
|
-
{...defaultProps}
|
|
502
|
-
isInlineFormVisible={false}
|
|
503
|
-
inlineFormIndex={null}
|
|
504
|
-
/>
|
|
505
|
-
);
|
|
506
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
507
|
-
|
|
508
|
-
buttonItems.forEach((item) => {
|
|
509
|
-
expect(item.prop('disabled')).toBe(false);
|
|
510
|
-
});
|
|
511
|
-
});
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
describe('Inline Form Rendering', () => {
|
|
515
|
-
it('should render inline form when isInlineFormVisible is true and inlineFormIndex is set', () => {
|
|
516
|
-
const wrapper = mountWithIntl(
|
|
517
|
-
<ButtonList
|
|
518
|
-
{...defaultProps}
|
|
519
|
-
isInlineFormVisible={true}
|
|
520
|
-
inlineFormIndex={0}
|
|
521
|
-
renderInlineForm={mockRenderInlineForm}
|
|
522
|
-
/>
|
|
523
|
-
);
|
|
524
|
-
|
|
525
|
-
const inlineForm = wrapper.find('.button-inline-form');
|
|
526
|
-
expect(inlineForm.exists()).toBe(true);
|
|
527
|
-
expect(mockRenderInlineForm).toHaveBeenCalled();
|
|
528
|
-
});
|
|
529
|
-
|
|
530
|
-
it('should not render inline form when isInlineFormVisible is false', () => {
|
|
531
|
-
const wrapper = mountWithIntl(
|
|
532
|
-
<ButtonList
|
|
533
|
-
{...defaultProps}
|
|
534
|
-
isInlineFormVisible={false}
|
|
535
|
-
inlineFormIndex={0}
|
|
536
|
-
renderInlineForm={mockRenderInlineForm}
|
|
537
|
-
/>
|
|
538
|
-
);
|
|
539
|
-
|
|
540
|
-
const inlineForm = wrapper.find('.button-inline-form');
|
|
541
|
-
expect(inlineForm.exists()).toBe(false);
|
|
542
|
-
});
|
|
543
|
-
|
|
544
|
-
it('should not render inline form when inlineFormIndex is null', () => {
|
|
545
|
-
const wrapper = mountWithIntl(
|
|
546
|
-
<ButtonList
|
|
547
|
-
{...defaultProps}
|
|
548
|
-
isInlineFormVisible={true}
|
|
549
|
-
inlineFormIndex={null}
|
|
550
|
-
renderInlineForm={mockRenderInlineForm}
|
|
551
|
-
/>
|
|
552
|
-
);
|
|
553
|
-
|
|
554
|
-
const inlineForm = wrapper.find('.button-inline-form');
|
|
555
|
-
expect(inlineForm.exists()).toBe(false);
|
|
556
|
-
});
|
|
557
|
-
|
|
558
|
-
it('should not render inline form when inlineFormIndex is negative', () => {
|
|
559
|
-
const wrapper = mountWithIntl(
|
|
560
|
-
<ButtonList
|
|
561
|
-
{...defaultProps}
|
|
562
|
-
isInlineFormVisible={true}
|
|
563
|
-
inlineFormIndex={-1}
|
|
564
|
-
renderInlineForm={mockRenderInlineForm}
|
|
565
|
-
/>
|
|
566
|
-
);
|
|
567
|
-
|
|
568
|
-
const inlineForm = wrapper.find('.button-inline-form');
|
|
569
|
-
expect(inlineForm.exists()).toBe(false);
|
|
570
|
-
});
|
|
571
|
-
|
|
572
|
-
it('should not render inline form when renderInlineForm is not a function', () => {
|
|
573
|
-
const wrapper = mountWithIntl(
|
|
574
|
-
<ButtonList
|
|
575
|
-
{...defaultProps}
|
|
576
|
-
isInlineFormVisible={true}
|
|
577
|
-
inlineFormIndex={0}
|
|
578
|
-
renderInlineForm={null}
|
|
579
|
-
/>
|
|
580
|
-
);
|
|
581
|
-
|
|
582
|
-
const inlineForm = wrapper.find('.button-inline-form');
|
|
583
|
-
expect(inlineForm.exists()).toBe(false);
|
|
584
|
-
});
|
|
585
|
-
|
|
586
|
-
it('should render inline form at the correct index', () => {
|
|
587
|
-
const wrapper = mountWithIntl(
|
|
588
|
-
<ButtonList
|
|
589
|
-
{...defaultProps}
|
|
590
|
-
isInlineFormVisible={true}
|
|
591
|
-
inlineFormIndex={1}
|
|
592
|
-
renderInlineForm={mockRenderInlineForm}
|
|
593
|
-
/>
|
|
594
|
-
);
|
|
595
|
-
|
|
596
|
-
const inlineForm = wrapper.find('.button-inline-form');
|
|
597
|
-
expect(inlineForm.exists()).toBe(true);
|
|
598
|
-
|
|
599
|
-
// The inline form should be rendered instead of the button at index 1
|
|
600
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
601
|
-
// We should still have button items, but the form should be in the list
|
|
602
|
-
expect(inlineForm.exists()).toBe(true);
|
|
603
|
-
});
|
|
604
|
-
});
|
|
605
|
-
|
|
606
|
-
describe('Button Item Props', () => {
|
|
607
|
-
it('should pass correct button data to ButtonItem', () => {
|
|
608
|
-
const customButtons = [
|
|
609
|
-
{ text: 'Custom Primary', url: 'https://custom1.com', type: 'primary' },
|
|
610
|
-
{ text: 'Custom Secondary', url: 'https://custom2.com', type: 'secondary' },
|
|
611
|
-
];
|
|
612
|
-
const wrapper = mountWithIntl(
|
|
613
|
-
<ButtonList {...defaultProps} buttons={customButtons} />
|
|
614
|
-
);
|
|
615
|
-
|
|
616
|
-
const firstButtonItem = wrapper.find(ButtonItem).first();
|
|
617
|
-
expect(firstButtonItem.prop('button')).toEqual(customButtons[0]);
|
|
618
|
-
|
|
619
|
-
const secondButtonItem = wrapper.find(ButtonItem).at(1);
|
|
620
|
-
expect(secondButtonItem.prop('button')).toEqual(customButtons[1]);
|
|
621
|
-
});
|
|
622
|
-
|
|
623
|
-
it('should pass correct index to each ButtonItem', () => {
|
|
624
|
-
const wrapper = mountWithIntl(<ButtonList {...defaultProps} />);
|
|
625
|
-
const buttonItems = wrapper.find(ButtonItem);
|
|
626
|
-
|
|
627
|
-
buttonItems.forEach((item, index) => {
|
|
628
|
-
expect(item.prop('index')).toBe(index);
|
|
629
|
-
});
|
|
630
|
-
});
|
|
631
|
-
});
|
|
632
|
-
});
|
|
633
|
-
|