Extract and set form values through the DOM—no frameworks required! https://github.com/TheoryOfNekomata/formxtra
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

266 wiersze
6.4 KiB

  1. import { getFormValues, setFormValues } from '../../src';
  2. import * as utils from '../utils'
  3. describe('number', () => {
  4. describe('basic', () => {
  5. beforeEach(utils.setup(`
  6. <!DOCTYPE html>
  7. <html lang="en-PH">
  8. <head>
  9. <meta charset="UTF-8">
  10. <title>Number/Basic</title>
  11. </head>
  12. <body>
  13. <form>
  14. <label>
  15. <span>Hello</span>
  16. <input type="number" name="hello" min="0" max="10" value="5" />
  17. </label>
  18. <button type="submit">Submit</button>
  19. </form>
  20. </body>
  21. </html>
  22. `))
  23. it('should have single form value', () => {
  24. utils.test({
  25. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  26. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  27. const before = utils.makeSearchParams(getFormValues(form, { submitter, forceNumberValues: true, }))
  28. .toString();
  29. const after = utils.makeSearchParams(search)
  30. .toString();
  31. expect(before)
  32. .toEqual(after);
  33. },
  34. expectedStaticValue: {
  35. hello: '5',
  36. },
  37. });
  38. });
  39. })
  40. describe('disabled', () => {
  41. beforeEach(utils.setup(`
  42. <!DOCTYPE html>
  43. <html lang="en-PH">
  44. <head>
  45. <meta charset="UTF-8">
  46. <title>Number/Disabled</title>
  47. </head>
  48. <body>
  49. <form>
  50. <label>
  51. <span>Hello</span>
  52. <input
  53. type="number" name="hello" min="0" max="10" value="5"
  54. disabled
  55. />
  56. </label>
  57. <button type="submit">Submit</button>
  58. </form>
  59. </body>
  60. </html>
  61. `))
  62. it('should have blank form value', () => {
  63. utils.test({
  64. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  65. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  66. const before = utils.makeSearchParams(getFormValues(form, { submitter }))
  67. .toString();
  68. const after = utils.makeSearchParams(search)
  69. .toString();
  70. expect(before)
  71. .toEqual(after);
  72. },
  73. expectedStaticValue: {},
  74. });
  75. });
  76. })
  77. describe('outside', () => {
  78. beforeEach(utils.setup(`
  79. <!DOCTYPE html>
  80. <html lang="en-PH">
  81. <head>
  82. <meta charset="UTF-8">
  83. <title>Number/Outside</title>
  84. </head>
  85. <body>
  86. <form id="form">
  87. <button type="submit">Submit</button>
  88. </form>
  89. <label>
  90. <span>Hello</span>
  91. <input type="number" name="hello" min="0" max="10" value="5" form="form" />
  92. </label>
  93. </body>
  94. </html>
  95. `))
  96. it('should have single form value', () => {
  97. utils.test({
  98. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  99. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  100. const before = utils.makeSearchParams(getFormValues(form, { submitter }))
  101. .toString();
  102. const after = utils.makeSearchParams(search)
  103. .toString();
  104. expect(before)
  105. .toEqual(after);
  106. },
  107. expectedStaticValue: {
  108. hello: '5',
  109. },
  110. });
  111. });
  112. });
  113. describe('readonly', () => {
  114. beforeEach(utils.setup(`
  115. <!DOCTYPE html>
  116. <html lang="en-PH">
  117. <head>
  118. <meta charset="UTF-8">
  119. <title>Number/Readonly</title>
  120. </head>
  121. <body>
  122. <form>
  123. <label>
  124. <span>Hello</span>
  125. <input
  126. type="number" name="hello" min="0" max="10" value="5"
  127. readonly
  128. />
  129. </label>
  130. <button type="submit">Submit</button>
  131. </form>
  132. </body>
  133. </html>
  134. `))
  135. it('should have single form value', () => {
  136. utils.test({
  137. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  138. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  139. const before = utils.makeSearchParams(getFormValues(form, { submitter }))
  140. .toString();
  141. const after = utils.makeSearchParams(search)
  142. .toString();
  143. expect(before)
  144. .toEqual(after);
  145. },
  146. expectedStaticValue: {
  147. hello: '5',
  148. },
  149. });
  150. });
  151. });
  152. describe('programmatic value setting', () => {
  153. beforeEach(utils.setup(`
  154. <!DOCTYPE html>
  155. <html lang="en-PH">
  156. <head>
  157. <meta charset="UTF-8">
  158. <title>Number/Programmatic Value Setting</title>
  159. </head>
  160. <body>
  161. <form>
  162. <label>
  163. <span>Hello</span>
  164. <input type="number" name="hello" />
  165. </label>
  166. <button type="submit">Submit</button>
  167. </form>
  168. </body>
  169. </html>
  170. `));
  171. it('should have form values set', () => {
  172. utils.test({
  173. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  174. onLoaded: (form: HTMLFormElement) => {
  175. setFormValues(form, { hello: 5, })
  176. },
  177. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  178. const before = utils.makeSearchParams(getFormValues(form, { submitter, forceNumberValues: true, }))
  179. .toString();
  180. const after = utils.makeSearchParams(search)
  181. .toString();
  182. expect(before)
  183. .toEqual(after);
  184. },
  185. expectedStaticValue: {
  186. hello: '5',
  187. },
  188. });
  189. });
  190. });
  191. describe('duplicate', () => {
  192. beforeEach(utils.setup(`
  193. <!DOCTYPE html>
  194. <html lang="en-PH">
  195. <head>
  196. <meta charset="UTF-8">
  197. <title>Number/Duplicate</title>
  198. </head>
  199. <body>
  200. <form>
  201. <label>
  202. <span>Hello 1</span>
  203. <input id="hello1" type="number" name="hello" min="0" max="10" value="5" />
  204. </label>
  205. <label>
  206. <span>Hello 2</span>
  207. <input id="hello2" type="number" name="hello" min="0" max="10" value="7" />
  208. </label>
  209. <button type="submit">Submit</button>
  210. </form>
  211. </body>
  212. </html>
  213. `));
  214. it('should get both values', () => {
  215. utils.test({
  216. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  217. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  218. const before = utils.makeSearchParams(getFormValues(form, { submitter, forceNumberValues: true, }))
  219. .toString();
  220. const after = utils.makeSearchParams(search)
  221. .toString();
  222. expect(before)
  223. .toEqual(after);
  224. },
  225. expectedStaticValue: {
  226. hello: ['5', '7'],
  227. },
  228. });
  229. });
  230. it('should set both values', () => {
  231. utils.test({
  232. onLoaded: (form: HTMLFormElement) => {
  233. setFormValues(form, {
  234. hello: [4, 2],
  235. })
  236. },
  237. querySubmitter: (cy: any) => cy.get('[type="submit"]'),
  238. onSubmitted: (form: HTMLFormElement, submitter: any, search: any) => {
  239. const before = utils.makeSearchParams(getFormValues(form, { submitter }))
  240. .toString();
  241. const after = utils.makeSearchParams(search)
  242. .toString();
  243. expect(before)
  244. .toEqual(after);
  245. },
  246. expectedStaticValue: {
  247. hello: ['4', '2'],
  248. },
  249. });
  250. });
  251. });
  252. })