avatar.test.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. import React from 'react';
  2. import { mount } from 'enzyme';
  3. import sinon from 'sinon';
  4. import Avatar from '../index';
  5. import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
  6. const avartarPrefix = `${BASE_CLASS_PREFIX}-avatar`
  7. describe('Avatar', () => {
  8. it('size', () => {
  9. const element = (
  10. <div>
  11. <Avatar size="extra-extra-small" style={{ margin: 4 }}>
  12. U
  13. </Avatar>
  14. <Avatar size="extra-small" style={{ margin: 4 }}>
  15. U
  16. </Avatar>
  17. <Avatar size="small" style={{ margin: 4 }}>
  18. U
  19. </Avatar>
  20. <Avatar size="default" style={{ margin: 4 }}>
  21. U
  22. </Avatar>
  23. <Avatar style={{ margin: 4 }}>U</Avatar>
  24. <Avatar size="large" style={{ margin: 4 }}>
  25. U
  26. </Avatar>
  27. <Avatar size="extra-large" style={{ margin: 4 }}>
  28. U
  29. </Avatar>
  30. </div>
  31. );
  32. const wrapper = mount(element);
  33. expect(
  34. wrapper
  35. .find(`.${avartarPrefix}`)
  36. .at(1)
  37. .find(`.${avartarPrefix}-extra-extra-small`)
  38. .length
  39. ).toEqual(0);
  40. expect(
  41. wrapper
  42. .find(`.${avartarPrefix}`)
  43. .at(0)
  44. .find(`.${avartarPrefix}-extra-extra-small`)
  45. .length
  46. ).toEqual(1);
  47. expect(
  48. wrapper
  49. .find(`.${avartarPrefix}`)
  50. .at(1)
  51. .find(`.${avartarPrefix}-extra-small`)
  52. .length
  53. ).toEqual(1);
  54. expect(
  55. wrapper
  56. .find(`.${avartarPrefix}`)
  57. .at(2)
  58. .find(`.${avartarPrefix}-small`)
  59. .length
  60. ).toEqual(1);
  61. expect(
  62. wrapper
  63. .find(`.${avartarPrefix}`)
  64. .at(3)
  65. .find(`.${avartarPrefix}-default`)
  66. .length
  67. ).toEqual(1);
  68. expect(
  69. wrapper
  70. .find(`.${avartarPrefix}`)
  71. .at(4)
  72. .find(`.${avartarPrefix}-medium`)
  73. .length
  74. ).toEqual(1);
  75. expect(
  76. wrapper
  77. .find(`.${avartarPrefix}`)
  78. .at(5)
  79. .find(`.${avartarPrefix}-large`)
  80. .length
  81. ).toEqual(1);
  82. });
  83. it('color', () => {
  84. const element = (
  85. <div>
  86. <Avatar color="amber" style={{ margin: 4 }}>
  87. BM
  88. </Avatar>
  89. <Avatar color="blue" style={{ margin: 4 }}>
  90. TJ
  91. </Avatar>
  92. <Avatar color="cyan" style={{ margin: 4 }}>
  93. TJ
  94. </Avatar>
  95. <Avatar color="green" style={{ margin: 4 }}>
  96. TJ
  97. </Avatar>
  98. <Avatar color="grey" style={{ margin: 4 }}>
  99. TJ
  100. </Avatar>
  101. <Avatar color="indigo" style={{ margin: 4 }}>
  102. TJ
  103. </Avatar>
  104. <Avatar color="light-blue" style={{ margin: 4 }}>
  105. TJ
  106. </Avatar>
  107. <Avatar color="light-green" style={{ margin: 4 }}>
  108. TJ
  109. </Avatar>
  110. <Avatar color="lime" style={{ margin: 4 }}>
  111. TJ
  112. </Avatar>
  113. <Avatar color="orange" style={{ margin: 4 }}>
  114. TJ
  115. </Avatar>
  116. <Avatar color="pink" style={{ margin: 4 }}>
  117. TJ
  118. </Avatar>
  119. <Avatar color="purple" style={{ margin: 4 }}>
  120. TJ
  121. </Avatar>
  122. <Avatar color="red" style={{ margin: 4 }}>
  123. TJ
  124. </Avatar>
  125. <Avatar color="teal" style={{ margin: 4 }}>
  126. TJ
  127. </Avatar>
  128. <Avatar color="violet" style={{ margin: 4 }}>
  129. TJ
  130. </Avatar>
  131. <Avatar color="yellow" style={{ margin: 4 }}>
  132. TJ
  133. </Avatar>
  134. </div>
  135. );
  136. const wrapper = mount(element);
  137. expect(
  138. wrapper
  139. .find(`.${avartarPrefix}`)
  140. .at(1)
  141. .find(`.${avartarPrefix}-amber`)
  142. .length
  143. ).toEqual(0);
  144. expect(
  145. wrapper
  146. .find(`.${avartarPrefix}`)
  147. .at(0)
  148. .find(`.${avartarPrefix}-amber`)
  149. .length
  150. ).toEqual(1);
  151. expect(
  152. wrapper
  153. .find(`.${avartarPrefix}`)
  154. .at(1)
  155. .find(`.${avartarPrefix}-blue`)
  156. .length
  157. ).toEqual(1);
  158. expect(
  159. wrapper
  160. .find(`.${avartarPrefix}`)
  161. .at(2)
  162. .find(`.${avartarPrefix}-cyan`)
  163. .length
  164. ).toEqual(1);
  165. expect(
  166. wrapper
  167. .find(`.${avartarPrefix}`)
  168. .at(3)
  169. .find(`.${avartarPrefix}-green`)
  170. .length
  171. ).toEqual(1);
  172. expect(
  173. wrapper
  174. .find(`.${avartarPrefix}`)
  175. .at(4)
  176. .find(`.${avartarPrefix}-grey`)
  177. .length
  178. ).toEqual(1);
  179. expect(
  180. wrapper
  181. .find(`.${avartarPrefix}`)
  182. .at(5)
  183. .find(`.${avartarPrefix}-indigo`)
  184. .length
  185. ).toEqual(1);
  186. expect(
  187. wrapper
  188. .find(`.${avartarPrefix}`)
  189. .at(6)
  190. .find(`.${avartarPrefix}-light-blue`)
  191. .length
  192. ).toEqual(1);
  193. expect(
  194. wrapper
  195. .find(`.${avartarPrefix}`)
  196. .at(7)
  197. .find(`.${avartarPrefix}-light-green`)
  198. .length
  199. ).toEqual(1);
  200. expect(
  201. wrapper
  202. .find(`.${avartarPrefix}`)
  203. .at(8)
  204. .find(`.${avartarPrefix}-lime`)
  205. .length
  206. ).toEqual(1);
  207. expect(
  208. wrapper
  209. .find(`.${avartarPrefix}`)
  210. .at(9)
  211. .find(`.${avartarPrefix}-orange`)
  212. .length
  213. ).toEqual(1);
  214. expect(
  215. wrapper
  216. .find(`.${avartarPrefix}`)
  217. .at(10)
  218. .find(`.${avartarPrefix}-pink`)
  219. .length
  220. ).toEqual(1);
  221. expect(
  222. wrapper
  223. .find(`.${avartarPrefix}`)
  224. .at(11)
  225. .find(`.${avartarPrefix}-purple`)
  226. .length
  227. ).toEqual(1);
  228. expect(
  229. wrapper
  230. .find(`.${avartarPrefix}`)
  231. .at(12)
  232. .find(`.${avartarPrefix}-red`)
  233. .length
  234. ).toEqual(1);
  235. expect(
  236. wrapper
  237. .find(`.${avartarPrefix}`)
  238. .at(13)
  239. .find(`.${avartarPrefix}-teal`)
  240. .length
  241. ).toEqual(1);
  242. expect(
  243. wrapper
  244. .find(`.${avartarPrefix}`)
  245. .at(14)
  246. .find(`.${avartarPrefix}-violet`)
  247. .length
  248. ).toEqual(1);
  249. expect(
  250. wrapper
  251. .find(`.${avartarPrefix}`)
  252. .at(15)
  253. .find(`.${avartarPrefix}-yellow`)
  254. .length
  255. ).toEqual(1);
  256. });
  257. it('src', () => {
  258. const element = (
  259. <Avatar
  260. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/dy.png"
  261. style={{ margin: 4 }}
  262. />
  263. );
  264. const wrapper = mount(element);
  265. expect(
  266. wrapper
  267. .find('img')
  268. .at(0)
  269. .props()
  270. .src
  271. ).toEqual('https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/dy.png');
  272. });
  273. it('shape', () => {
  274. const element = (
  275. <div>
  276. <Avatar style={{ margin: 4 }}>U</Avatar>
  277. <Avatar shape="square" style={{ margin: 4 }}>
  278. U
  279. </Avatar>
  280. </div>
  281. );
  282. const wrapper = mount(element);
  283. expect(
  284. wrapper
  285. .find(`.${avartarPrefix}`)
  286. .at(1)
  287. .find(`.${avartarPrefix}-circle`)
  288. .length
  289. ).toEqual(0);
  290. expect(
  291. wrapper
  292. .find(`.${avartarPrefix}`)
  293. .at(0)
  294. .find(`.${avartarPrefix}-circle`)
  295. .length
  296. ).toEqual(1);
  297. expect(
  298. wrapper
  299. .find(`.${avartarPrefix}`)
  300. .at(1)
  301. .find(`.${avartarPrefix}-square`)
  302. .length
  303. ).toEqual(1);
  304. });
  305. it('className & style', () => {
  306. const wrapper = mount(<Avatar className='test-avatar' style={{color: 'red'}}>A</Avatar>);
  307. expect(wrapper.exists('.test-avatar')).toEqual(true);
  308. expect(wrapper.find('.test-avatar').at(0)).toHaveStyle('color', 'red');
  309. });
  310. it('onError', () => {
  311. const onError = () => {};
  312. const spyOnError = sinon.spy(onError);
  313. const avatar = mount(
  314. <Avatar
  315. onError={spyOnError}
  316. src="https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/dy.png"
  317. />
  318. );
  319. avatar
  320. .find('img')
  321. .at(0)
  322. .simulate('error');
  323. expect(spyOnError.callCount).toBe(2);
  324. })
  325. it('onClick', () => {
  326. const onClick = () => {};
  327. const spyOnClick = sinon.spy(onClick);
  328. const avatar = mount(<Avatar onClick={spyOnClick} />);
  329. avatar.simulate('click');
  330. expect(spyOnClick.calledOnce).toBe(true);
  331. })
  332. it('onMouseEnter', () => {
  333. const onMouseEnter = () => {};
  334. const spyOnMouseEnter = sinon.spy(onMouseEnter);
  335. const avatar = mount(<Avatar onMouseEnter={spyOnMouseEnter} />);
  336. avatar.simulate('mouseEnter');
  337. expect(spyOnMouseEnter.calledOnce).toBe(true);
  338. })
  339. it('onMouseLeave', () => {
  340. const onMouseLeave = () => {};
  341. const spyOnMouseLeave = sinon.spy(onMouseLeave);
  342. const avatar = mount(<Avatar onMouseLeave={spyOnMouseLeave} />);
  343. avatar.simulate('mouseLeave');
  344. expect(spyOnMouseLeave.calledOnce).toBe(true);
  345. })
  346. it('hoverMask', () => {
  347. const avatar = mount(<Avatar hoverMask='asd' />);
  348. expect(avatar.simulate('mouseEnter', {}).exists(`.${avartarPrefix}-hover`)).toEqual(true);
  349. })
  350. });