diff --git a/src/components/tag/tag.test.ts b/src/components/tag/tag.test.ts new file mode 100644 index 00000000..67bb6df2 --- /dev/null +++ b/src/components/tag/tag.test.ts @@ -0,0 +1,64 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import sinon from 'sinon'; +import type SlTag from './tag'; + +describe('', () => { + it('should render default tag', async () => { + const el = await fixture(html` Test `); + + const base = el.shadowRoot!.querySelector('[part="base"]')!; + + expect(el.getAttribute('size')).to.equal('medium'); + expect(base.getAttribute('class')).to.equal(' tag tag--neutral tag--medium '); + }); + + it('should set variant by attribute', async () => { + const el = await fixture(html` Test `); + + const base = el.shadowRoot!.querySelector('[part="base"]')!; + + expect(base.getAttribute('class')).to.equal(' tag tag--danger tag--medium '); + }); + + it('should set size by attribute', async () => { + const el = await fixture(html` Test `); + + const base = el.shadowRoot!.querySelector('[part="base"]')!; + + expect(base.getAttribute('class')).to.equal(' tag tag--neutral tag--large '); + }); + + it('should set pill-attribute by attribute', async () => { + const el = await fixture(html` Test `); + + const base = el.shadowRoot!.querySelector('[part="base"]')!; + + expect(base.getAttribute('class')).to.equal(' tag tag--neutral tag--medium tag--pill '); + }); + + it('should set removable by attribute', async () => { + const el = await fixture(html` Test `); + + const base = el.shadowRoot!.querySelector('[part="base"]')!; + const removeButton = el.shadowRoot!.querySelector('[part="remove-button"]'); + + expect(el.removable).to.equal(true); + expect(base.getAttribute('class')).to.equal(' tag tag--neutral tag--medium tag--removable '); + expect(removeButton).not.to.be.null; + }); + + describe('removable', () => { + it('should emit remove event when remove button clicked', async () => { + const el = await fixture(html` Test `); + + const removeButton = el.shadowRoot!.querySelector('[part="remove-button"]')!; + const spy = sinon.spy(); + + el.addEventListener('sl-remove', spy, { once: true }); + + removeButton.click(); + + expect(spy.called).to.equal(true); + }); + }); +});