You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.js 6.9 KiB

7 vuotta sitten
7 vuotta sitten
7 vuotta sitten
7 vuotta sitten
7 vuotta sitten
7 vuotta sitten
7 vuotta sitten
7 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /* eslint-env mocha */
  2. import expect from "expect"
  3. import { fromJS } from "immutable"
  4. import { mapToList, validateNumber, validateInteger, validateParam } from "core/utils"
  5. describe("utils", function(){
  6. describe("mapToList", function(){
  7. it("should convert a map to a list, setting `key`", function(){
  8. // With
  9. const aMap = fromJS({
  10. a: {
  11. one: 1,
  12. },
  13. b: {
  14. two: 2,
  15. }
  16. })
  17. // When
  18. const aList = mapToList(aMap, "someKey")
  19. // Then
  20. expect(aList.toJS()).toEqual([
  21. { someKey: "a", one: 1 },
  22. { someKey: "b", two: 2 },
  23. ])
  24. })
  25. it("should flatten an arbitrarily deep map", function(){
  26. // With
  27. const aMap = fromJS({
  28. a: {
  29. one: {
  30. alpha: true
  31. }
  32. },
  33. b: {
  34. two: {
  35. bravo: true
  36. },
  37. three: {
  38. charlie: true
  39. }
  40. }
  41. })
  42. // When
  43. const aList = mapToList(aMap, ["levelA", "levelB"])
  44. // Then
  45. expect(aList.toJS()).toEqual([
  46. { levelA: "a", levelB: "one", alpha: true },
  47. { levelA: "b", levelB: "two", bravo: true },
  48. { levelA: "b", levelB: "three", charlie: true },
  49. ])
  50. })
  51. it("should handle an empty map", function(){
  52. // With
  53. const aMap = fromJS({})
  54. // When
  55. const aList = mapToList(aMap, ["levelA", "levelB"])
  56. // Then
  57. expect(aList.toJS()).toEqual([])
  58. })
  59. })
  60. describe("validateNumber", function() {
  61. let errorMessage = "Value must be a number"
  62. it("doesn't return for whole numbers", function() {
  63. expect(validateNumber(0)).toBeFalsy()
  64. expect(validateNumber(1)).toBeFalsy()
  65. expect(validateNumber(20)).toBeFalsy()
  66. expect(validateNumber(5000000)).toBeFalsy()
  67. expect(validateNumber("1")).toBeFalsy()
  68. expect(validateNumber("2")).toBeFalsy()
  69. expect(validateNumber(-1)).toBeFalsy()
  70. expect(validateNumber(-20)).toBeFalsy()
  71. expect(validateNumber(-5000000)).toBeFalsy()
  72. })
  73. it("doesn't return for negative numbers", function() {
  74. expect(validateNumber(-1)).toBeFalsy()
  75. expect(validateNumber(-20)).toBeFalsy()
  76. expect(validateNumber(-5000000)).toBeFalsy()
  77. })
  78. it("doesn't return for decimal numbers", function() {
  79. expect(validateNumber(1.1)).toBeFalsy()
  80. expect(validateNumber(2.5)).toBeFalsy()
  81. expect(validateNumber(-30.99)).toBeFalsy()
  82. })
  83. it("returns a message for strings", function() {
  84. expect(validateNumber("")).toEqual(errorMessage)
  85. expect(validateNumber(" ")).toEqual(errorMessage)
  86. expect(validateNumber("test")).toEqual(errorMessage)
  87. })
  88. it("returns a message for invalid input", function() {
  89. expect(validateNumber(undefined)).toEqual(errorMessage)
  90. expect(validateNumber(null)).toEqual(errorMessage)
  91. expect(validateNumber({})).toEqual(errorMessage)
  92. expect(validateNumber([])).toEqual(errorMessage)
  93. expect(validateNumber(true)).toEqual(errorMessage)
  94. expect(validateNumber(false)).toEqual(errorMessage)
  95. })
  96. })
  97. describe("validateInteger", function() {
  98. let errorMessage = "Value must be an integer"
  99. it("doesn't return for positive integers", function() {
  100. expect(validateInteger(0)).toBeFalsy()
  101. expect(validateInteger(1)).toBeFalsy()
  102. expect(validateInteger(20)).toBeFalsy()
  103. expect(validateInteger(5000000)).toBeFalsy()
  104. expect(validateInteger("1")).toBeFalsy()
  105. expect(validateInteger("2")).toBeFalsy()
  106. expect(validateInteger(-1)).toBeFalsy()
  107. expect(validateInteger(-20)).toBeFalsy()
  108. expect(validateInteger(-5000000)).toBeFalsy()
  109. })
  110. it("doesn't return for negative integers", function() {
  111. expect(validateInteger(-1)).toBeFalsy()
  112. expect(validateInteger(-20)).toBeFalsy()
  113. expect(validateInteger(-5000000)).toBeFalsy()
  114. })
  115. it("returns a message for decimal values", function() {
  116. expect(validateInteger(1.1)).toEqual(errorMessage)
  117. expect(validateInteger(2.5)).toEqual(errorMessage)
  118. expect(validateInteger(-30.99)).toEqual(errorMessage)
  119. })
  120. it("returns a message for strings", function() {
  121. expect(validateInteger("")).toEqual(errorMessage)
  122. expect(validateInteger(" ")).toEqual(errorMessage)
  123. expect(validateInteger("test")).toEqual(errorMessage)
  124. })
  125. it("returns a message for invalid input", function() {
  126. expect(validateInteger(undefined)).toEqual(errorMessage)
  127. expect(validateInteger(null)).toEqual(errorMessage)
  128. expect(validateInteger({})).toEqual(errorMessage)
  129. expect(validateInteger([])).toEqual(errorMessage)
  130. expect(validateInteger(true)).toEqual(errorMessage)
  131. expect(validateInteger(false)).toEqual(errorMessage)
  132. })
  133. })
  134. describe("validateParam", function() {
  135. let param = null
  136. let result = null
  137. it("validates required strings", function() {
  138. param = fromJS({
  139. required: true,
  140. type: "string",
  141. value: ""
  142. })
  143. result = validateParam( param, false )
  144. expect( result ).toEqual( ["Required field is not provided"] )
  145. })
  146. it("validates required arrays", function() {
  147. param = fromJS({
  148. required: true,
  149. type: "array",
  150. value: []
  151. })
  152. result = validateParam( param, false )
  153. expect( result ).toEqual( ["Required field is not provided"] )
  154. param = fromJS({
  155. required: true,
  156. type: "array",
  157. value: []
  158. })
  159. result = validateParam( param, false )
  160. expect( result ).toEqual( ["Required field is not provided"] )
  161. })
  162. it("validates numbers", function() {
  163. param = fromJS({
  164. required: false,
  165. type: "number",
  166. value: "test"
  167. })
  168. result = validateParam( param, false )
  169. expect( result ).toEqual( ["Value must be a number"] )
  170. })
  171. it("validates integers", function() {
  172. param = fromJS({
  173. required: false,
  174. type: "integer",
  175. value: "test"
  176. })
  177. result = validateParam( param, false )
  178. expect( result ).toEqual( ["Value must be an integer"] )
  179. })
  180. it("validates arrays", function() {
  181. // empty array
  182. param = fromJS({
  183. required: false,
  184. type: "array",
  185. value: []
  186. })
  187. result = validateParam( param, false )
  188. expect( result ).toEqual( [] )
  189. // numbers
  190. param = fromJS({
  191. required: false,
  192. type: "array",
  193. value: ["number"],
  194. items: {
  195. type: "number"
  196. }
  197. })
  198. result = validateParam( param, false )
  199. expect( result ).toEqual( [{index: 0, error: "Value must be a number"}] )
  200. // integers
  201. param = fromJS({
  202. required: false,
  203. type: "array",
  204. value: ["not", "numbers"],
  205. items: {
  206. type: "integer"
  207. }
  208. })
  209. result = validateParam( param, false )
  210. expect( result ).toEqual( [{index: 0, error: "Value must be an integer"}, {index: 1, error: "Value must be an integer"}] )
  211. })
  212. })
  213. })