@zohodesk/dot
Version:
In this Library, we Provide Some Basic Components to Build Your Application
137 lines • 4.27 kB
JavaScript
import React from 'react';
import { render } from '@testing-library/react';
import '@testing-library/jest-dom';
import Subject from "../Subject";
describe('Subject', () => {
test('rendering the defult props', () => {
const {
asFragment
} = render( /*#__PURE__*/React.createElement(Subject, null));
expect(asFragment()).toMatchSnapshot();
});
const whiteSpace = ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'];
test.each(whiteSpace)('rendering the whiteSpace of -%s', whiteSpace => {
const {
asFragment
} = render( /*#__PURE__*/React.createElement(Subject, {
whiteSpace: whiteSpace
}));
expect(asFragment()).toMatchSnapshot();
});
test.each(whiteSpace)('rendering the whiteSpace of -%s', whiteSpace => {
const {
asFragment
} = render( /*#__PURE__*/React.createElement(Subject, {
whiteSpace: whiteSpace,
isLink: true
}));
expect(asFragment()).toMatchSnapshot();
});
test('renders data attributes on link wrapper', () => {
const dataId = 'subject-id';
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
isLink: true,
dataId: dataId
}));
expect(container).toMatchSnapshot();
const anchor = container.querySelector('a');
expect(anchor.getAttribute('data-id')).toBe(dataId);
expect(anchor.getAttribute('data-test-id')).toBe(dataId);
});
test('renders text content', () => {
const text = 'Test Subject';
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
text: text
}));
expect(container.textContent).toContain(text);
});
test('renders with custom className', () => {
const customClass = 'custom-subject';
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
className: customClass
}));
expect(container.querySelector(`.${customClass}`)).not.toBeNull();
});
test('renders dotted text when isDotted is true', () => {
const {
asFragment
} = render( /*#__PURE__*/React.createElement(Subject, {
text: "Test",
isDotted: true
}));
expect(asFragment()).toMatchSnapshot();
});
test('renders children when provided', () => {
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
isLink: true
}, /*#__PURE__*/React.createElement("span", null, "Custom Child")));
expect(container.querySelector('span').textContent).toBe('Custom Child');
});
test('applies fontWeight prop', () => {
const {
asFragment
} = render( /*#__PURE__*/React.createElement(Subject, {
text: "Test",
fontWeight: "bold"
}));
expect(asFragment()).toMatchSnapshot();
});
test('renders with href when isLink is true', () => {
const href = 'https://example.com';
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
isLink: true,
href: href
}));
expect(container.querySelector('a').getAttribute('href')).toBe(href);
});
test('calls onClick when link is clicked', () => {
const handleClick = jest.fn();
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
isLink: true,
onClick: handleClick
}));
container.querySelector('a').click();
expect(handleClick).toHaveBeenCalled();
});
test('renders as non-link when isLink is false', () => {
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
text: "Test",
isLink: false
}));
expect(container.querySelector('a')).toBeNull();
});
test('applies custom className to non-link element', () => {
const customClass = 'test-class';
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
text: "Test",
className: customClass,
isLink: false
}));
expect(container.querySelector(`.${customClass}`)).not.toBeNull();
});
test('renders with target prop on link', () => {
const {
container
} = render( /*#__PURE__*/React.createElement(Subject, {
isLink: true,
target: "_blank"
}));
expect(container.querySelector('a').getAttribute('target')).toBe('_blank');
});
});