From 923caa66de8b2844d0a1e3939aa612938c70dfe0 Mon Sep 17 00:00:00 2001 From: maximiliano forlenza Date: Tue, 5 Aug 2025 06:36:25 -0300 Subject: [PATCH] feat(buttonWithOptions): add component with stories and tests - Add ButtonWithOptions component with dropdown menu functionality - Create comprehensive Storybook stories with various examples - Add unit tests for the component - Update Table story to demonstrate ButtonWithOptions integration - Fix ReactDOM import casing issue - Center icons vertically in menu items - Add colored icons example in stories - Bump version to 7.2.1 --- package.json | 2 +- .../components/ButtonWithOptions.test.js | 41 +++++++ src/__tests__/components/ErrorMessage.test.js | 4 +- src/__tests__/components/Footer.test.js | 4 +- src/__tests__/components/Header.test.js | 4 +- src/__tests__/components/Loading.test.js | 4 +- src/__tests__/components/Login.test.js | 4 +- src/__tests__/components/Modal.test.js | 4 +- src/__tests__/components/Pagination.test.js | 6 +- src/__tests__/components/Select.test.js | 28 ++--- src/__tests__/components/Snackbar.test.js | 10 +- src/__tests__/components/Table.test.js | 4 +- src/__tests__/components/Typeahead.test.js | 20 ++-- src/assets/index.js | 6 +- src/components/ButtonWithOptions.jsx | 107 ++++++++++++++++++ src/components/Header/MobileMenu.jsx | 38 +++---- src/components/Header/UserMenu.jsx | 4 +- src/components/Icons/InfoIcon.jsx | 2 +- src/components/Login/LoginForm.jsx | 59 +++++----- src/components/Login/index.jsx | 2 +- src/components/index.js | 3 +- src/hooks/index.js | 2 +- src/hooks/useScreenSize.js | 6 +- src/index.js | 2 +- src/stories/ButtonWithOptions.stories.js | 84 ++++++++++++++ src/stories/Footer.stories.js | 2 +- src/stories/Select.stories.js | 11 +- src/stories/Table.stories.js | 39 +++++++ src/stories/Typeahead.stories.js | 5 +- src/utils/index.js | 2 +- 30 files changed, 386 insertions(+), 123 deletions(-) create mode 100644 src/__tests__/components/ButtonWithOptions.test.js create mode 100644 src/components/ButtonWithOptions.jsx create mode 100644 src/stories/ButtonWithOptions.stories.js diff --git a/package.json b/package.json index 6790e1d..d38d514 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@indec/react-commons", - "version": "7.2.0", + "version": "7.2.1", "description": "Common reactjs components for apps", "private": false, "main": "index.js", diff --git a/src/__tests__/components/ButtonWithOptions.test.js b/src/__tests__/components/ButtonWithOptions.test.js new file mode 100644 index 0000000..377b2b4 --- /dev/null +++ b/src/__tests__/components/ButtonWithOptions.test.js @@ -0,0 +1,41 @@ +import {getByTestId, queryByText} from '@testing-library/react'; + +import ButtonWithOptions from '../../components/ButtonWithOptions.jsx'; + +describe('', () => { + let props; + const getComponent = () => render(ButtonWithOptions, props); + beforeEach(() => { + props = { + options: [ + { + id: 1, + label: 'Option 1', + onClick: jest.fn() + }, + { + id: 2, + label: 'Option 1', + onClick: jest.fn() + }, + { + id: 3, + label: 'Option 3', + onClick: jest.fn() + } + ] + }; + }); + + it('should a render a button to show options', () => { + const {container} = getComponent(); + expect(getByTestId(container, 'fade-button')).toBeInTheDocument(); + }); + + it('should not display `props.options`', () => { + const {container} = getComponent(); + props.options.forEach(option => { + expect(queryByText(container, option.label)).toBeNull(); + }); + }); +}); diff --git a/src/__tests__/components/ErrorMessage.test.js b/src/__tests__/components/ErrorMessage.test.js index 8442ae6..5d60028 100644 --- a/src/__tests__/components/ErrorMessage.test.js +++ b/src/__tests__/components/ErrorMessage.test.js @@ -5,7 +5,7 @@ import ErrorMessage from '../../components/ErrorMessage.jsx'; describe('', () => { let props; const getComponent = () => render(ErrorMessage, props); - + beforeEach(() => { props = { error: 'This is an error message' @@ -41,4 +41,4 @@ describe('', () => { expect(errorElement.textContent).toBe(''); }); }); -}); \ No newline at end of file +}); diff --git a/src/__tests__/components/Footer.test.js b/src/__tests__/components/Footer.test.js index c683e6d..cddbd55 100644 --- a/src/__tests__/components/Footer.test.js +++ b/src/__tests__/components/Footer.test.js @@ -5,7 +5,7 @@ import Footer from '../../components/Footer.jsx'; describe('