hostsFn.test.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. /**
  2. * @author: oldj
  3. * @homepage: https://oldj.net
  4. */
  5. import { describe, expect, it } from 'vitest'
  6. import type { IHostsListObject } from '../../src/common/data'
  7. import { findItemById, setOnStateOfItem } from '../../src/common/hostsFn'
  8. describe('hostsFn test', () => {
  9. const makeAList = (): IHostsListObject[] => {
  10. return [
  11. { id: '1' },
  12. {
  13. id: '2', type: 'folder', folder_mode: 0, children: [
  14. { id: '2.1' },
  15. { id: '2.2' },
  16. { id: '2.3' },
  17. ],
  18. },
  19. {
  20. id: '3', type: 'folder', folder_mode: 1, children: [
  21. { id: '3.1' },
  22. { id: '3.2' },
  23. { id: '3.3' },
  24. {
  25. id: '3.4', type: 'folder', folder_mode: 2, children: [
  26. { id: '3.4.1' },
  27. { id: '3.4.2' },
  28. { id: '3.4.3' },
  29. ],
  30. },
  31. ],
  32. },
  33. {
  34. id: '4', type: 'folder', folder_mode: 2, children: [
  35. { id: '4.1' },
  36. { id: '4.2' },
  37. { id: '4.3' },
  38. {
  39. id: '4.4', type: 'folder', folder_mode: 1, children: [
  40. { id: '4.4.1' },
  41. { id: '4.4.2' },
  42. { id: '4.4.3' },
  43. ],
  44. },
  45. ],
  46. },
  47. { id: '5' },
  48. { id: '6' },
  49. ]
  50. }
  51. const getItem = (list: IHostsListObject[], id: string): any => findItemById(list, id) || {}
  52. const expectItemOn = (list: IHostsListObject[], id: string, value: boolean) => {
  53. expect(Boolean(getItem(list, id).on)).toBe(value)
  54. }
  55. const expectTopLevelOn = (list: IHostsListObject[], expected: boolean[]) => {
  56. expect(list.slice(0, expected.length).map((item) => Boolean(item.on))).toEqual(expected)
  57. }
  58. it('updateOneItem top level test', () => {
  59. let list: IHostsListObject[] = [
  60. { id: '1' },
  61. ]
  62. list = setOnStateOfItem(list, '1', true, 0)
  63. expectTopLevelOn(list, [true])
  64. list = [
  65. { id: '1' },
  66. { id: '2' },
  67. ]
  68. list = setOnStateOfItem(list, '1', true, 0)
  69. expectTopLevelOn(list, [true, false])
  70. list = setOnStateOfItem(list, '2', true, 0)
  71. expectTopLevelOn(list, [true, true])
  72. list = [
  73. { id: '1' },
  74. { id: '2', on: true },
  75. { id: '3', on: true },
  76. ]
  77. list = setOnStateOfItem(list, '1', true, 1)
  78. expectTopLevelOn(list, [true, false, false])
  79. list = [
  80. { id: '1' },
  81. { id: '2', on: true },
  82. { id: '3', on: true },
  83. ]
  84. list = setOnStateOfItem(list, '1', true, 2)
  85. expectTopLevelOn(list, [true, true, true])
  86. })
  87. it('updateOneItem folder test', () => {
  88. let list = makeAList()
  89. list = setOnStateOfItem(list, '1', true, 1)
  90. expectTopLevelOn(list, [true, false, false, false])
  91. list = setOnStateOfItem(list, '2', true, 1)
  92. expectTopLevelOn(list, [false, true, false, false])
  93. list = setOnStateOfItem(list, '2.1', true, 0)
  94. expectItemOn(list, '2.1', true)
  95. expectItemOn(list, '2.2', false)
  96. expectItemOn(list, '2.3', false)
  97. list = setOnStateOfItem(list, '2.2', true, 0)
  98. expectItemOn(list, '2.1', true)
  99. expectItemOn(list, '2.2', true)
  100. expectItemOn(list, '2.3', false)
  101. list = setOnStateOfItem(list, '2.3', true, 1)
  102. expectItemOn(list, '2.1', false)
  103. expectItemOn(list, '2.2', false)
  104. expectItemOn(list, '2.3', true)
  105. list = setOnStateOfItem(list, '2.1', true, 1)
  106. expectItemOn(list, '2.1', true)
  107. expectItemOn(list, '2.2', false)
  108. expectItemOn(list, '2.3', false)
  109. list = setOnStateOfItem(list, '2.2', true, 2)
  110. expectItemOn(list, '2.1', true)
  111. expectItemOn(list, '2.2', true)
  112. expectItemOn(list, '2.3', false)
  113. list = setOnStateOfItem(list, '3.1', true, 0)
  114. expectItemOn(list, '3.1', true)
  115. expectItemOn(list, '3.2', false)
  116. expectItemOn(list, '3.3', false)
  117. list = setOnStateOfItem(list, '3.2', true, 0)
  118. expectItemOn(list, '3.1', false)
  119. expectItemOn(list, '3.2', true)
  120. expectItemOn(list, '3.3', false)
  121. list = setOnStateOfItem(list, '3.3', true, 1)
  122. expectItemOn(list, '3.1', false)
  123. expectItemOn(list, '3.2', false)
  124. expectItemOn(list, '3.3', true)
  125. list = setOnStateOfItem(list, '3.1', true, 2)
  126. expectItemOn(list, '3.1', true)
  127. expectItemOn(list, '3.2', false)
  128. expectItemOn(list, '3.3', false)
  129. expectItemOn(list, '3.4', false)
  130. list = setOnStateOfItem(list, '3.4.1', true, 0)
  131. expectItemOn(list, '3.4.1', true)
  132. expectItemOn(list, '3.4.2', false)
  133. expectItemOn(list, '3.4.3', false)
  134. list = setOnStateOfItem(list, '3.4.2', true, 0)
  135. expectItemOn(list, '3.4.1', true)
  136. expectItemOn(list, '3.4.2', true)
  137. expectItemOn(list, '3.4.3', false)
  138. list = setOnStateOfItem(list, '3.4.3', true, 1)
  139. expectItemOn(list, '3.4.1', true)
  140. expectItemOn(list, '3.4.2', true)
  141. expectItemOn(list, '3.4.3', true)
  142. list = setOnStateOfItem(list, '3.4.3', false, 2)
  143. expectItemOn(list, '3.4.1', true)
  144. expectItemOn(list, '3.4.2', true)
  145. expectItemOn(list, '3.4.3', false)
  146. list = setOnStateOfItem(list, '4.1', true, 0)
  147. expectItemOn(list, '4.1', true)
  148. expectItemOn(list, '4.2', false)
  149. expectItemOn(list, '4.3', false)
  150. list = setOnStateOfItem(list, '4.2', true, 1)
  151. expectItemOn(list, '4.1', true)
  152. expectItemOn(list, '4.2', true)
  153. expectItemOn(list, '4.3', false)
  154. list = setOnStateOfItem(list, '4.3', true, 2)
  155. expectItemOn(list, '4.1', true)
  156. expectItemOn(list, '4.2', true)
  157. expectItemOn(list, '4.3', true)
  158. list = setOnStateOfItem(list, '4.4.1', true, 0)
  159. expectItemOn(list, '4.4.1', true)
  160. expectItemOn(list, '4.4.2', false)
  161. expectItemOn(list, '4.4.3', false)
  162. list = setOnStateOfItem(list, '4.4.2', true, 1)
  163. expectItemOn(list, '4.4.1', false)
  164. expectItemOn(list, '4.4.2', true)
  165. expectItemOn(list, '4.4.3', false)
  166. list = setOnStateOfItem(list, '4.4.3', true, 2)
  167. expectItemOn(list, '4.4.1', false)
  168. expectItemOn(list, '4.4.2', false)
  169. expectItemOn(list, '4.4.3', true)
  170. list = setOnStateOfItem(list, '4.4.3', false, 2)
  171. expectItemOn(list, '4.4.1', false)
  172. expectItemOn(list, '4.4.2', false)
  173. expectItemOn(list, '4.4.3', false)
  174. })
  175. })