Skip to content

Commit d1448e0

Browse files
virgofxeddywashere
authored andcommitted
fix(DropdownToggle): ensures color attribute is not leaked
* fix(DropdownToggle): Fixes #461 (reverting bad PR#402) which ensures color attribute is NOT leaked * fix(DropdownToggle): Adding tests for color attribute and fixing logic to ensure that the color attribute is used for Buttons only.
1 parent c40b89f commit d1448e0

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

src/DropdownToggle.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class DropdownToggle extends React.Component {
5555
}
5656

5757
render() {
58-
const { className, cssModule, caret, split, nav, tag, ...props } = this.props;
58+
const { className, color, cssModule, caret, split, nav, tag, ...props } = this.props;
5959
const ariaLabel = props['aria-label'] || 'Toggle Dropdown';
6060
const classes = mapToCssModules(classNames(
6161
className,
@@ -75,6 +75,7 @@ class DropdownToggle extends React.Component {
7575
props.href = '#';
7676
} else if (!tag) {
7777
Tag = Button;
78+
props.color = color;
7879
} else {
7980
Tag = tag;
8081
}

src/__tests__/DropdownToggle.spec.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,68 @@ describe('DropdownToggle', () => {
8585
expect(wrapper.find('[data-toggle="dropdown"]').hasClass('dropdown-toggle')).toBe(true);
8686
});
8787

88+
describe('color', () => {
89+
it('should render the dropdown as a BUTTON element with default color secondary', () => {
90+
const wrapper = mount(
91+
<DropdownToggle />,
92+
{
93+
context: {
94+
isOpen: isOpen,
95+
toggle: toggle
96+
}
97+
}
98+
);
99+
100+
expect(wrapper.find('button').length).toBe(1);
101+
expect(wrapper.find('button').hasClass('btn-secondary')).toBe(true);
102+
});
103+
104+
it('should render the dropdown as a BUTTON element with explicit color success', () => {
105+
const wrapper = mount(
106+
<DropdownToggle color="success" />,
107+
{
108+
context: {
109+
isOpen: isOpen,
110+
toggle: toggle
111+
}
112+
}
113+
);
114+
115+
expect(wrapper.find('button').length).toBe(1);
116+
expect(wrapper.find('button').hasClass('btn-success')).toBe(true);
117+
});
118+
119+
it('should render the dropdown as an A element with no color attribute', () => {
120+
const wrapper = mount(
121+
<DropdownToggle tag="a" />,
122+
{
123+
context: {
124+
isOpen: isOpen,
125+
toggle: toggle
126+
}
127+
}
128+
);
129+
130+
expect(wrapper.find('a').length).toBe(1);
131+
expect(wrapper.find('a[color]').length).toBe(0);
132+
});
133+
134+
it('should render the dropdown as a DIV element with no color attribute', () => {
135+
const wrapper = mount(
136+
<DropdownToggle tag="div" color="success" />,
137+
{
138+
context: {
139+
isOpen: isOpen,
140+
toggle: toggle
141+
}
142+
}
143+
);
144+
145+
expect(wrapper.find('div').length).toBe(1);
146+
expect(wrapper.find('div[color]').length).toBe(0);
147+
});
148+
});
149+
88150
it('should render a split', () => {
89151
const wrapper = mount(
90152
<DropdownToggle split>Ello world</DropdownToggle>,

0 commit comments

Comments
 (0)