notification.test.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. import { Notification, Button } from '../../index';
  2. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  3. import NotificationItem from '../notice';
  4. import { IconToutiaoLogo } from '@douyinfe/semi-icons';
  5. describe('Notification', () => {
  6. it('title&content、zIndex', () => {
  7. Notification.open({
  8. title: 'Hi, Bytedance',
  9. content: 'ies dance dance dance',
  10. duration: 1,
  11. zIndex: 2333,
  12. });
  13. const notificationWrapper = document.querySelector(`.${BASE_CLASS_PREFIX}-notification-wrapper`);
  14. expect(
  15. notificationWrapper
  16. .style.zIndex
  17. ).toEqual("2333");
  18. const notificationInner = document.querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-content-wrapper`);
  19. expect(
  20. notificationInner
  21. .childElementCount
  22. ).toEqual(2);
  23. expect(
  24. notificationInner
  25. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-title`)
  26. .textContent
  27. ).toEqual('Hi, Bytedance');
  28. expect(
  29. notificationInner
  30. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-content`)
  31. .textContent
  32. ).toEqual('ies dance dance dance');
  33. });
  34. it('duration', () => {
  35. Notification.destroyAll();
  36. Notification.open({
  37. title: 'Hi, Bytedance',
  38. content: 'ies dance dance dance',
  39. duration: 1,
  40. })
  41. const notificationInner1 = document.querySelector(`.${BASE_CLASS_PREFIX}-notification-list`);
  42. expect(
  43. notificationInner1
  44. .childElementCount
  45. ).toEqual(1);
  46. setTimeout(() => {
  47. const notificationInner2 = document.querySelector(`.${BASE_CLASS_PREFIX}-notification-list`);
  48. expect(
  49. notificationInner2
  50. .childElementCount
  51. ).toEqual(0);
  52. }, 1000);
  53. });
  54. it('position-top', () => {
  55. Notification.destroyAll();
  56. Notification.open({
  57. title: 'top demo',
  58. content: 'ies dance dance dance',
  59. duration: 1,
  60. position: 'top'
  61. });
  62. expect(
  63. document
  64. .querySelector(`.${BASE_CLASS_PREFIX}-notification-list[placement=top] .${BASE_CLASS_PREFIX}-notification-notice-content-wrapper .${BASE_CLASS_PREFIX}-notification-notice-title`)
  65. .textContent
  66. ).toEqual('top demo');
  67. expect(
  68. document
  69. .querySelector(`.${BASE_CLASS_PREFIX}-notification-list[placement=bottom] .${BASE_CLASS_PREFIX}-notification-notice-content-wrapper .${BASE_CLASS_PREFIX}-notification-notice-title`)
  70. ).toEqual(null);
  71. });
  72. it('position-topLeft', () => {
  73. Notification.destroyAll();
  74. Notification.open({
  75. title: 'topLeft demo',
  76. content: 'ies dance dance dance',
  77. duration: 1,
  78. position: 'topLeft'
  79. });
  80. expect(
  81. document
  82. .querySelector(`.${BASE_CLASS_PREFIX}-notification-list[placement=topLeft] .${BASE_CLASS_PREFIX}-notification-notice-content-wrapper .${BASE_CLASS_PREFIX}-notification-notice-title`)
  83. .textContent
  84. ).toEqual('topLeft demo');
  85. });
  86. it('position-bottomLeft', () => {
  87. Notification.destroyAll();
  88. Notification.open({
  89. title: 'bottomLeft demo',
  90. content: 'ies dance dance dance',
  91. duration: 1,
  92. position: 'bottomLeft'
  93. });
  94. expect(
  95. document
  96. .querySelector(`.${BASE_CLASS_PREFIX}-notification-list[placement=bottomLeft] .${BASE_CLASS_PREFIX}-notification-notice-content-wrapper .${BASE_CLASS_PREFIX}-notification-notice-title`)
  97. .textContent
  98. ).toEqual('bottomLeft demo');
  99. });
  100. it('position-bottomRight', () => {
  101. Notification.destroyAll();
  102. Notification.open({
  103. title: 'bottomRight demo',
  104. content: 'ies dance dance dance',
  105. duration: 1,
  106. position: 'bottomRight'
  107. });
  108. expect(
  109. document
  110. .querySelector(`.${BASE_CLASS_PREFIX}-notification-list[placement=bottomRight] .${BASE_CLASS_PREFIX}-notification-notice-content-wrapper .${BASE_CLASS_PREFIX}-notification-notice-title`)
  111. .textContent
  112. ).toEqual('bottomRight demo');
  113. });
  114. it('success', () => {
  115. Notification.destroyAll();
  116. Notification.success({
  117. title: 'success demo',
  118. duration: 1,
  119. });
  120. expect(
  121. document
  122. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-success .${BASE_CLASS_PREFIX}-notification-notice-title`)
  123. .textContent
  124. ).toEqual('success demo');
  125. });
  126. it('info', () => {
  127. Notification.destroyAll();
  128. Notification.info({
  129. title: 'info demo',
  130. duration: 1,
  131. });
  132. expect(
  133. document
  134. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-info .${BASE_CLASS_PREFIX}-notification-notice-title`)
  135. .textContent
  136. ).toEqual('info demo');
  137. });
  138. it('warning', () => {
  139. Notification.destroyAll();
  140. Notification.warning({
  141. title: 'warning demo',
  142. duration: 1,
  143. });
  144. expect(
  145. document
  146. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-warning .${BASE_CLASS_PREFIX}-notification-notice-title`)
  147. .textContent
  148. ).toEqual('warning demo');
  149. });
  150. it('error', () => {
  151. Notification.destroyAll();
  152. Notification.error({
  153. title: 'error demo',
  154. duration: 1,
  155. });
  156. expect(
  157. document
  158. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-error .${BASE_CLASS_PREFIX}-notification-notice-title`)
  159. .textContent
  160. ).toEqual('error demo');
  161. });
  162. it('theme error-light', () => {
  163. Notification.destroyAll();
  164. Notification.error({
  165. title: 'light error demo',
  166. duration: 1,
  167. theme: 'light'
  168. });
  169. expect(
  170. document
  171. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-light.${BASE_CLASS_PREFIX}-notification-notice-error .${BASE_CLASS_PREFIX}-notification-notice-title`)
  172. .textContent
  173. ).toEqual('light error demo');
  174. });
  175. it('theme info-light', () => {
  176. Notification.destroyAll();
  177. Notification.info({
  178. title: 'light info demo',
  179. duration: 1,
  180. theme: 'light'
  181. });
  182. expect(
  183. document
  184. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-light.${BASE_CLASS_PREFIX}-notification-notice-info .${BASE_CLASS_PREFIX}-notification-notice-title`)
  185. .textContent
  186. ).toEqual('light info demo');
  187. });
  188. it('theme warning-light', () => {
  189. Notification.destroyAll();
  190. Notification.warning({
  191. title: 'light warning demo',
  192. duration: 1,
  193. theme: 'light'
  194. });
  195. expect(
  196. document
  197. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-light.${BASE_CLASS_PREFIX}-notification-notice-warning .${BASE_CLASS_PREFIX}-notification-notice-title`)
  198. .textContent
  199. ).toEqual('light warning demo');
  200. });
  201. it('theme success-light', () => {
  202. Notification.destroyAll();
  203. Notification.success({
  204. title: 'light success demo',
  205. duration: 1,
  206. theme: 'light'
  207. });
  208. expect(
  209. document
  210. .querySelector(`.${BASE_CLASS_PREFIX}-notification-notice-light.${BASE_CLASS_PREFIX}-notification-notice-success .${BASE_CLASS_PREFIX}-notification-notice-title`)
  211. .textContent
  212. ).toEqual('light success demo');
  213. });
  214. it('onClick', () => {
  215. Notification.destroyAll();
  216. const spyOnClick = sinon.spy(() => {});
  217. const opts = {
  218. onClick: spyOnClick,
  219. content: 'content',
  220. title: 'title',
  221. };
  222. const notification = mount(<NotificationItem {...opts} />);
  223. notification.simulate('click', {});
  224. expect(spyOnClick.calledOnce).toEqual(true);
  225. })
  226. it('onClose', () => {
  227. Notification.destroyAll();
  228. const spyOnClose = sinon.spy(() => {});
  229. const opts = {
  230. onClose: spyOnClose,
  231. content: 'content',
  232. title: 'title',
  233. };
  234. const notification = mount(<NotificationItem {...opts} />);
  235. const closeBtn = notification.find(`.${BASE_CLASS_PREFIX}-notification-notice-inner .${BASE_CLASS_PREFIX}-button`);
  236. closeBtn.simulate('click', {});
  237. expect(spyOnClose.calledOnce).toEqual(true);
  238. });
  239. it('onCloseClick', () => {
  240. Notification.destroyAll();
  241. const spyOnCloseClick = sinon.spy(() => {});
  242. const opts = {
  243. onCloseClick: spyOnCloseClick,
  244. content: 'content',
  245. title: 'title',
  246. };
  247. const notification = mount(<NotificationItem {...opts} />);
  248. const closeBtn = notification.find(`.${BASE_CLASS_PREFIX}-notification-notice-inner .${BASE_CLASS_PREFIX}-button`);
  249. closeBtn.simulate('click', {});
  250. expect(spyOnCloseClick.calledOnce).toEqual(true);
  251. });
  252. it('showClose', () => {
  253. Notification.destroyAll();
  254. const spyOnCloseClick = sinon.spy(() => {});
  255. const opts = {
  256. onCloseClick: spyOnCloseClick,
  257. content: 'content',
  258. title: 'title',
  259. showClose: false
  260. };
  261. const notification = mount(<NotificationItem {...opts} />);
  262. expect(
  263. notification
  264. .exists(`.${BASE_CLASS_PREFIX}-notification-notice-inner .${BASE_CLASS_PREFIX}-button`)
  265. )
  266. .toEqual(false);
  267. });
  268. it('icon', () => {
  269. Notification.destroyAll();
  270. const opts = {
  271. content: 'content',
  272. title: 'title',
  273. icon: <IconToutiaoLogo style={{ color: 'red' }} size="large" />,
  274. };
  275. const notification = mount(<NotificationItem {...opts} />);
  276. expect(
  277. notification
  278. .exists(`.${BASE_CLASS_PREFIX}-notification-notice .${BASE_CLASS_PREFIX}-notification-notice-icon .${BASE_CLASS_PREFIX}-icon-toutiao_logo`)
  279. )
  280. .toEqual(true);
  281. });
  282. it('config', () => {
  283. Notification.destroyAll();
  284. const opts = {
  285. content: 'content',
  286. title: 'title',
  287. };
  288. Notification.config({
  289. left:'300px',
  290. top:'400px'
  291. })
  292. Notification.info({ ...opts, position: 'top' });
  293. const notificationList = document.querySelector(`.${BASE_CLASS_PREFIX}-notification-list`);
  294. expect(
  295. notificationList
  296. .style.left
  297. ).toEqual("300px");
  298. expect(
  299. notificationList
  300. .style.top
  301. ).toEqual("400px");
  302. });
  303. });