@imposium-hub/components 2.14.11 → 2.15.0-1
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/dist/cjs/components/app-wrapper/AppWrapper.d.ts +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper.js +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapperV2.d.ts +26 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js +266 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV2.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.d.ts +19 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js +195 -0
- package/dist/cjs/components/app-wrapper/AppWrapperV3.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/cjs/components/auth-gate/AuthGate.d.ts +2 -0
- package/dist/cjs/components/auth-gate/AuthGate.js +105 -0
- package/dist/cjs/components/auth-gate/AuthGate.js.map +1 -0
- package/dist/cjs/components/change-report/ChangeReportTree.d.ts +10 -0
- package/dist/cjs/components/change-report/ChangeReportTree.js +95 -0
- package/dist/cjs/components/change-report/ChangeReportTree.js.map +1 -0
- package/dist/cjs/components/dropdown/{Dropdown.stories.js → dropdown.stories.js} +1 -1
- package/dist/cjs/components/dropdown/{Dropdown.stories.js.map → dropdown.stories.js.map} +1 -1
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.js +132 -0
- package/dist/cjs/components/edit-guide-modal/EditGuideModal.js.map +1 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js +104 -0
- package/dist/cjs/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +91 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/cjs/components/feature-flag-wrapper/FeatureFlagWrapper.d.ts +7 -0
- package/dist/cjs/components/feature-flag-wrapper/FeatureFlagWrapper.js +48 -0
- package/dist/cjs/components/feature-flag-wrapper/FeatureFlagWrapper.js.map +1 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
- package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/cjs/components/header/StoryDropdown.d.ts +6 -0
- package/dist/cjs/components/header/StoryDropdown.js +111 -0
- package/dist/cjs/components/header/StoryDropdown.js.map +1 -0
- package/dist/cjs/components/number-field/NumberField.d.ts +2 -2
- package/dist/cjs/components/number-field/NumberField.js +4 -7
- package/dist/cjs/components/number-field/NumberField.js.map +1 -1
- package/dist/cjs/components/publish-wizard/PublishWizard.d.ts +4 -3
- package/dist/cjs/components/publish-wizard/PublishWizard.js +104 -38
- package/dist/cjs/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js +213 -0
- package/dist/cjs/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
- package/dist/cjs/components/service-icon/ServiceIcon.test.d.ts +0 -0
- package/dist/cjs/components/service-icon/ServiceIcon.test.js +1 -0
- package/dist/cjs/components/service-icon/ServiceIcon.test.js.map +1 -0
- package/dist/cjs/components/tag/Tag.test.d.ts +0 -0
- package/dist/cjs/components/tag/Tag.test.js +1 -0
- package/dist/cjs/components/tag/Tag.test.js.map +1 -0
- package/dist/cjs/constants/copy.d.ts +9 -0
- package/dist/cjs/constants/copy.js +13 -2
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/snippets.d.ts +18 -0
- package/dist/cjs/constants/snippets.js +3 -0
- package/dist/cjs/constants/snippets.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/auth.d.ts +9 -0
- package/dist/cjs/redux/actions/auth.js +30 -0
- package/dist/cjs/redux/actions/auth.js.map +1 -0
- package/dist/cjs/redux/reducers/auth.d.ts +3 -0
- package/dist/cjs/redux/reducers/auth.js +67 -0
- package/dist/cjs/redux/reducers/auth.js.map +1 -0
- package/dist/cjs/services/API.d.ts +2 -0
- package/dist/cjs/services/API.js +6 -0
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/cjs/services/Auth0.d.ts +18 -0
- package/dist/cjs/services/Auth0.js +102 -0
- package/dist/cjs/services/Auth0.js.map +1 -0
- package/dist/cjs/services/Session.d.ts +26 -0
- package/dist/cjs/services/Session.js +155 -0
- package/dist/cjs/services/Session.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper.d.ts +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper.js +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapperV2.d.ts +26 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.js +142 -0
- package/dist/esm/components/app-wrapper/AppWrapperV2.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.d.ts +19 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.js +88 -0
- package/dist/esm/components/app-wrapper/AppWrapperV3.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/esm/components/auth-gate/AuthGate.d.ts +2 -0
- package/dist/esm/components/auth-gate/AuthGate.js +59 -0
- package/dist/esm/components/auth-gate/AuthGate.js.map +1 -0
- package/dist/esm/components/change-report/ChangeReportTree.d.ts +10 -0
- package/dist/esm/components/change-report/ChangeReportTree.js +42 -0
- package/dist/esm/components/change-report/ChangeReportTree.js.map +1 -0
- package/dist/esm/components/dropdown/{Dropdown.stories.js → dropdown.stories.js} +1 -1
- package/dist/esm/components/dropdown/{Dropdown.stories.js.map → dropdown.stories.js.map} +1 -1
- package/dist/esm/components/edit-guide-modal/EditGuideModal.d.ts +8 -0
- package/dist/esm/components/edit-guide-modal/EditGuideModal.js +65 -0
- package/dist/esm/components/edit-guide-modal/EditGuideModal.js.map +1 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.d.ts +8 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.js +72 -0
- package/dist/esm/components/edit-marker-modal/EditMarkerModal.js.map +1 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +35 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/esm/components/feature-flag-wrapper/FeatureFlagWrapper.d.ts +7 -0
- package/dist/esm/components/feature-flag-wrapper/FeatureFlagWrapper.js +10 -0
- package/dist/esm/components/feature-flag-wrapper/FeatureFlagWrapper.js.map +1 -0
- package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/esm/components/header/Header_BASE_73021.js +322 -0
- package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/esm/components/header/StoryDropdown.d.ts +6 -0
- package/dist/esm/components/header/StoryDropdown.js +82 -0
- package/dist/esm/components/header/StoryDropdown.js.map +1 -0
- package/dist/esm/components/number-field/NumberField.d.ts +2 -2
- package/dist/esm/components/number-field/NumberField.js +4 -5
- package/dist/esm/components/number-field/NumberField.js.map +1 -1
- package/dist/esm/components/publish-wizard/PublishWizard.d.ts +4 -3
- package/dist/esm/components/publish-wizard/PublishWizard.js +92 -38
- package/dist/esm/components/publish-wizard/PublishWizard.js.map +1 -1
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.d.ts +11 -0
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js +141 -0
- package/dist/esm/components/replace-files-modal/ReplaceFilesModal.js.map +1 -0
- package/dist/esm/components/service-icon/ServiceIcon.test.d.ts +0 -0
- package/dist/esm/components/service-icon/ServiceIcon.test.js +1 -0
- package/dist/esm/components/service-icon/ServiceIcon.test.js.map +1 -0
- package/dist/esm/components/tag/Tag.test.d.ts +0 -0
- package/dist/esm/components/tag/Tag.test.js +1 -0
- package/dist/esm/components/tag/Tag.test.js.map +1 -0
- package/dist/esm/constants/copy.d.ts +9 -0
- package/dist/esm/constants/copy.js +13 -2
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/snippets.d.ts +18 -0
- package/dist/esm/constants/snippets.js +2 -0
- package/dist/esm/constants/snippets.js.map +1 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/auth.d.ts +9 -0
- package/dist/esm/redux/actions/auth.js +25 -0
- package/dist/esm/redux/actions/auth.js.map +1 -0
- package/dist/esm/redux/reducers/auth.d.ts +3 -0
- package/dist/esm/redux/reducers/auth.js +27 -0
- package/dist/esm/redux/reducers/auth.js.map +1 -0
- package/dist/esm/services/API.d.ts +2 -0
- package/dist/esm/services/API.js +6 -0
- package/dist/esm/services/API.js.map +1 -1
- package/dist/esm/services/Auth0.d.ts +18 -0
- package/dist/esm/services/Auth0.js +68 -0
- package/dist/esm/services/Auth0.js.map +1 -0
- package/dist/esm/services/Session.d.ts +26 -0
- package/dist/esm/services/Session.js +107 -0
- package/dist/esm/services/Session.js.map +1 -0
- package/dist/styles.css +127 -0
- package/dist/styles.less +152 -0
- package/less/components/change-report.less +115 -0
- package/less/components/publish-wizard.less +36 -0
- package/less/entry.less +1 -0
- package/package.json +6 -17
- package/src/components/app-wrapper/AppWrapper.tsx +6 -1
- package/src/components/change-report/ChangeReportTree.tsx +125 -0
- package/src/components/number-field/NumberField.tsx +9 -15
- package/src/components/publish-wizard/PublishWizard.tsx +144 -45
- package/src/components/service-icon/ServiceIcon.test.tsx +0 -0
- package/src/components/tag/Tag.test.tsx +0 -0
- package/src/constants/copy.ts +16 -2
- package/src/constants/snippets.ts +25 -0
- package/src/index.ts +7 -1
- package/src/services/API.ts +8 -0
- package/tsconfig.json +1 -1
- package/src/components/advanced-number-field/AdvancedNumberField.test.tsx +0 -724
- package/src/components/anchor-field/AnchorField.test.tsx +0 -130
- package/src/components/asset-details/AssetDetails.test.tsx +0 -494
- package/src/components/assets/AssetField.test.tsx +0 -449
- package/src/components/assets/AssetsTableAssetIdCell.test.tsx +0 -142
- package/src/components/assets/AssetsTableAssetIdFilter.test.tsx +0 -95
- package/src/components/assets/AssetsTableComplexTagCell.test.tsx +0 -161
- package/src/components/assets/AssetsTableDateCell.test.tsx +0 -106
- package/src/components/assets/AssetsTableDropzone.test.tsx +0 -132
- package/src/components/assets/AssetsTableDurationCell.test.tsx +0 -119
- package/src/components/assets/AssetsTableGlobalCell.test.tsx +0 -46
- package/src/components/assets/AssetsTableNameCell.test.tsx +0 -166
- package/src/components/assets/AssetsTableNameFilter.test.tsx +0 -95
- package/src/components/assets/AssetsTablePreviewCell.test.tsx +0 -191
- package/src/components/assets/AssetsTableRateCell.test.tsx +0 -87
- package/src/components/assets/AssetsTableSelectCell.test.tsx +0 -156
- package/src/components/assets/AssetsTableSelectFilter.test.tsx +0 -119
- package/src/components/assets/AssetsTableStatusCell.test.tsx +0 -60
- package/src/components/number-field/NumberField.test.tsx +0 -383
- package/src/components/text-field/TextField.test.tsx +0 -988
- package/src/test/setup.ts +0 -91
- package/src/test/utils.tsx +0 -44
- package/tsconfig.eslint.json +0 -8
- package/vitest.config.ts +0 -31
- /package/dist/cjs/components/dropdown/{Dropdown.stories.d.ts → dropdown.stories.d.ts} +0 -0
- /package/dist/esm/components/dropdown/{Dropdown.stories.d.ts → dropdown.stories.d.ts} +0 -0
- /package/src/components/dropdown/{Dropdown.stories.tsx → dropdown.stories.tsx} +0 -0
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { render, fireEvent } from '@testing-library/react';
|
|
4
|
-
import { Provider } from 'react-redux';
|
|
5
|
-
import { legacy_createStore as createStore } from 'redux';
|
|
6
|
-
|
|
7
|
-
vi.mock('../checkbox-field/CheckboxField', () => ({
|
|
8
|
-
default: ({ label, propagate, value, onChange }: any) => (
|
|
9
|
-
<div
|
|
10
|
-
data-testid='mock-checkbox-field'
|
|
11
|
-
data-label={label}
|
|
12
|
-
data-propagate={propagate}
|
|
13
|
-
data-value={value}>
|
|
14
|
-
<input
|
|
15
|
-
type='checkbox'
|
|
16
|
-
checked={value}
|
|
17
|
-
onChange={() => onChange()}
|
|
18
|
-
/>
|
|
19
|
-
</div>
|
|
20
|
-
)
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
vi.mock('../../redux/actions/selected-assets', () => ({
|
|
24
|
-
selectAll: vi.fn(() => ({ type: 'selectedAssets/SELECT_ALL' })),
|
|
25
|
-
resetSelection: vi.fn(() => ({ type: 'selectedAssets/RESET' }))
|
|
26
|
-
}));
|
|
27
|
-
|
|
28
|
-
import AssetsTableSelectFilterMemoized from './AssetsTableSelectFilter';
|
|
29
|
-
|
|
30
|
-
const createMockStore = (selectedAssets: string[] = []) => {
|
|
31
|
-
const initialState = { selectedAssets };
|
|
32
|
-
return createStore((state: any = initialState, action: any) => {
|
|
33
|
-
switch (action.type) {
|
|
34
|
-
case 'selectedAssets/SELECT_ALL':
|
|
35
|
-
return {
|
|
36
|
-
...state,
|
|
37
|
-
selectedAssets: ['asset-1', 'asset-2', 'asset-3']
|
|
38
|
-
};
|
|
39
|
-
case 'selectedAssets/RESET':
|
|
40
|
-
return {
|
|
41
|
-
...state,
|
|
42
|
-
selectedAssets: []
|
|
43
|
-
};
|
|
44
|
-
default:
|
|
45
|
-
return state;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const renderComponent = (selectedAssets: string[] = []) => {
|
|
51
|
-
const store = createMockStore(selectedAssets);
|
|
52
|
-
|
|
53
|
-
const result = render(
|
|
54
|
-
<Provider store={store}>
|
|
55
|
-
<AssetsTableSelectFilterMemoized />
|
|
56
|
-
</Provider>
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
return { ...result, store };
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
describe('AssetsTableSelectFilter', () => {
|
|
63
|
-
it('renders CheckboxField with correct props when no assets are selected', () => {
|
|
64
|
-
const { getByTestId } = renderComponent();
|
|
65
|
-
const checkbox = getByTestId('mock-checkbox-field');
|
|
66
|
-
|
|
67
|
-
expect(checkbox.getAttribute('data-label')).toBe('');
|
|
68
|
-
expect(checkbox.getAttribute('data-propagate')).toBe('false');
|
|
69
|
-
expect(checkbox.getAttribute('data-value')).toBe('false');
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('renders CheckboxField as checked when assets are selected', () => {
|
|
73
|
-
const { getByTestId } = renderComponent(['asset-1', 'asset-2']);
|
|
74
|
-
const checkbox = getByTestId('mock-checkbox-field');
|
|
75
|
-
|
|
76
|
-
expect(checkbox.getAttribute('data-value')).toBe('true');
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('dispatches selectAll when checkbox is clicked and no assets are selected', () => {
|
|
80
|
-
const { getByRole, store } = renderComponent();
|
|
81
|
-
const checkboxInput = getByRole('checkbox');
|
|
82
|
-
|
|
83
|
-
fireEvent.click(checkboxInput);
|
|
84
|
-
|
|
85
|
-
const storeState = store.getState();
|
|
86
|
-
expect(storeState.selectedAssets).toEqual(['asset-1', 'asset-2', 'asset-3']);
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('dispatches resetSelection when checkbox is clicked and assets are selected', () => {
|
|
90
|
-
const { getByRole, store } = renderComponent(['asset-1', 'asset-2']);
|
|
91
|
-
const checkboxInput = getByRole('checkbox');
|
|
92
|
-
|
|
93
|
-
fireEvent.click(checkboxInput);
|
|
94
|
-
|
|
95
|
-
const storeState = store.getState();
|
|
96
|
-
expect(storeState.selectedAssets).toEqual([]);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it('shows unchecked state when selectedAssets array is empty', () => {
|
|
100
|
-
const { getByTestId } = renderComponent([]);
|
|
101
|
-
const checkbox = getByTestId('mock-checkbox-field');
|
|
102
|
-
|
|
103
|
-
expect(checkbox.getAttribute('data-value')).toBe('false');
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('shows checked state when selectedAssets array has one item', () => {
|
|
107
|
-
const { getByTestId } = renderComponent(['single-asset']);
|
|
108
|
-
const checkbox = getByTestId('mock-checkbox-field');
|
|
109
|
-
|
|
110
|
-
expect(checkbox.getAttribute('data-value')).toBe('true');
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('shows checked state when selectedAssets array has multiple items', () => {
|
|
114
|
-
const { getByTestId } = renderComponent(['asset-1', 'asset-2', 'asset-3']);
|
|
115
|
-
const checkbox = getByTestId('mock-checkbox-field');
|
|
116
|
-
|
|
117
|
-
expect(checkbox.getAttribute('data-value')).toBe('true');
|
|
118
|
-
});
|
|
119
|
-
});
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { render } from '@testing-library/react';
|
|
4
|
-
import AssetsTableStatusCellMemoized from './AssetsTableStatusCell';
|
|
5
|
-
|
|
6
|
-
const buildCellProp = (overrides: Record<string, any> = {}) => ({
|
|
7
|
-
row: {
|
|
8
|
-
original: {
|
|
9
|
-
processing: false,
|
|
10
|
-
...overrides
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
const renderComponent = (overrides: Record<string, any> = {}) => {
|
|
16
|
-
return render(<AssetsTableStatusCellMemoized cell={buildCellProp(overrides)} />);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
describe('AssetsTableStatusCell', () => {
|
|
20
|
-
it('renders with complete status when processing is false', () => {
|
|
21
|
-
const { container } = renderComponent({ processing: false });
|
|
22
|
-
const statusCell = container.querySelector('.asset-status-cell');
|
|
23
|
-
const statusIndicator = container.querySelector('.status-indicator');
|
|
24
|
-
|
|
25
|
-
expect(statusCell).toBeTruthy();
|
|
26
|
-
expect(statusIndicator?.className).toBe('status-indicator complete');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('renders with processing status when processing is true', () => {
|
|
30
|
-
const { container } = renderComponent({ processing: true });
|
|
31
|
-
const statusIndicator = container.querySelector('.status-indicator');
|
|
32
|
-
|
|
33
|
-
expect(statusIndicator?.className).toBe('status-indicator processing');
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('renders with complete status when processing is undefined', () => {
|
|
37
|
-
const { container } = renderComponent({ processing: undefined });
|
|
38
|
-
const statusIndicator = container.querySelector('.status-indicator');
|
|
39
|
-
|
|
40
|
-
expect(statusIndicator?.className).toBe('status-indicator complete');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('renders with complete status when processing is null', () => {
|
|
44
|
-
const { container } = renderComponent({ processing: null });
|
|
45
|
-
const statusIndicator = container.querySelector('.status-indicator');
|
|
46
|
-
|
|
47
|
-
expect(statusIndicator?.className).toBe('status-indicator complete');
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('renders the correct DOM structure', () => {
|
|
51
|
-
const { container } = renderComponent();
|
|
52
|
-
const statusCell = container.querySelector('.asset-status-cell');
|
|
53
|
-
const statusIndicator = statusCell?.querySelector('.status-indicator');
|
|
54
|
-
|
|
55
|
-
expect(statusCell).toBeTruthy();
|
|
56
|
-
expect(statusIndicator).toBeTruthy();
|
|
57
|
-
expect(statusCell?.children).toHaveLength(1);
|
|
58
|
-
expect(statusCell?.firstChild).toEqual(statusIndicator);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
3
|
-
import { render, fireEvent, screen } from '../../test/utils';
|
|
4
|
-
import NumberField, { validateNumInput } from './NumberField';
|
|
5
|
-
|
|
6
|
-
describe('NumberField', () => {
|
|
7
|
-
const defaultProps = {
|
|
8
|
-
value: 10,
|
|
9
|
-
onChange: vi.fn(),
|
|
10
|
-
label: 'Test Number Field'
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
vi.clearAllMocks();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
describe('Rendering', () => {
|
|
18
|
-
it('renders without crashing', () => {
|
|
19
|
-
render(<NumberField {...defaultProps} />);
|
|
20
|
-
const input = screen.getByRole('spinbutton');
|
|
21
|
-
expect(input).toBeDefined();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('displays the correct value', () => {
|
|
25
|
-
render(
|
|
26
|
-
<NumberField
|
|
27
|
-
{...defaultProps}
|
|
28
|
-
value={25}
|
|
29
|
-
/>
|
|
30
|
-
);
|
|
31
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
32
|
-
expect(input.value).toBe('25');
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('displays placeholder when provided', () => {
|
|
36
|
-
render(
|
|
37
|
-
<NumberField
|
|
38
|
-
{...defaultProps}
|
|
39
|
-
placeholder='Enter number'
|
|
40
|
-
/>
|
|
41
|
-
);
|
|
42
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
43
|
-
expect(input.placeholder).toBe('Enter number');
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('displays empty string when value is null', () => {
|
|
47
|
-
render(
|
|
48
|
-
<NumberField
|
|
49
|
-
{...defaultProps}
|
|
50
|
-
value={null}
|
|
51
|
-
/>
|
|
52
|
-
);
|
|
53
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
54
|
-
expect(input.value).toBe('');
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('applies min and max attributes', () => {
|
|
58
|
-
render(
|
|
59
|
-
<NumberField
|
|
60
|
-
{...defaultProps}
|
|
61
|
-
min={0}
|
|
62
|
-
max={100}
|
|
63
|
-
/>
|
|
64
|
-
);
|
|
65
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
66
|
-
expect(input.min).toBe('0');
|
|
67
|
-
expect(input.max).toBe('100');
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('sets readOnly attribute when readOnly prop is true', () => {
|
|
71
|
-
render(
|
|
72
|
-
<NumberField
|
|
73
|
-
{...defaultProps}
|
|
74
|
-
readOnly
|
|
75
|
-
/>
|
|
76
|
-
);
|
|
77
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
78
|
-
expect(input.readOnly).toBe(true);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
describe('User Interactions', () => {
|
|
83
|
-
it('calls onChange when value changes', () => {
|
|
84
|
-
const onChange = vi.fn();
|
|
85
|
-
render(
|
|
86
|
-
<NumberField
|
|
87
|
-
{...defaultProps}
|
|
88
|
-
onChange={onChange}
|
|
89
|
-
/>
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
93
|
-
fireEvent.change(input, { target: { value: '42' } });
|
|
94
|
-
|
|
95
|
-
expect(onChange).toHaveBeenCalledWith(42);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('calls onChange with min value when empty string is entered', () => {
|
|
99
|
-
const onChange = vi.fn();
|
|
100
|
-
render(
|
|
101
|
-
<NumberField
|
|
102
|
-
{...defaultProps}
|
|
103
|
-
onChange={onChange}
|
|
104
|
-
min={5}
|
|
105
|
-
/>
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
109
|
-
fireEvent.change(input, { target: { value: '' } });
|
|
110
|
-
|
|
111
|
-
expect(onChange).toHaveBeenCalledWith(5);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('parses float values correctly', () => {
|
|
115
|
-
const onChange = vi.fn();
|
|
116
|
-
render(
|
|
117
|
-
<NumberField
|
|
118
|
-
{...defaultProps}
|
|
119
|
-
onChange={onChange}
|
|
120
|
-
/>
|
|
121
|
-
);
|
|
122
|
-
|
|
123
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
124
|
-
fireEvent.change(input, { target: { value: '3.14' } });
|
|
125
|
-
|
|
126
|
-
expect(onChange).toHaveBeenCalledWith(3.14);
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it('calls onBlur when provided', () => {
|
|
130
|
-
const onBlur = vi.fn();
|
|
131
|
-
render(
|
|
132
|
-
<NumberField
|
|
133
|
-
{...defaultProps}
|
|
134
|
-
onBlur={onBlur}
|
|
135
|
-
/>
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
139
|
-
fireEvent.blur(input, { target: { value: '15' } });
|
|
140
|
-
|
|
141
|
-
expect(onBlur).toHaveBeenCalledWith('15');
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('focuses input on mount when focusOnMount is true', () => {
|
|
145
|
-
render(
|
|
146
|
-
<NumberField
|
|
147
|
-
{...defaultProps}
|
|
148
|
-
focusOnMount
|
|
149
|
-
/>
|
|
150
|
-
);
|
|
151
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
152
|
-
expect(document.activeElement).toBe(input);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
describe('Keyboard Interactions', () => {
|
|
157
|
-
it('increases value by 9 when Shift+ArrowUp is pressed', () => {
|
|
158
|
-
const onChange = vi.fn();
|
|
159
|
-
render(
|
|
160
|
-
<NumberField
|
|
161
|
-
{...defaultProps}
|
|
162
|
-
value={10}
|
|
163
|
-
onChange={onChange}
|
|
164
|
-
/>
|
|
165
|
-
);
|
|
166
|
-
|
|
167
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
168
|
-
fireEvent.keyDown(input, {
|
|
169
|
-
code: 'ArrowUp',
|
|
170
|
-
shiftKey: true
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
expect(onChange).toHaveBeenCalledWith(19);
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('decreases value by 9 when Shift+ArrowDown is pressed', () => {
|
|
177
|
-
const onChange = vi.fn();
|
|
178
|
-
render(
|
|
179
|
-
<NumberField
|
|
180
|
-
{...defaultProps}
|
|
181
|
-
value={20}
|
|
182
|
-
onChange={onChange}
|
|
183
|
-
/>
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
187
|
-
fireEvent.keyDown(input, {
|
|
188
|
-
code: 'ArrowDown',
|
|
189
|
-
shiftKey: true
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
expect(onChange).toHaveBeenCalledWith(11);
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it('does not call onChange when value would exceed max limit', () => {
|
|
196
|
-
const onChange = vi.fn();
|
|
197
|
-
render(
|
|
198
|
-
<NumberField
|
|
199
|
-
{...defaultProps}
|
|
200
|
-
value={95}
|
|
201
|
-
max={100}
|
|
202
|
-
onChange={onChange}
|
|
203
|
-
/>
|
|
204
|
-
);
|
|
205
|
-
|
|
206
|
-
const input = screen.getByRole('spinbutton');
|
|
207
|
-
fireEvent.keyDown(input, {
|
|
208
|
-
code: 'ArrowUp',
|
|
209
|
-
shiftKey: true
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it('sets error state when value would go below min limit', () => {
|
|
216
|
-
const onChange = vi.fn();
|
|
217
|
-
render(
|
|
218
|
-
<NumberField
|
|
219
|
-
{...defaultProps}
|
|
220
|
-
value={5}
|
|
221
|
-
min={0}
|
|
222
|
-
onChange={onChange}
|
|
223
|
-
/>
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
const input = screen.getByRole('spinbutton');
|
|
227
|
-
fireEvent.keyDown(input, {
|
|
228
|
-
code: 'ArrowDown',
|
|
229
|
-
shiftKey: true
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
// The component should set error state instead of calling onChange
|
|
233
|
-
const { container } = render(
|
|
234
|
-
<NumberField
|
|
235
|
-
{...defaultProps}
|
|
236
|
-
value={-5}
|
|
237
|
-
min={0}
|
|
238
|
-
/>
|
|
239
|
-
);
|
|
240
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
241
|
-
expect(formField).toBeDefined();
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
describe('Validation', () => {
|
|
246
|
-
it('shows error state when value is below minimum', () => {
|
|
247
|
-
const { container } = render(
|
|
248
|
-
<NumberField
|
|
249
|
-
{...defaultProps}
|
|
250
|
-
value={5}
|
|
251
|
-
min={10}
|
|
252
|
-
/>
|
|
253
|
-
);
|
|
254
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
255
|
-
expect(formField).toBeDefined();
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
it('shows error state when value is above maximum', () => {
|
|
259
|
-
const { container } = render(
|
|
260
|
-
<NumberField
|
|
261
|
-
{...defaultProps}
|
|
262
|
-
value={150}
|
|
263
|
-
max={100}
|
|
264
|
-
/>
|
|
265
|
-
);
|
|
266
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
267
|
-
expect(formField).toBeDefined();
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
it('shows error state for min constraint', () => {
|
|
271
|
-
const { container } = render(
|
|
272
|
-
<NumberField
|
|
273
|
-
{...defaultProps}
|
|
274
|
-
value={5}
|
|
275
|
-
min={10}
|
|
276
|
-
/>
|
|
277
|
-
);
|
|
278
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
279
|
-
expect(formField).toBeDefined();
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
it('shows error state for max constraint', () => {
|
|
283
|
-
const { container } = render(
|
|
284
|
-
<NumberField
|
|
285
|
-
{...defaultProps}
|
|
286
|
-
value={150}
|
|
287
|
-
max={100}
|
|
288
|
-
/>
|
|
289
|
-
);
|
|
290
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
291
|
-
expect(formField).toBeDefined();
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
it('shows error state for min and max constraints', () => {
|
|
295
|
-
const { container } = render(
|
|
296
|
-
<NumberField
|
|
297
|
-
{...defaultProps}
|
|
298
|
-
value={150}
|
|
299
|
-
min={10}
|
|
300
|
-
max={100}
|
|
301
|
-
/>
|
|
302
|
-
);
|
|
303
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
304
|
-
expect(formField).toBeDefined();
|
|
305
|
-
});
|
|
306
|
-
|
|
307
|
-
it('does not show error state when value is valid', () => {
|
|
308
|
-
const { container } = render(
|
|
309
|
-
<NumberField
|
|
310
|
-
{...defaultProps}
|
|
311
|
-
value={50}
|
|
312
|
-
min={10}
|
|
313
|
-
max={100}
|
|
314
|
-
/>
|
|
315
|
-
);
|
|
316
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
317
|
-
expect(formField).toBeNull();
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
describe('Component Updates', () => {
|
|
322
|
-
it('updates internal state when props.value changes', () => {
|
|
323
|
-
const { rerender } = render(
|
|
324
|
-
<NumberField
|
|
325
|
-
{...defaultProps}
|
|
326
|
-
value={10}
|
|
327
|
-
/>
|
|
328
|
-
);
|
|
329
|
-
|
|
330
|
-
rerender(
|
|
331
|
-
<NumberField
|
|
332
|
-
{...defaultProps}
|
|
333
|
-
value={20}
|
|
334
|
-
/>
|
|
335
|
-
);
|
|
336
|
-
|
|
337
|
-
const input: HTMLInputElement = screen.getByRole('spinbutton');
|
|
338
|
-
expect(input.value).toBe('20');
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
it('validates value when props change', () => {
|
|
342
|
-
const { container, rerender } = render(
|
|
343
|
-
<NumberField
|
|
344
|
-
{...defaultProps}
|
|
345
|
-
value={50}
|
|
346
|
-
/>
|
|
347
|
-
);
|
|
348
|
-
|
|
349
|
-
rerender(
|
|
350
|
-
<NumberField
|
|
351
|
-
{...defaultProps}
|
|
352
|
-
value={150}
|
|
353
|
-
max={100}
|
|
354
|
-
/>
|
|
355
|
-
);
|
|
356
|
-
|
|
357
|
-
const formField = container.querySelector('.number-field.invalid');
|
|
358
|
-
expect(formField).toBeDefined();
|
|
359
|
-
});
|
|
360
|
-
});
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
describe('validateNumInput utility', () => {
|
|
364
|
-
it('returns true for valid values within range', () => {
|
|
365
|
-
expect(validateNumInput(50, 0, 100)).toBe(true);
|
|
366
|
-
expect(validateNumInput(0, 0, 100)).toBe(true);
|
|
367
|
-
expect(validateNumInput(100, 0, 100)).toBe(true);
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
it('returns false for values below minimum', () => {
|
|
371
|
-
expect(validateNumInput(-5, 0, 100)).toBe(false);
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
it('returns false for values above maximum', () => {
|
|
375
|
-
expect(validateNumInput(150, 0, 100)).toBe(false);
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
it('handles undefined min/max values', () => {
|
|
379
|
-
expect(validateNumInput(50, undefined, 100)).toBe(true);
|
|
380
|
-
expect(validateNumInput(50, 0, undefined)).toBe(true);
|
|
381
|
-
expect(validateNumInput(50, undefined, undefined)).toBe(true);
|
|
382
|
-
});
|
|
383
|
-
});
|