Advertisement
Guest User

Untitled

a guest
Aug 4th, 2017
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. 'use strict'
  2.  
  3. var _ = require('lodash')
  4. var expect = require('chai').expect
  5.  
  6. var Account = require('../models/Account')
  7.  
  8. var testData = {
  9. // Default data for test account
  10. testAccount: {
  11. username: 'john.doe',
  12. password: 'FooBar@123',
  13. email: 'john.doe@sasset.io'
  14. },
  15.  
  16. // Values that can work for any schema property
  17. commonSchema: {
  18. invalid: [{
  19. value: '',
  20. reason: 'an empty string was provided'
  21. },{
  22. value: null,
  23. reason: 'a null value was provided'
  24. },{
  25. value: undefined,
  26. reason: 'an undefined value was provided'
  27. }]
  28. },
  29.  
  30. // Valid/invalid values for schema items, as well as the reason
  31. schema: {
  32. // Values for schema item "username"
  33. username: {
  34. invalid: [{
  35. value: '',
  36. reason: 'an empty string was provided'
  37. },{
  38. value: null,
  39. reason: 'a null value was provided'
  40. },{
  41. value: undefined,
  42. reason: 'an undefined value was provided'
  43. },{
  44. value: { foo: true },
  45. reason: 'an object was provided (instead of a string)'//'string required, object provided'
  46. },{
  47. value: [1,2,3],
  48. reason: 'an array was provided (instead of a string)'//'string required, array provided'
  49. },{
  50. value: 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz',
  51. reason: 'the value provided was too long'
  52. },{
  53. value: '12tester',
  54. reason: 'value provided starts with a numerical character'
  55. },{
  56. value: 'tester123',
  57. reason: 'value provided ends with a numerical character'
  58. },{
  59. value: '-test',
  60. reason: 'value provided starts with a special character'
  61. },{
  62. value: 'test-',
  63. reason: 'value provided ends with a special character'
  64. },{
  65. value: 'john*doe',
  66. reason: 'value provided contains an illegal special character (*)'
  67. }]
  68. },
  69.  
  70. // Values for schema item "password"
  71. password: {
  72. invalid: [{
  73. value: '',
  74. reason: 'an empty string was provided'
  75. },{
  76. value: null,
  77. reason: 'a null value was provided'
  78. },{
  79. value: undefined,
  80. reason: 'an undefined value was provided'
  81. }]
  82. },
  83.  
  84. // Values for schema item "email"
  85. email: {
  86. invalid: [{
  87. value: '',
  88. reason: 'an empty string was provided'
  89. },{
  90. value: null,
  91. reason: 'a null value was provided'
  92. },{
  93. value: undefined,
  94. reason: 'an undefined value was provided'
  95. },{
  96. value: '',
  97. reason: 'an empty string was provided'
  98. },{
  99. value: null,
  100. reason: 'a null value was provided'
  101. },{
  102. value: undefined,
  103. reason: 'an undefined value was provided'
  104. },{
  105. value: 'john<dot>doe<at>site<dot>com',
  106. reason: 'value provided contains illegal special chars'
  107. },{
  108. value: 'john doe@site.com',
  109. reason: 'value provided contains spaces'
  110. },{
  111. value: 'john@doe@site.com',
  112. reason: 'value provided contains two @ symbols'
  113. }]
  114. },
  115.  
  116. // Values for schema item "status"
  117. status: {
  118. invalid: [{
  119. value: '',
  120. reason: 'an empty string was provided'
  121. },{
  122. value: null,
  123. reason: 'a null value was provided'
  124. },{
  125. value: 'blah',
  126. reason: 'the string value provided was an invalid state (blah)'
  127. },{
  128. value: '',
  129. reason: ''
  130. }],
  131. valid: [{
  132. value: 'disabled',
  133. reason: 'given the valid state "disabled"'
  134. },{
  135. value: 'validated',
  136. reason: 'given the valid state "validated"'
  137. },{
  138. value: 'enabled',
  139. reason: 'given the valid state "enabled"'
  140. },{
  141. value: undefined,
  142. reason: 'an undefined value was provided'
  143. }]
  144. }
  145. }
  146. }
  147.  
  148. describe('Account model', function() {
  149. describe('schema item', function() {
  150. _.each( testData.schema, ( testValues, schemaItem ) => {
  151.  
  152. describe( `"${schemaItem}"`, function() {
  153.  
  154. if ( _.has( testValues, 'invalid' ) && ! _.isEmpty( testValues.invalid ) ){
  155. describe('should be invalid if', function() {
  156.  
  157. _.each( testValues.invalid, ( testVal, testValIdx ) => {
  158. it( `${testVal.reason}`, function(done) {
  159. var account = new Account()
  160. var error
  161.  
  162. _.assignIn( account, testData.testAccount )
  163.  
  164. account[ schemaItem ] = testVal.value
  165.  
  166. account.validate(function(err) {
  167. expect( err.errors[ schemaItem ] ).to.exist
  168. done()
  169. })
  170. })
  171. })
  172. })
  173. }
  174.  
  175. if ( _.has( testValues, 'valid' ) && ! _.isEmpty( testValues.valid ) ){
  176. describe('should be valid if', function() {
  177.  
  178. _.each( testValues.valid, ( testVal, testValIdx ) => {
  179. it( `${testVal.reason}`, function(done) {
  180. var account = new Account()
  181. var error
  182.  
  183. _.assignIn( account, testData.testAccount )
  184.  
  185. account[ schemaItem ] = testVal.value
  186.  
  187. account.validate(function(err) {
  188. expect( err ).to.be.null
  189. done()
  190. })
  191. })
  192. })
  193. })
  194. }
  195. })
  196. })
  197. })
  198. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement