datePicker.spec.js 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930
  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 + monthRange', () => {
  139. cy.visit('http://localhost:6006/iframe.html?id=datepicker--month-range-picker&args=&viewMode=story');
  140. cy.get('[data-cy=monthRange] .semi-input').click();
  141. cy.get('.semi-popover .semi-input-wrapper-focus');
  142. cy.get('.semi-popover .semi-input').should("have.value", "2023年03月 到 2023年04月");
  143. cy.get('.semi-popover .semi-input-wrapper-focus').clear();
  144. cy.get('.semi-scrolllist').eq(1).contains('2025').click();
  145. cy.get('.semi-scrolllist .semi-scrolllist-item').eq(3).contains(6).click();
  146. cy.get('[data-cy=monthRange] .semi-input').should("have.value", "2023年03月 到 2025年06月");
  147. });
  148. it('insetInput + dateTime', () => {
  149. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  150. cy.get('[data-cy=dateTime] .semi-input').click();
  151. cy.get('.semi-datepicker-day').contains("5").click();
  152. cy.get('.semi-popover .semi-input').eq(0).should("have.value", "2021-12-05");
  153. cy.get('.semi-popover .semi-input').eq(1).should("have.value", "00:00:00");
  154. cy.get('.semi-popover .semi-input').eq(1).click();
  155. cy.get(".semi-datepicker-tpk");
  156. cy.get('.semi-popover .semi-input').eq(0).click();
  157. cy.get(".semi-datepicker-navigation");
  158. });
  159. it('insetInput + dateRange', () => {
  160. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  161. // 点击开始日期 trigger
  162. cy.get('[data-cy=dateRange] .semi-input').eq(0).click();
  163. // 查看聚焦
  164. cy.get('.semi-popover .semi-input-wrapper').eq(0).should("have.class", "semi-input-wrapper-focus");
  165. // 选择开始日期和结束日期
  166. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('5').click();
  167. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  168. // 点击结束日期 trigger
  169. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  170. // 查看聚焦
  171. cy.get('.semi-popover .semi-input-wrapper').eq(1).should("have.class", "semi-input-wrapper-focus");
  172. // 在内联输入框输入日期
  173. cy.get('.semi-popover .semi-input').eq(1).clear();
  174. cy.get('.semi-popover .semi-input').eq(1).type("2022-01-20");
  175. // 查看面板联动
  176. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  177. cy.get('.semi-popover .semi-input-wrapper').eq(0).click();
  178. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('15').click();
  179. // 查看输入框联动
  180. cy.get('[data-cy=dateRange] .semi-input').eq(0).should("have.value", "2021-12-15");
  181. cy.get('[data-cy=dateRange] .semi-input').eq(1).should("have.value", "2022-01-20");
  182. });
  183. it('insetInput + dateTimeRange', () => {
  184. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  185. // 滚动到视窗
  186. cy.get('[data-cy=dateTimeRange]').scrollIntoView();
  187. // 点击开始日期 trigger
  188. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).click();
  189. // 查看聚焦
  190. cy.get('.semi-popover .semi-input-wrapper').eq(0).should("have.class", "semi-input-wrapper-focus");
  191. // 选择开始日期和结束日期
  192. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('5').click();
  193. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  194. // 关闭面板
  195. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  196. // 点击结束日期 trigger
  197. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click({ force: true });
  198. // 查看聚焦
  199. cy.get('.semi-popover .semi-input-wrapper').eq(2).should("have.class", "semi-input-wrapper-focus");
  200. // 在内联输入框输入日期
  201. cy.get('.semi-popover .semi-input').eq(2).clear();
  202. cy.get('.semi-popover .semi-input').eq(2).type("2022-01-20");
  203. // 查看面板联动
  204. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  205. cy.get('.semi-popover .semi-input-wrapper').eq(0).click({ force: true });
  206. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('15').click({ force: true });
  207. // 查看输入框联动
  208. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  209. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should("have.value", "2021-12-15 00:00:00");
  210. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should("have.value", "2022-01-20 00:00:00");
  211. });
  212. it('insetInput + dateTimeRange + check click range start ', () => {
  213. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  214. cy.get('[data-cy=dateTimeRange]').scrollIntoView();
  215. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).click();
  216. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  217. cy.get('.semi-popover .semi-input').eq(0).should("have.value", "2022-01-10");
  218. cy.get('.semi-popover .semi-input').eq(1).should("have.value", "00:00:00");
  219. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  220. // 选择单个日期,关闭面板后 trigger input 会清空
  221. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should("have.value", "");
  222. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should("have.value", "");
  223. });
  224. it('insetInput + dateTimeRange + check click range end', () => {
  225. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  226. cy.get('[data-cy=dateTimeRange]').scrollIntoView();
  227. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click();
  228. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  229. cy.get('.semi-popover .semi-input').eq(2).should("have.value", "2022-01-10");
  230. cy.get('.semi-popover .semi-input').eq(3).should("have.value", "00:00:00");
  231. cy.get('[data-cy=dateTimeRange]').click({ force: true });
  232. // 选择单个日期,关闭面板后 trigger input 会清空
  233. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should("have.value", "");
  234. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should("have.value", "");
  235. });
  236. it('insetInput + custom format', () => {
  237. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  238. cy.get('[data-cy=customFormat]').scrollIntoView();
  239. cy.get('[data-cy=customFormat] .semi-input').eq(0).click();
  240. cy.get('.semi-popover .semi-datepicker-month-grid-left').contains('5').click();
  241. cy.get('.semi-popover .semi-datepicker-month-grid-right').contains('10').click();
  242. cy.get('[data-cy=customFormat] .semi-input').eq(0).should("have.value", "21-12-05 上午 12:00");
  243. cy.get('[data-cy=customFormat] .semi-input').eq(1).should("have.value", "22-01-10 上午 12:00");
  244. cy.get('[data-cy=customFormat] .semi-input').eq(0).click();
  245. cy.get('.semi-popover .semi-input').eq(0).should("have.value", "2021-12-05");
  246. cy.get('.semi-popover .semi-input').eq(1).should("have.value", "2022-01-10");
  247. });
  248. it('insetInput + trigger input disabled', () => {
  249. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-e-2-e&args=&viewMode=story');
  250. const testCases = ['date', 'dateTime', 'dateRange', 'dateTimeRange', 'month'];
  251. for (let item of testCases) {
  252. const wrapper = `[data-cy=${item}]`;
  253. cy.get(wrapper).scrollIntoView();
  254. // 打开面板
  255. cy.get(`${wrapper} .semi-input`).eq(0).click();
  256. // 查看是否为禁用
  257. cy.get(`${wrapper} .semi-input-wrapper-disabled`);
  258. cy.get(wrapper).click({ force: true });
  259. cy.get(`${wrapper} .semi-input-wrapper`).should('not.have.class', 'semi-input-wrapper-disabled');
  260. }
  261. });
  262. it('defaultPickerValue is number', () => {
  263. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-default-picker-value&viewMode=story');
  264. cy.get('[data-cy=dateTime] .semi-input').first().click();
  265. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').first().contains('2021-03-15');
  266. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').last().contains('00:00:00');
  267. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  268. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(0).contains('2021-03-15');
  269. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(1).contains('00:00:00');
  270. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(2).contains('2021-05-15');
  271. cy.get('[x-type=dateTimeRange] .semi-datepicker-switch-text').eq(3).contains('23:59:59');
  272. cy.get('[data-cy=before-1970] .semi-input').first().click();
  273. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').first().contains('1910-01-01');
  274. cy.get('[x-type=dateTime] .semi-datepicker-switch-text').last().contains('13:00:00');
  275. });
  276. it('input complete', () => {
  277. cy.visit('http://localhost:6006/iframe.html?id=datepicker--a-11-y-keyboard-demo&args=&viewMode=story');
  278. cy.get('[data-cy=date] .semi-input-default').type('2022-10-10');
  279. cy.get('[data-cy=date] .semi-input-default').trigger('mouseover');
  280. cy.get('[data-cy=date] .semi-input-clearbtn').click();
  281. cy.get('[data-cy=date] .semi-input-default').should('have.value', '');
  282. cy.get('[data-cy=date] .semi-input-default').type('2022-10-10,2022-10-11');
  283. cy.get('[data-cy=date] .semi-input-default').should('have.value', '2022-10-10,2022-10-11');
  284. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-start').clear();
  285. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-start').type('2022-07-10');
  286. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end').clear();
  287. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end').type('2022-10-11');
  288. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end').type('{enter}');
  289. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-start .semi-input').should('have.value', '2022-07-10');
  290. cy.get('[data-cy=dateRange] .semi-datepicker-range-input-wrapper-end .semi-input').should('have.value', '2022-10-11');
  291. });
  292. // 输入完整日期,面板需要同步变化
  293. it('input a valid date + change panel selected date', () => {
  294. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  295. cy.get('[data-cy=date] .semi-input').first().click();
  296. cy.get('[data-cy=date] .semi-input').first().type('2021-03-15');
  297. cy.get('[x-type=date] .semi-datepicker-navigation-month').contains("2021年 3月");
  298. cy.get('[x-type=date] .semi-datepicker-day-selected').contains("15");
  299. });
  300. // 输入结束日期,面板需要同步变化
  301. it('input start + change panel selected date', () => {
  302. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  303. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  304. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('2021-03-15');
  305. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').contains("2021年 3月");
  306. cy.get('[x-type=dateRange] .semi-datepicker-day-selected-end').contains("15");
  307. });
  308. // 输入开始和结束日期后,通过滚轮修改年月,面板和输入框需要同时发生变化
  309. // 暂时去掉了这个需求
  310. it.skip('input start + end then change year or month from scroll list', () => {
  311. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  312. // input date
  313. cy.get('[data-cy=dateRange] .semi-input').first().click();
  314. cy.get('[data-cy=dateRange] .semi-input').first().type('2021-03-15');
  315. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').first().contains("2021年 3月");
  316. cy.get('[x-type=dateRange] .semi-datepicker-day-selected-start').contains("15");
  317. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  318. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('2021-05-15');
  319. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').last().contains("2021年 5月");
  320. cy.get('[x-type=dateRange] .semi-datepicker-day-selected-end').contains("15");
  321. // click right scroll list
  322. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').last().click();
  323. cy.get('.semi-scrolllist-list-outer li').contains('2022').click();
  324. cy.get('.semi-datepicker-yam .semi-datepicker-yearmonth-header .semi-button').click();
  325. cy.get('[data-cy=dateRange] .semi-input').last().should('have.value', '2022-05-15');
  326. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').last().contains("2022年 5月");
  327. // click left scroll list
  328. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').first().click();
  329. cy.get('.semi-scrolllist-list-outer li').contains('2022').click();
  330. cy.get('.semi-datepicker-yam .semi-datepicker-yearmonth-header .semi-button').click();
  331. cy.get('[data-cy=dateRange] .semi-input').first().should('have.value', '2022-03-15');
  332. cy.get('[x-type=dateRange] .semi-datepicker-navigation-month').first().contains("2022年 3月");
  333. });
  334. // 输入开始和结束日期后,输入一个不合法的日期,输入框恢复到上次合法日期
  335. it('input invalid in date type + blur', () => {
  336. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  337. cy.get('[data-cy=date] .semi-input').first().click();
  338. cy.get('[data-cy=date] .semi-input').first().type('2021-03-15');
  339. cy.get('[data-cy=date] .semi-input').first().type('123');
  340. // 失焦
  341. cy.get('[data-cy=container').click({ force: true });
  342. // 恢复到上一次选中时间
  343. cy.get('[data-cy=date] .semi-input').first().should('have.value', '2021-03-15');
  344. });
  345. // 输入开始和结束日期后,输入一个不合法的日期,输入框恢复到上次合法日期
  346. it('input invalid in dateRange + blur', () => {
  347. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  348. // input date
  349. cy.get('[data-cy=dateRange] .semi-input').first().click();
  350. cy.get('[data-cy=dateRange] .semi-input').first().type('2021-03-15');
  351. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  352. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('2021-05-15');
  353. // 输入不合法日期
  354. cy.get('[data-cy=dateRange] .semi-input').first().click();
  355. cy.get('[data-cy=dateRange] .semi-input').first().type('abc');
  356. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  357. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('abc');
  358. cy.get('[data-cy=container').click({ force: true });
  359. cy.get('[data-cy=dateRange] .semi-input').first().should('have.value', '2021-03-15');
  360. cy.get('[data-cy=dateRange] .semi-input').eq(1).should('have.value', '2021-05-15');
  361. });
  362. // 输入开始和结束日期后,输入一个不合法的日期,输入框恢复到上次合法日期
  363. it('input invalid in dateTime + blur', () => {
  364. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  365. // input date
  366. cy.get('[data-cy=dateTime] .semi-input').first().click();
  367. cy.get('[data-cy=dateTime] .semi-input').first().type('2021-03-15 00:00:00');
  368. // 输入不合法日期
  369. cy.get('[data-cy=dateTime] .semi-input').first().click();
  370. cy.get('[data-cy=dateTime] .semi-input').first().type('abc');
  371. cy.get('[data-cy=container').click({ force: true });
  372. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '2021-03-15 00:00:00');
  373. });
  374. it('input only invalid in date type + blur', () => {
  375. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  376. cy.get('[data-cy=date] .semi-input').first().click();
  377. cy.get('[data-cy=date] .semi-input').first().type('abc');
  378. cy.get('[data-cy=container').click({ force: true });
  379. cy.get('[data-cy=date] .semi-input').first().should('have.value', '');
  380. });
  381. it('input only invalid in dateRange + blur', () => {
  382. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  383. cy.get('[data-cy=dateRange] .semi-input').first().click();
  384. cy.get('[data-cy=dateRange] .semi-input').first().type('abc');
  385. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  386. cy.get('[data-cy=dateRange] .semi-input').eq(1).type('123');
  387. cy.get('[data-cy=container').click({ force: true });
  388. cy.get('[data-cy=dateRange] .semi-input').first().should('have.value', '');
  389. cy.get('[data-cy=dateRange] .semi-input').eq(1).should('have.value', '');
  390. });
  391. it('input only invalid in dateTime + blur', () => {
  392. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format&args=&viewMode=story');
  393. cy.get('[data-cy=dateTime] .semi-input').first().click();
  394. cy.get('[data-cy=dateTime] .semi-input').first().type('123');
  395. cy.get('[data-cy=container').click({ force: true });
  396. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '');
  397. });
  398. // 输入禁用日期,面板不需要同步变化
  399. it('input a disabled date + change panel selected date', () => {
  400. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-disabled&args=&viewMode=story');
  401. cy.get('[data-cy=date] .semi-input').first().click();
  402. cy.get('[data-cy=date] .semi-input').first().type('2021-03-15');
  403. cy.get('[x-type=date] .semi-datepicker-day-selected').should('not.exist');
  404. });
  405. it('auto fill time + dateTime', () => {
  406. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-fill-time&viewMode=story');
  407. cy.get('[data-cy=dateTime] .semi-input').first().click();
  408. cy.get('[x-type=dateTime] .semi-input').first().type('2021-03-15');
  409. cy.get('[x-type=dateTime] .semi-input').eq(1).should('have.value', '14:00');
  410. });
  411. it('auto fill time invalid + dateTime', () => {
  412. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-fill-time&viewMode=story');
  413. cy.get('[data-cy=dateTime] .semi-input').first().click();
  414. cy.get('[x-type=dateTime] .semi-input').first().type('2021-03-');
  415. cy.get('[x-type=dateTime] .semi-input').eq(1).should('have.value', '');
  416. });
  417. it('auto fill time + dateTimeRange', () => {
  418. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-fill-time&viewMode=story');
  419. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  420. cy.get('[x-type=dateTimeRange] .semi-input').first().type('2021-01-01');
  421. cy.get('[x-type=dateTimeRange] .semi-input').eq(1).should('have.value', '00:01');
  422. cy.get('[x-type=dateTimeRange] .semi-input').eq(2).type('2021-03-01');
  423. cy.get('[x-type=dateTimeRange] .semi-input').eq(3).should('have.value', '23:59');
  424. });
  425. it('input date + needConfirm + cancel', () => {
  426. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  427. cy.get('[data-cy=dateTime] .semi-input').first().click();
  428. cy.get('[data-cy=dateTime] .semi-input').first().type('2021-03-15 14:00');
  429. cy.get('.semi-datepicker-footer .semi-button').first().click();
  430. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '');
  431. });
  432. it('input date + needConfirm + confirm', () => {
  433. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  434. cy.get('[data-cy=dateTime] .semi-input').first().click();
  435. cy.get('[data-cy=dateTime] .semi-input').first().type('2021-03-15 14:00');
  436. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  437. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '2021-03-15 14:00');
  438. });
  439. it('input date range + needConfirm + cancel', () => {
  440. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  441. cy.get('[data-cy=dateTimeRange] .semi-input').first().click().type('2021-03-15 14:00');
  442. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click().type('2021-03-20 23:59');
  443. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  444. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '');
  445. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '');
  446. });
  447. it('input date range + needConfirm + confirm', () => {
  448. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  449. cy.get('[data-cy=dateTimeRange] .semi-input').first().click().type('2021-03-15 14:00');
  450. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).click().type('2021-03-20 23:59');
  451. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  452. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '2021-03-15 14:00');
  453. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '2021-03-20 23:59');
  454. });
  455. it('input date + needConfirm + cancel', () => {
  456. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  457. cy.get('[data-cy=inset-switch]').click();
  458. cy.get('[data-cy=dateTime] .semi-input').first().click();
  459. cy.get('[x-type=dateTime] .semi-input').eq(0).type('2021-03-15');
  460. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  461. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '');
  462. });
  463. it('input date + needConfirm + confirm', () => {
  464. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  465. cy.get('[data-cy=inset-switch]').click();
  466. cy.get('[data-cy=dateTime] .semi-input').first().click();
  467. cy.get('[x-type=dateTime] .semi-input').eq(0).type('2021-03-15');
  468. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  469. cy.get('[data-cy=dateTime] .semi-input').first().should('have.value', '2021-03-15 14:00');
  470. });
  471. it('input date range + needConfirm + cancel', () => {
  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(0).click();
  478. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '');
  479. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '');
  480. });
  481. it('input date range + needConfirm + confirm', () => {
  482. cy.visit('http://localhost:6006/iframe.html?id=datepicker--input-format-confirm&args=&viewMode=story');
  483. cy.get('[data-cy=inset-switch]').click();
  484. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  485. cy.get('[x-type=dateTimeRange] .semi-input').eq(0).type('2021-03-15');
  486. cy.get('[x-type=dateTimeRange] .semi-input').eq(2).type('2021-03-20');
  487. cy.get('.semi-datepicker-footer .semi-button').eq(1).click();
  488. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).should('have.value', '2021-03-15 00:01');
  489. cy.get('[data-cy=dateTimeRange] .semi-input').eq(1).should('have.value', '2021-03-20 23:59');
  490. });
  491. it('cashedSelectedValue return to last selected when needConfirm & input invalid', () => {
  492. cy.visit('http://localhost:6006/iframe.html?id=datepicker--need-confirm-delete&args=&viewMode=story');
  493. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  494. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).clear().type('2021-0');
  495. cy.get('.semi-datepicker-footer .semi-button').eq(0).click();
  496. cy.wait(300);
  497. cy.get('[data-cy=dateTimeRange] .semi-input').first().click();
  498. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('8');
  499. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('9');
  500. });
  501. it('cashedSelectedValue after selected date', () => {
  502. cy.visit('http://localhost:6006/iframe.html?id=datepicker--cashed-selected-value&viewMode=story');
  503. cy.get('[data-cy=date] .semi-input').first().click();
  504. cy.get('.semi-datepicker-day').contains("5").click({ force: true });
  505. cy.get('[data-cy=date] .semi-input').first().click();
  506. cy.get('.semi-popover .semi-datepicker-day-selected').contains('5');
  507. cy.get('[data-cy=dateTime] .semi-input').first().click();
  508. cy.get('.semi-datepicker-day').contains("5").click({ force: true });
  509. cy.get('[data-cy=dateTime] .semi-input').first().click();
  510. cy.get('.semi-popover .semi-datepicker-day-selected').contains('5');
  511. cy.get('[data-cy=dateRange] .semi-input').eq(0).click();
  512. cy.get('.semi-datepicker-day').contains("5").click({ force: true });
  513. cy.get('[data-cy=dateRange] .semi-input').eq(1).click();
  514. cy.get('.semi-datepicker-day').contains("20").click({ force: true });
  515. cy.get('[data-cy=dateRange] .semi-input').eq(0).click();
  516. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('5');
  517. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  518. });
  519. it('cashedSelectedValue after click outside', () => {
  520. cy.visit('http://localhost:6006/iframe.html?id=datepicker--cashed-selected-value&viewMode=story');
  521. cy.get('[data-cy=date] .semi-input').first().click();
  522. cy.get('[data-cy=date]').click({ force: true });
  523. cy.get('[data-cy=date] .semi-input').first().click();
  524. cy.get('.semi-popover .semi-datepicker-day-selected').contains('8');
  525. cy.get('[data-cy=dateTime] .semi-input').first().click();
  526. cy.get('[data-cy=dateTime]').click({ force: true });
  527. cy.get('[data-cy=dateTime] .semi-input').first().click();
  528. cy.get('.semi-popover .semi-datepicker-day-selected').contains('8');
  529. cy.get('[data-cy=dateRange] .semi-input').first().click();
  530. cy.get('[data-cy=dateRange]').click({ force: true });
  531. cy.get('[data-cy=dateRange] .semi-input').first().click();
  532. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('8');
  533. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('9');
  534. });
  535. it('disabledDate by focus state', () => {
  536. cy.visit('http://localhost:6006/iframe.html?id=datepicker--disabled-range&args=&viewMode=story');
  537. cy.get('.semi-input').eq(0).click();
  538. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').should('have.length', 5);
  539. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(0).contains('18');
  540. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(4).contains('22');
  541. cy.get('.semi-input').eq(1).click();
  542. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').should('have.length', 7);
  543. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(0).contains('17');
  544. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day.semi-datepicker-day-disabled').eq(6).contains('23');
  545. });
  546. it('auto scroll to no disabled month', () => {
  547. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-disabled-month&viewMode=story');
  548. cy.get('.semi-input').eq(0).click();
  549. cy.wait(100);
  550. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(2) li').contains('10').click({ force: true });
  551. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(1) li').contains('2021').click({ force: true });
  552. cy.wait(100);
  553. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(1) .semi-scrolllist-item-sel').should('contain.text', '2021年');
  554. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(2) .semi-scrolllist-item-sel').should('contain.text', '11月');
  555. cy.get('.semi-input').eq(0).should('have.value', '2021-11');
  556. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(2) li').contains('12').click({ force: true });
  557. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(1) li').contains('2022').click({ force: true });
  558. cy.wait(100);
  559. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(1) .semi-scrolllist-item-sel').should('contain.text', '2022年');
  560. cy.get('.semi-scrolllist-body .semi-scrolllist-item:nth-child(2) .semi-scrolllist-item-sel').should('contain.text', '1月');
  561. cy.get('.semi-input').eq(0).should('have.value', '2022-01');
  562. });
  563. it('fix dateRange type ui shift', () => {
  564. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-range-panel-shift&viewMode=story');
  565. cy.get('.semi-input').eq(0).click();
  566. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day').contains('20').click();
  567. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-navigation-month').contains('2019年 7月');
  568. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-navigation-month').contains('2019年 8月');
  569. });
  570. it('fix dateTimeRange type ui shift', () => {
  571. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-range-panel-shift&viewMode=story');
  572. cy.get('.semi-input').eq(2).click();
  573. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day').contains('20').click();
  574. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-navigation-month').contains('2019年 7月');
  575. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-navigation-month').contains('2019年 8月');
  576. });
  577. it('test dateRange with defaultValue', () => {
  578. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-range-panel-shift&viewMode=story');
  579. cy.get('.semi-input').eq(4).click();
  580. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day-selected-start');
  581. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day-selected-end');
  582. });
  583. it('test dateTimeRange with defaultValue', () => {
  584. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-range-panel-shift&viewMode=story');
  585. cy.get('.semi-input').eq(6).click();
  586. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day-selected-start');
  587. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day-selected-end');
  588. });
  589. it('test controlled insetInput dateTimeRange ', () => {
  590. cy.visit('http://localhost:6006/iframe.html?id=datepicker--inset-input-controlled&viewMode=story');
  591. cy.get('.semi-input').eq(0).click();
  592. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('20').click();
  593. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day').contains('20').click();
  594. cy.get('.semi-datepicker-inset-input-wrapper .semi-input').eq(0).should("have.value", "2022-02-20");
  595. cy.get('.semi-datepicker-inset-input-wrapper .semi-input').eq(1).should("have.value", "00:00:00");
  596. cy.get('.semi-datepicker-inset-input-wrapper .semi-input').eq(2).should("have.value", "2023-02-20");
  597. cy.get('.semi-datepicker-inset-input-wrapper .semi-input').eq(3).should("have.value", "00:00:00");
  598. });
  599. it('test multiple selected panel shift', () => {
  600. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-multiple-panel-shift&viewMode=story');
  601. // 非受控
  602. cy.get('.semi-input').eq(0).click();
  603. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('20').click();
  604. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-navigation .semi-button').eq(3).click();
  605. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('20').click();
  606. cy.get('.semi-datepicker-navigation-month').contains("2019年 8月");
  607. });
  608. it('test multiple selected panel shift + controlled', () => {
  609. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-multiple-panel-shift&viewMode=story');
  610. // 受控
  611. cy.get('.semi-input').eq(1).click();
  612. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('20').click();
  613. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-navigation .semi-button').eq(3).click();
  614. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('20').click();
  615. cy.get('.semi-datepicker-navigation-month').contains("2019年 8月");
  616. });
  617. it('test clickOutSide', () => {
  618. cy.visit('http://localhost:6006/iframe.html?id=datepicker--feat-on-click-outside&args=&viewMode=story', {
  619. onBeforeLoad(win) {
  620. cy.stub(win.console, 'log').as('consoleLog');
  621. },
  622. });
  623. cy.get('.semi-input').eq(0).click();
  624. cy.get('.semi-datepicker-footer').click();
  625. cy.get('body').click();
  626. cy.get('@consoleLog').should('be.calledOnce');
  627. });
  628. it('test open & close', () => {
  629. cy.visit('http://localhost:6006/iframe.html?id=datepicker--feat-ref-open&args=&viewMode=story');
  630. cy.get('button').contains('open').eq(0).click();
  631. cy.get('.semi-popover .semi-datepicker');
  632. cy.get('button').contains('close').eq(0).click();
  633. cy.get('.semi-popover .semi-datepicker').should('not.exist');
  634. });
  635. it('test needConfirm + close', () => {
  636. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm-in-tabs&args=&viewMode=story');
  637. cy.get('.semi-input').eq(0).click();
  638. cy.get('.semi-popover .semi-datepicker');
  639. cy.get('.semi-tabs-tab').contains('快速起步').click();
  640. cy.get('.semi-popover .semi-datepicker').should('not.exist');
  641. });
  642. it('test focus + blur + date type', () => {
  643. cy.visit('http://localhost:6006/iframe.html?id=datepicker--feat-ref-focus&args=&viewMode=story');
  644. cy.get('[data-cy=single] .semi-button').contains('focus').eq(0).click();
  645. cy.get('[data-cy=single] .semi-input-wrapper-focus');
  646. cy.get('[data-cy=single] input').should('be.focused');
  647. cy.get('[data-cy=single] .semi-button').contains('blur').eq(0).click();
  648. cy.get('[data-cy=single] .semi-input-wrapper-focus').should('not.exist');
  649. cy.get('[data-cy=single] input').should('not.be.focused');
  650. });
  651. it('test focus + blur + dateRange type', () => {
  652. cy.visit('http://localhost:6006/iframe.html?id=datepicker--feat-ref-focus&args=&viewMode=story');
  653. cy.get('[data-cy=range] .semi-button').contains('focus default').click();
  654. cy.get('[data-cy=range] .semi-datepicker-range-input-wrapper-start .semi-input-wrapper-focus');
  655. cy.get('[data-cy=range] .semi-datepicker-range-input-wrapper-start input').should('be.focused');
  656. cy.get('[data-cy=range] .semi-button').contains('focus end').click();
  657. cy.get('[data-cy=range] .semi-datepicker-range-input-wrapper-end .semi-input-wrapper-focus');
  658. cy.get('[data-cy=range] .semi-datepicker-range-input-wrapper-end input').should('be.focused');
  659. cy.get('[data-cy=range] .semi-button').contains('blur').eq(0).click();
  660. cy.get('[data-cy=range] .semi-input-wrapper-focus').should('not.exist');
  661. cy.get('[data-cy=range] input').eq(0).should('not.be.focused');
  662. cy.get('[data-cy=range] input').eq(1).should('not.be.focused');
  663. });
  664. it('test focus + blur + inset type', () => {
  665. cy.visit('http://localhost:6006/iframe.html?id=datepicker--feat-ref-focus&args=&viewMode=story');
  666. cy.get('[data-cy=inset] .semi-button').contains('focus start + open').click();
  667. cy.get('.semi-datepicker-inset-input-wrapper input').eq(0).should('be.focused');
  668. cy.get('[data-cy=inset] .semi-button').contains('focus end + open').click({ force: true });
  669. cy.get('.semi-datepicker-inset-input-wrapper input').eq(1).should('be.focused');
  670. cy.get('[data-cy=inset] .semi-button').contains('blur + close').eq(0).click({ force: true });
  671. cy.get('[data-cy=inset] input').eq(0).should('not.be.focused');
  672. cy.get('[data-cy=inset] input').eq(1).should('not.be.focused');
  673. });
  674. it('test dynamic disabledDate select', () => {
  675. cy.visit('http://localhost:6006/iframe.html?id=datepicker--dynamic-disabled-date&viewMode=story');
  676. cy.get('.semi-input').eq(0).click();
  677. cy.get('.semi-popover .semi-datepicker-month-grid-left .semi-datepicker-day').contains('5').click();
  678. cy.get('.semi-popover .semi-datepicker-month-grid-left .semi-datepicker-day').contains('10').click();
  679. cy.get('.semi-input').eq(0).click();
  680. cy.get('.semi-popover .semi-datepicker-month-grid-right .semi-datepicker-day').contains('6').click();
  681. cy.get('.semi-popover .semi-datepicker-month-grid-right .semi-datepicker-day').contains('11').click();
  682. cy.get('.semi-input').eq(0).should('have.value', '2023-05-06');
  683. cy.get('.semi-input').eq(1).should('have.value', '2023-05-11');
  684. cy.get('.semi-input').eq(0).click();
  685. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('6');
  686. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('11');
  687. });
  688. // github action 报错,本地不报错,skip it
  689. it.skip('test dynamic disabled', () => {
  690. cy.visit('http://localhost:6006/iframe.html?id=datepicker--dynamic-disabled-date&viewMode=story');
  691. cy.get('.semi-input').eq(0).click();
  692. cy.get('.semi-popover .semi-datepicker-month-grid-left .semi-datepicker-day').contains('5').click();
  693. cy.get('.semi-popover .semi-datepicker-month-grid-left .semi-datepicker-day').contains('10').click();
  694. cy.get('.semi-input').eq(0).click();
  695. cy.get('.semi-popover .semi-datepicker-month-grid-right .semi-datepicker-day').contains('6').click();
  696. cy.get('.semi-popover .semi-datepicker-month-grid-right .semi-datepicker-day-disabled').contains('27');
  697. cy.get('.semi-popover .semi-datepicker-month-grid-right .semi-datepicker-day-disabled').contains('26').should('not.exist');
  698. });
  699. it('test disabled date', () => {
  700. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-disabled-date&viewMode=story');
  701. cy.get('.semi-input').eq(0).click();
  702. cy.get('.semi-popover .semi-datepicker-month-grid-left .semi-datepicker-day').contains('3').click();
  703. cy.get('.semi-popover .semi-datepicker-month-grid-left .semi-datepicker-day').contains('10').click();
  704. cy.get('.semi-input').eq(0).should('have.value', '2023-05-03');
  705. cy.get('.semi-input').eq(1).should('have.value', '2023-05-10');
  706. });
  707. it('test split first inset input + dateTime', () => {
  708. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-split-input&viewMode=story');
  709. cy.get('[data-cy=dateTime] .semi-input').click();
  710. cy.window().then(window => {
  711. window.document.querySelector('.semi-popover .semi-input').setAttribute('value', '2023-09-05 17:41:36');
  712. cy.get('.semi-popover .semi-input').eq(0).trigger('change')
  713. cy.get('.semi-popover .semi-input').eq(0).should('have.value', '2023-09-05');
  714. cy.get('.semi-popover .semi-input').eq(1).should('have.value', '17:41:36');
  715. cy.get('.semi-datepicker-day-selected').contains("5");
  716. })
  717. });
  718. it('test split first inset input + dateTimeRange', () => {
  719. cy.visit('http://localhost:6006/iframe.html?id=datepicker--auto-split-input&viewMode=story');
  720. cy.get('[data-cy=dateTimeRange] .semi-input').eq(0).click();
  721. cy.window().then(window => {
  722. window.document.querySelector('.semi-popover .semi-input').setAttribute('value', '2023-10-09 16:14:31 ~ 2023-10-13 16:14:31');
  723. cy.get('.semi-popover .semi-input').eq(0).trigger('change')
  724. cy.get('.semi-popover .semi-input').eq(0).should('have.value', '2023-10-09');
  725. cy.get('.semi-popover .semi-input').eq(1).should('have.value', '16:14:31');
  726. cy.get('.semi-popover .semi-input').eq(2).should('have.value', '2023-10-13');
  727. cy.get('.semi-popover .semi-input').eq(3).should('have.value', '16:14:31');
  728. cy.get('.semi-datepicker-day-selected-start').contains("9");
  729. cy.get('.semi-datepicker-day-selected-end').contains("13");
  730. })
  731. });
  732. it('month type after click clear button, restore to initial state', () => {
  733. cy.visit('http://localhost:6006/iframe.html?id=datepicker--month-picker&viewMode=story');
  734. const now = new Date();
  735. const year = now.getFullYear();
  736. const month = now.getMonth() + 1;
  737. // click MonthPicker with controlledValue
  738. cy.get('.semi-datepicker .semi-input').eq(4).click();
  739. cy.get('.semi-datepicker .semi-input-clearbtn').click();
  740. cy.get('.semi-scrolllist-item-sel').eq(0).contains(`${year}年`);
  741. cy.get('.semi-scrolllist-item-sel').eq(1).contains(`${month}月`);
  742. cy.get('body').click('right');
  743. cy.get('.semi-datepicker .semi-input').eq(-1).click();
  744. cy.get('.semi-datepicker .semi-input-clearbtn').click();
  745. cy.get('.semi-scrolllist-item-sel').eq(0).contains(`${year}年`);
  746. cy.get('.semi-scrolllist-item-sel').eq(2).contains(`${month+1 <= 12 ? year : year + 1}年`);
  747. cy.get('.semi-scrolllist-item-sel').eq(1).contains(`${month}月`);
  748. cy.get('.semi-scrolllist-item-sel').eq(3).contains(`${month+1 <= 12 ? month+1 : 1}月`);
  749. });
  750. it('test split first inset input + dateTimeRange', () => {
  751. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fix-need-confirm-controlled&viewMode=story');
  752. cy.get('.semi-input').eq(0).click();
  753. cy.get('.semi-datepicker-day').contains('15').trigger('click');
  754. cy.get('.semi-input').should('have.value', '2024-02-15 00:00:00');
  755. cy.get('button').contains('确定').trigger('click');
  756. cy.get('.semi-input').should('have.value', '');
  757. cy.wait(300);
  758. cy.get('.semi-input').eq(1).click();
  759. cy.get('.semi-datepicker-day').contains('15').trigger('click');
  760. cy.get('.semi-input').eq(1).should('have.value', '2024-02-15 00:00:00');
  761. cy.get('button').contains('确定').trigger('click');
  762. cy.get('.semi-input').eq(1).should('have.value', '');
  763. });
  764. it('test DatePicker props value is NaN', () => {
  765. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fixed-na-n&viewMode=story');
  766. cy.get('.semi-input').eq(0).should('have.value', '');
  767. cy.get('.semi-input').eq(1).should('have.value', '');
  768. cy.get('.semi-input').eq(0).click();
  769. cy.get('.semi-datepicker-day').contains('15').trigger('click');
  770. cy.get('.semi-datepicker-day').contains('15').trigger('click');
  771. cy.get('.semi-button').contains('set NaN').click();
  772. cy.get('.semi-input').eq(0).should('have.value', '');
  773. cy.get('.semi-input').eq(1).should('have.value', '');
  774. });
  775. it('presets start and end support function type', () => {
  776. cy.visit('http://localhost:6006/iframe.html?id=datepicker--presets-function-type&viewMode=story');
  777. cy.get('.semi-input').eq(0).click();
  778. cy.get('button').contains('动态时间').click();
  779. cy.get('.semi-input').eq(0).should('have.value', '2024-01-24');
  780. cy.get('.semi-input').eq(1).should('have.value', '2024-02-26');
  781. });
  782. it('fixed selected status bug when double click', () => {
  783. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fixed-selected-status&viewMode=story');
  784. cy.get('.semi-input').eq(0).click();
  785. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('15')
  786. .then($day => {
  787. $day.trigger('click');
  788. });
  789. cy.get('.semi-datepicker-day-selected').contains("15");
  790. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('15')
  791. .then($day => {
  792. $day.trigger('click');
  793. });
  794. cy.get('.semi-datepicker-day-selected').contains("15");
  795. })
  796. it('fixed selected is not update when close panel', () => {
  797. cy.visit('http://localhost:6006/iframe.html?id=datepicker--fixed-controlled&viewMode=story');
  798. cy.get('.semi-input').eq(1).click();
  799. cy.get('.semi-datepicker-day').contains('15')
  800. .then($day => {
  801. $day.trigger('click');
  802. });
  803. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('8');
  804. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('15');
  805. cy.get('.semi-input').eq(0).click();
  806. cy.get('.semi-datepicker-day').contains('10')
  807. .then($day => {
  808. $day.trigger('click');
  809. });
  810. cy.get('.semi-input').eq(0).click();
  811. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('8');
  812. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('9');
  813. });
  814. it('fixed selected value does not show when value is controlled', () => {
  815. cy.visit('http://localhost:6006/iframe.html?args=&id=datepicker--fixed-controlled-value&viewMode=story');
  816. cy.get('.semi-input').eq(0).click();
  817. cy.get('.semi-datepicker-month-grid-left .semi-datepicker-day').contains('15')
  818. .then($day => {
  819. $day.trigger('click');
  820. });
  821. cy.get('.semi-datepicker-month-grid-right .semi-datepicker-day').contains('20')
  822. .then($day => {
  823. $day.trigger('click');
  824. });
  825. cy.get('.semi-input').eq(0).click();
  826. cy.get('.semi-popover .semi-datepicker-day-selected-start').contains('15');
  827. cy.get('.semi-popover .semi-datepicker-day-selected-end').contains('20');
  828. });
  829. it('auto Correction month under month range', () => {
  830. cy.visit('http://localhost:6006/iframe.html?args=&id=datepicker--fix-2567&viewMode=story');
  831. cy.get('.semi-input').eq(0).click();
  832. cy.get('.semi-scrolllist').eq(1).contains('2024').click();
  833. cy.get('.semi-input').eq(0).should("have.value", "2024-11 ~ 2024-11");
  834. cy.root().click('right');
  835. cy.get('.semi-input').eq(1).click();
  836. cy.get('.semi-scrolllist').eq(1).contains('2024').click();
  837. cy.get('.semi-input').eq(1).should("have.value", "2024-11 ~ 2024-11");
  838. cy.root().click('right');
  839. cy.get('.semi-input').eq(2).click();
  840. cy.get('.semi-scrolllist').eq(0).contains('2025').click();
  841. cy.get('.semi-input').eq(2).should("have.value", "2025-01 ~ 2025-01");
  842. })
  843. });