datePicker.spec.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. // datePicker.spec.js created with Cypress
  2. //
  3. // Start writing your Cypress tests below!
  4. // If you're unfamiliar with how Cypress works,
  5. // check out the link below and learn how to write your first test:
  6. // https://on.cypress.io/writing-first-test
  7. /**
  8. * why use `.then`?
  9. * @see https://docs.cypress.io/guides/core-concepts/variables-and-aliases#Return-Values
  10. */
  11. describe('DatePicker', () => {
  12. it('dateTime needConfirm cancel', () => {
  13. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm&args=&viewMode=story');
  14. cy.get('[data-cy=1] .semi-input-wrapper').click();
  15. cy.get('.semi-datepicker-footer > .semi-button-borderless')
  16. .then(($btn) => {
  17. console.log('then');
  18. $btn.trigger('click');
  19. });
  20. cy.get('body').find('.semi-popover .semi-datepicker').should('have.length', 0);
  21. });
  22. it('dateTime needConfirm confirm', () => {
  23. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm&args=&viewMode=story');
  24. cy.get('[data-cy=1] .semi-input-wrapper').click();
  25. cy.get('.semi-datepicker-day').contains('15')
  26. .then($day => {
  27. $day.trigger('click');
  28. });
  29. cy.get('.semi-datepicker-footer > button:nth-child(2)').then($btn => {
  30. $btn.trigger('click');
  31. });
  32. cy.get('body').find('.semi-popover .semi-datepicker').should('have.length', 0);
  33. cy.get('[data-cy=1] .semi-input').should('have.value', '2021-12-15 10:37:13');
  34. });
  35. it('dateTime needConfirm select + cancel', () => {
  36. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm&args=&viewMode=story');
  37. cy.get('[data-cy=1] .semi-input-wrapper').click();
  38. cy.get('.semi-datepicker-day').contains('15')
  39. .then($day => {
  40. $day.trigger('click');
  41. });
  42. cy.get('.semi-datepicker-footer > button:nth-child(1)')
  43. .then($btn => {
  44. $btn.trigger('click');
  45. });
  46. cy.get('body').find('.semi-popover .semi-datepicker').should('have.length', 0);
  47. cy.get('[data-cy=1] .semi-input').should('have.value', '2021-12-27 10:37:13');
  48. });
  49. it('dateTimeRange needConfirm cancel', () => {
  50. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm&args=&viewMode=story');
  51. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-start .semi-input-wrapper').click();
  52. cy.get('.semi-datepicker-footer > .semi-button-borderless')
  53. .then($btn => {
  54. $btn.trigger('click');
  55. });
  56. cy.get('body').find('.semi-popover .semi-datepicker').should('have.length', 0);
  57. });
  58. it('dateTimeRange needConfirm select+cancel', () => {
  59. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm&args=&viewMode=story');
  60. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-start .semi-input-wrapper').click();
  61. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('15')
  62. .then($day => {
  63. $day.trigger('click');
  64. });
  65. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day').contains('20')
  66. .then($day => {
  67. $day.trigger('click');
  68. });
  69. cy.get('.semi-datepicker-footer > button:nth-child(1)').then($cancelBtn => {
  70. $cancelBtn.trigger('click');
  71. });
  72. cy.get('body').find('.semi-popover .semi-datepicker').should('have.length', 0);
  73. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-start .semi-input').should('have.value', '2021-12-27 10:37:13');
  74. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-end .semi-input').should('have.value', '2022-01-28 10:37:13');
  75. });
  76. it('dateTimeRange needConfirm confirm', () => {
  77. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm&args=&viewMode=story');
  78. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-start .semi-input-wrapper').click();
  79. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('15')
  80. .then($day => {
  81. $day.trigger('click');
  82. });
  83. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day').contains('20')
  84. .then($day => {
  85. $day.trigger('click');
  86. });
  87. cy.get('.semi-datepicker-footer > button:nth-child(2)')
  88. .then($confirmBtn => {
  89. $confirmBtn.trigger('click');
  90. });
  91. cy.get('body').find('.semi-popover .semi-datepicker').should('have.length', 0);
  92. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-start .semi-input').should('have.value', '2021-12-15 10:37:13');
  93. cy.get('[data-cy=3] .semi-datepicker-range-input-wrapper-end .semi-input').should('have.value', '2022-01-20 10:37:13');
  94. });
  95. /**
  96. * 测试 open 受控时,点击面板内按钮关闭面板后,输入框应该清除 focus 状态
  97. */
  98. it('input range focus when open is controlled', () => {
  99. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-input-range-focus&args=&viewMode=story');
  100. cy.get('.semi-datepicker-range-input-wrapper-start > .semi-input-wrapper').click();
  101. cy.get('.semi-datepicker-day').contains('10')
  102. .then($btn => {
  103. $btn.trigger('click');
  104. });
  105. cy.get('.semi-datepicker-day').contains('15')
  106. .then($btn => {
  107. $btn.trigger('click');
  108. });
  109. cy.get('.semi-datepicker-bottomSlot .semi-button')
  110. .then($btn => {
  111. $btn.trigger('click');
  112. cy.get('.semi-datepicker-range-input-wrapper-start').should('not.have.class', 'semi-datepicker-range-input-wrapper-active');
  113. cy.get('.semi-datepicker-range-input-wrapper-end').should('not.have.class', 'semi-datepicker-range-input-wrapper-active');
  114. });
  115. });
  116. it('insetInput + date', () => {
  117. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  118. cy.get('[data-cy=date] .semi-input').click();
  119. cy.get('.semi-popover .semi-input-wrapper-focus').type("2021-12-15");
  120. cy.get('.semi-datepicker-day-selected').contains("15");
  121. cy.get('.semi-popover .semi-input-wrapper-focus').clear();
  122. cy.get('.semi-popover .semi-input-wrapper-focus').type("2021-12-20");
  123. cy.get('.semi-datepicker-day-selected').contains("20");
  124. cy.get('.semi-datepicker-day').contains("5").click();
  125. cy.get('[data-cy=date] .semi-input').click();
  126. cy.get('.semi-popover .semi-input').should("have.value", "2021-12-05");
  127. });
  128. it('insetInput + month', () => {
  129. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  130. cy.get('[data-cy=month] .semi-input').click();
  131. cy.get('.semi-popover .semi-input-wrapper-focus');
  132. cy.get('.semi-popover .semi-input').should("have.value", "2021-12");
  133. cy.get('.semi-popover .semi-input-wrapper-focus').clear();
  134. // fix https://github.com/DouyinFE/semi-design/runs/5715448296?check_suite_focus=true
  135. cy.get('.semi-popover .semi-input-wrapper-focus').clear().type('2021-11');
  136. cy.get('[data-cy=month] .semi-input').should("have.value", "2021-11");
  137. });
  138. it('insetInput + dateTime', () => {
  139. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  140. cy.get('[data-cy=dateTime] .semi-input').click();
  141. cy.get('.semi-datepicker-day').contains("5").click();
  142. cy.get('.semi-popover .semi-input').eq(0).should("have.value", "2021-12-05");
  143. cy.get('.semi-popover .semi-input').eq(1).should("have.value", "00:00:00");
  144. cy.get('.semi-popover .semi-input').eq(1).click();
  145. cy.get(".semi-datepicker-tpk");
  146. cy.get('.semi-popover .semi-input').eq(0).click();
  147. cy.get(".semi-datepicker-navigation");
  148. });
  149. it('insetInput + dateRange', () => {
  150. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  151. // 点击开始日期 trigger
  152. cy.get('[data-cy=dateRange] .semi-input').eq(0).click();
  153. // 查看聚焦
  154. cy.get('.semi-popover .semi-input-wrapper').eq(0).should("have.class", "semi-input-wrapper-focus");
  155. // 选择开始日期和结束日期
  156. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('5').click();
  157. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  158. // 点击结束日期 trigger
  159. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  160. // 查看聚焦
  161. cy.get('.semi-popover .semi-input-wrapper').eq(1).should("have.class", "semi-input-wrapper-focus");
  162. // 在内联输入框输入日期
  163. cy.get('.semi-popover .semi-input').eq(1).clear();
  164. cy.get('.semi-popover .semi-input').eq(1).type("2022-01-20");
  165. // 查看面板联动
  166. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  167. cy.get('.semi-popover .semi-input-wrapper').eq(0).click();
  168. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('15').click();
  169. // 查看输入框联动
  170. cy.get('[data-cy=dateRange] .semi-input').eq(0).should("have.value", "2021-12-15");
  171. cy.get('[data-cy=dateRange] .semi-input').eq(1).should("have.value", "2022-01-20");
  172. });
  173. it('insetInput + dateTimeRange', () => {
  174. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  175. // 滚动到视窗
  176. cy.get('[data-cy=dateTimeRange]').scrollIntoView();
  177. // 点击开始日期 trigger
  178. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).click();
  179. // 查看聚焦
  180. cy.get('.semi-popover .semi-input-wrapper').eq(0).should("have.class", "semi-input-wrapper-focus");
  181. // 选择开始日期和结束日期
  182. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('5').click();
  183. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  184. // 关闭面板
  185. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  186. // 点击结束日期 trigger
  187. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click({ force: true });
  188. // 查看聚焦
  189. cy.get('.semi-popover .semi-input-wrapper').eq(2).should("have.class", "semi-input-wrapper-focus");
  190. // 在内联输入框输入日期
  191. cy.get('.semi-popover .semi-input').eq(2).clear();
  192. cy.get('.semi-popover .semi-input').eq(2).type("2022-01-20");
  193. // 查看面板联动
  194. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  195. cy.get('.semi-popover .semi-input-wrapper').eq(0).click({ force: true });
  196. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('15').click({ force: true });
  197. // 查看输入框联动
  198. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  199. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should("have.value", "2021-12-05 00:00:00");
  200. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should("have.value", "2021-12-15 00:00:00");
  201. });
  202. it('insetInput + dateTimeRange + check click range start ', () => {
  203. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  204. cy.get('[data-cy=dateTimeRange]').scrollIntoView();
  205. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).click();
  206. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  207. cy.get('.semi-popover .semi-input').eq(0).should("have.value", "2022-01-10");
  208. cy.get('.semi-popover .semi-input').eq(1).should("have.value", "00:00:00");
  209. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  210. // 选择单个日期,关闭面板后 trigger input 会清空
  211. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should("have.value", "");
  212. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should("have.value", "");
  213. });
  214. it('insetInput + dateTimeRange + check click range end', () => {
  215. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  216. cy.get('[data-cy=dateTimeRange]').scrollIntoView();
  217. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click();
  218. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  219. cy.get('.semi-popover .semi-input').eq(2).should("have.value", "2022-01-10");
  220. cy.get('.semi-popover .semi-input').eq(3).should("have.value", "00:00:00");
  221. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  222. // 选择单个日期,关闭面板后 trigger input 会清空
  223. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should("have.value", "");
  224. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should("have.value", "");
  225. });
  226. it('insetInput + custom format', () => {
  227. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  228. cy.get('[data-cy=customFormat]').scrollIntoView();
  229. cy.get('[data-cy=customFormat] .semi-input').eq(0).click();
  230. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('5').click();
  231. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  232. cy.get('[data-cy=customFormat] .semi-input').eq(0).should("have.value", "21-12-05 上午 12:00");
  233. cy.get('[data-cy=customFormat] .semi-input').eq(1).should("have.value", "22-01-10 上午 12:00");
  234. cy.get('[data-cy=customFormat] .semi-input').eq(0).click();
  235. cy.get('.semi-popover .semi-input').eq(0).should("have.value", "2021-12-05");
  236. cy.get('.semi-popover .semi-input').eq(1).should("have.value", "2022-01-10");
  237. });
  238. it('insetInput + trigger input disabled', () => {
  239. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  240. const testCases = ['date', 'dateTime', 'dateRange', 'dateTimeRange', 'month'];
  241. for (let item of testCases) {
  242. const wrapper = `[data-cy=${item}]`;
  243. cy.get(wrapper).scrollIntoView();
  244. // 打开面板
  245. cy.get(`${wrapper} .semi-input`).eq(0).click();
  246. // 查看是否为禁用
  247. cy.get(`${wrapper} .semi-input-wrapper-disabled`);
  248. cy.get(wrapper).click({ force: true });
  249. cy.get(`${wrapper} .semi-input-wrapper`).should('not.have.class', 'semi-input-wrapper-disabled');
  250. }
  251. });
  252. it('defaultPickerValue is number', () => {
  253. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-default-picker-value&viewMode=story');
  254. cy.get('[data-cy=dateTime] .semi-input').first().click();
  255. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').first().contains('2021-03-15');
  256. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').last().contains('00:00:00');
  257. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  258. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(0).contains('2021-03-15');
  259. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(1).contains('00:00:00');
  260. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(2).contains('2021-05-15');
  261. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(3).contains('23:59:59');
  262. cy.get('[data-cy=before-1970] .semi-input').first().click();
  263. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').first().contains('1910-01-01');
  264. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').last().contains('13:00:00');
  265. });
  266. it('input complete', () => {
  267. cy.visit('http://localhost:6006/iframe.html?id=datepicker--a-11-y-keyboard-demo&args=&viewMode=story');
  268. cy.get('[data-cy=date] .semi-input-default').type('2022-10-10');
  269. cy.get('[data-cy=date] .semi-input-default').trigger('mouseover');
  270. cy.get('[data-cy=date] .semi-input-clearbtn').click();
  271. cy.get('[data-cy=date] .semi-input-default').should('have.value', '');
  272. cy.get('[data-cy=date] .semi-input-default').type('2022-10-10,2022-10-11');
  273. cy.get('[data-cy=date] .semi-input-default').should('have.value', '2022-10-10,2022-10-11');
  274. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-start').clear();
  275. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-start').type('2022-07-10');
  276. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end').clear();
  277. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end').type('2022-10-11');
  278. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end').type('{enter}');
  279. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-start .semi-input').should('have.value', '2022-07-10');
  280. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end .semi-input').should('have.value', '2022-10-11');
  281. });
  282. // 输入完整日期,面板需要同步变化
  283. it('input a valid date + change panel selected date', () => {
  284. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  285. cy.get('[data-cy=date] .semi-input').first().click();
  286. cy.get('[data-cy=date] .semi-input').first().type('2021-03-15');
  287. cy.get('[x-type=date] .semi-datepicker-navigation-month').contains("2021年 3月");
  288. cy.get('[x-type=date] .semi-datepicker-day-selected').contains("15");
  289. });
  290. // 输入结束日期,面板需要同步变化
  291. it('input start + change panel selected date', () => {
  292. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  293. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  294. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('2021-03-15');
  295. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').contains("2021年 3月");
  296. cy.get('[x-type=dateRange] .semi-datepicker-day-selected-end').contains("15");
  297. });
  298. // 输入开始和结束日期后,通过滚轮修改年月,面板和输入框需要同时发生变化
  299. // 暂时去掉了这个需求
  300. it.skip('input start + end then change year or month from scroll list', () => {
  301. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  302. // input date
  303. cy.get('[data-cy=dateRange] .semi-input').first().click();
  304. cy.get('[data-cy=dateRange] .semi-input').first().type('2021-03-15');
  305. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').first().contains("2021年 3月");
  306. cy.get('[x-type=dateRange] .semi-datepicker-day-selected-start').contains("15");
  307. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  308. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('2021-05-15');
  309. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').last().contains("2021年 5月");
  310. cy.get('[x-type=dateRange] .semi-datepicker-day-selected-end').contains("15");
  311. // click right scroll list
  312. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').last().click();
  313. cy.get('.semi-scrolllist-list-outer li').contains('2022').click();
  314. cy.get('.semi-datepicker-yam .semi-datepicker-yearmonth-header .semi-button').click();
  315. cy.get('[data-cy=dateRange] .semi-input').last().should('have.value', '2022-05-15');
  316. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').last().contains("2022年 5月");
  317. // click left scroll list
  318. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').first().click();
  319. cy.get('.semi-scrolllist-list-outer li').contains('2022').click();
  320. cy.get('.semi-datepicker-yam .semi-datepicker-yearmonth-header .semi-button').click();
  321. cy.get('[data-cy=dateRange] .semi-input').first().should('have.value', '2022-03-15');
  322. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').first().contains("2022年 3月");
  323. });
  324. // 输入开始和结束日期后,输入一个不合法的日期,输入框恢复到上次合法日期
  325. it('input invalid in date type + blur', () => {
  326. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  327. cy.get('[data-cy=date] .semi-input').first().click();
  328. cy.get('[data-cy=date] .semi-input').first().type('2021-03-15');
  329. cy.get('[data-cy=date] .semi-input').first().type('123');
  330. // 失焦
  331. cy.get('[data-cy=container').click({ force: true });
  332. // 恢复到上一次选中时间
  333. cy.get('[data-cy=date] .semi-input').first().should('have.value', '2021-03-15');
  334. });
  335. // 输入开始和结束日期后,输入一个不合法的日期,输入框恢复到上次合法日期
  336. it('input invalid in dateRange + blur', () => {
  337. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  338. // input date
  339. cy.get('[data-cy=dateRange] .semi-input').first().click();
  340. cy.get('[data-cy=dateRange] .semi-input').first().type('2021-03-15');
  341. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  342. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('2021-05-15');
  343. // 输入不合法日期
  344. cy.get('[data-cy=dateRange] .semi-input').first().click();
  345. cy.get('[data-cy=dateRange] .semi-input').first().type('abc');
  346. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  347. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('abc');
  348. cy.get('[data-cy=container').click({ force: true });
  349. cy.get('[data-cy=dateRange] .semi-input').first().should('have.value', '2021-03-15');
  350. cy.get('[data-cy=dateRange] .semi-input').eq(1).should('have.value', '2021-05-15');
  351. });
  352. // 输入开始和结束日期后,输入一个不合法的日期,输入框恢复到上次合法日期
  353. it('input invalid in dateTime + blur', () => {
  354. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  355. // input date
  356. cy.get('[data-cy=dateTime] .semi-input').first().click();
  357. cy.get('[data-cy=dateTime] .semi-input').first().type('2021-03-15 00:00:00');
  358. // 输入不合法日期
  359. cy.get('[data-cy=dateTime] .semi-input').first().click();
  360. cy.get('[data-cy=dateTime] .semi-input').first().type('abc');
  361. cy.get('[data-cy=container').click({ force: true });
  362. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '2021-03-15 00:00:00');
  363. });
  364. it('input only invalid in date type + blur', () => {
  365. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  366. cy.get('[data-cy=date] .semi-input').first().click();
  367. cy.get('[data-cy=date] .semi-input').first().type('abc');
  368. cy.get('[data-cy=container').click({ force: true });
  369. cy.get('[data-cy=date] .semi-input').first().should('have.value', '');
  370. });
  371. it('input only invalid in dateRange + blur', () => {
  372. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  373. cy.get('[data-cy=dateRange] .semi-input').first().click();
  374. cy.get('[data-cy=dateRange] .semi-input').first().type('abc');
  375. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  376. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('123');
  377. cy.get('[data-cy=container').click({ force: true });
  378. cy.get('[data-cy=dateRange] .semi-input').first().should('have.value', '');
  379. cy.get('[data-cy=dateRange] .semi-input').eq(1).should('have.value', '');
  380. });
  381. it('input only invalid in dateTime + blur', () => {
  382. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  383. cy.get('[data-cy=dateTime] .semi-input').first().click();
  384. cy.get('[data-cy=dateTime] .semi-input').first().type('123');
  385. cy.get('[data-cy=container').click({ force: true });
  386. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '');
  387. });
  388. // 输入禁用日期,面板不需要同步变化
  389. it('input a disabled date + change panel selected date', () => {
  390. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-disabled&args=&viewMode=story');
  391. cy.get('[data-cy=date] .semi-input').first().click();
  392. cy.get('[data-cy=date] .semi-input').first().type('2021-03-15');
  393. cy.get('[x-type=date] .semi-datepicker-day-selected').should('not.exist');
  394. });
  395. it('auto fill time + dateTime', () => {
  396. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-fill-time&viewMode=story');
  397. cy.get('[data-cy=dateTime] .semi-input').first().click();
  398. cy.get('[x-type=dateTime] .semi-input').first().type('2021-03-15');
  399. cy.get('[x-type=dateTime] .semi-input').eq(1).should('have.value', '14:00');
  400. });
  401. it('auto fill time invalid + dateTime', () => {
  402. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-fill-time&viewMode=story');
  403. cy.get('[data-cy=dateTime] .semi-input').first().click();
  404. cy.get('[x-type=dateTime] .semi-input').first().type('2021-03-');
  405. cy.get('[x-type=dateTime] .semi-input').eq(1).should('have.value', '');
  406. });
  407. it('auto fill time + dateTimeRange', () => {
  408. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-fill-time&viewMode=story');
  409. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  410. cy.get('[x-type=dateTimeRange] .semi-input').first().type('2021-01-01');
  411. cy.get('[x-type=dateTimeRange] .semi-input').eq(1).should('have.value', '00:01');
  412. cy.get('[x-type=dateTimeRange] .semi-input').eq(2).type('2021-03-01');
  413. cy.get('[x-type=dateTimeRange] .semi-input').eq(3).should('have.value', '23:59');
  414. });
  415. it('input date + needConfirm + cancel', () => {
  416. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  417. cy.get('[data-cy=dateTime] .semi-input').first().click();
  418. cy.get('[data-cy=dateTime] .semi-input').first().type('2021-03-15 14:00');
  419. cy.get('.semi-datepicker-footer .semi-button').first().click();
  420. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '');
  421. });
  422. it('input date + needConfirm + confirm', () => {
  423. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  424. cy.get('[data-cy=dateTime] .semi-input').first().click();
  425. cy.get('[data-cy=dateTime] .semi-input').first().type('2021-03-15 14:00');
  426. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  427. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '2021-03-15 14:00');
  428. });
  429. it('input date range + needConfirm + cancel', () => {
  430. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  431. cy.get('[data-cy=dateTimeRange] .semi-input').first().click().type('2021-03-15 14:00');
  432. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click().type('2021-03-20 23:59');
  433. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  434. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '');
  435. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '');
  436. });
  437. it('input date range + needConfirm + confirm', () => {
  438. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  439. cy.get('[data-cy=dateTimeRange] .semi-input').first().click().type('2021-03-15 14:00');
  440. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click().type('2021-03-20 23:59');
  441. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  442. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '2021-03-15 14:00');
  443. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '2021-03-20 23:59');
  444. });
  445. it('input date + needConfirm + cancel', () => {
  446. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  447. cy.get('[data-cy=inset-switch]').click();
  448. cy.get('[data-cy=dateTime] .semi-input').first().click();
  449. cy.get('[x-type=dateTime] .semi-input').eq(0).type('2021-03-15');
  450. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  451. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '');
  452. });
  453. it('input date + needConfirm + confirm', () => {
  454. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  455. cy.get('[data-cy=inset-switch]').click();
  456. cy.get('[data-cy=dateTime] .semi-input').first().click();
  457. cy.get('[x-type=dateTime] .semi-input').eq(0).type('2021-03-15');
  458. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  459. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '2021-03-15 14:00');
  460. });
  461. it('input date range + needConfirm + cancel', () => {
  462. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  463. cy.get('[data-cy=inset-switch]').click();
  464. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  465. cy.get('[x-type=dateTimeRange] .semi-input').eq(0).type('2021-03-15');
  466. cy.get('[x-type=dateTimeRange] .semi-input').eq(2).type('2021-03-20');
  467. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  468. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '');
  469. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '');
  470. });
  471. it('input date range + needConfirm + confirm', () => {
  472. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  473. cy.get('[data-cy=inset-switch]').click();
  474. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  475. cy.get('[x-type=dateTimeRange] .semi-input').eq(0).type('2021-03-15');
  476. cy.get('[x-type=dateTimeRange] .semi-input').eq(2).type('2021-03-20');
  477. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  478. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '2021-03-15 00:01');
  479. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '2021-03-20 23:59');
  480. });
  481. it('cashedSelectedValue return to last selected when needConfirm & input invalid', () => {
  482. cy.visit('http://localhost:6006/iframe.html?id=datepicker--need-confirm-delete&args=&viewMode=story');
  483. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  484. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).clear().type('2021-0');
  485. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  486. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  487. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('8');
  488. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('9');
  489. });
  490. it('cashedSelectedValue after selected date', () => {
  491. cy.visit('http://localhost:6006/iframe.html?id=datepicker--cashed-selected-value&viewMode=story');
  492. cy.get('[data-cy=date] .semi-input').first().click();
  493. cy.get('.semi-datepicker-day').contains("5").click({ force: true });
  494. cy.get('[data-cy=date] .semi-input').first().click();
  495. cy.get('.semi-popover .semi-datepicker-day-selected').contains('5');
  496. cy.get('[data-cy=dateTime] .semi-input').first().click();
  497. cy.get('.semi-datepicker-day').contains("5").click({ force: true });
  498. cy.get('[data-cy=dateTime] .semi-input').first().click();
  499. cy.get('.semi-popover .semi-datepicker-day-selected').contains('5');
  500. cy.get('[data-cy=dateRange] .semi-input').eq(0).click();
  501. cy.get('.semi-datepicker-day').contains("5").click({ force: true });
  502. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  503. cy.get('.semi-datepicker-day').contains("20").click({ force: true });
  504. cy.get('[data-cy=dateRange] .semi-input').eq(0).click();
  505. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('5');
  506. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  507. });
  508. it('cashedSelectedValue after click outside', () => {
  509. cy.visit('http://localhost:6006/iframe.html?id=datepicker--cashed-selected-value&viewMode=story');
  510. cy.get('[data-cy=date] .semi-input').first().click();
  511. cy.get('[data-cy=date]').click({ force: true });
  512. cy.get('[data-cy=date] .semi-input').first().click();
  513. cy.get('.semi-popover .semi-datepicker-day-selected').contains('8');
  514. cy.get('[data-cy=dateTime] .semi-input').first().click();
  515. cy.get('[data-cy=dateTime]').click({ force: true });
  516. cy.get('[data-cy=dateTime] .semi-input').first().click();
  517. cy.get('.semi-popover .semi-datepicker-day-selected').contains('8');
  518. cy.get('[data-cy=dateRange] .semi-input').first().click();
  519. cy.get('[data-cy=dateRange]').click({ force: true });
  520. cy.get('[data-cy=dateRange] .semi-input').first().click();
  521. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('8');
  522. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('9');
  523. });
  524. it('disabledDate by focus state', () => {
  525. cy.visit('http://localhost:6006/iframe.html?id=datepicker--disabled-range&args=&viewMode=story');
  526. cy.get('.semi-input').eq(0).click();
  527. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').should('have.length', 5);
  528. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(0).contains('18');
  529. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(4).contains('22');
  530. cy.get('.semi-input').eq(1).click();
  531. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').should('have.length', 7);
  532. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(0).contains('17');
  533. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(6).contains('23');
  534. });
  535. });