Guest User

Untitled

a guest
Oct 27th, 2017
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. const Joi = require('joi')
  2.  
  3.  
  4. const main = () => {
  5. const VALID_TITLES = ["Mr.", "Mrs.", "Ms."]
  6. const ADDRESS_HOME = "Home"
  7. const ADDRESS_OFFICE = "Office"
  8. const VALID_ADDRESS_TYPES = [ADDRESS_HOME, ADDRESS_OFFICE]
  9.  
  10. const digitalSchema = Joi.object().keys({
  11. payment_type: Joi.string().trim().required(),
  12. title: Joi.string().valid(VALID_TITLES).required(),
  13. first_name: Joi.string().trim().required(),
  14. email: Joi.string().email().required(),
  15. phone: Joi.string().required()
  16. })
  17.  
  18. const nonDigitalSchema = digitalSchema.keys({
  19. addressType: Joi.string().valid(VALID_ADDRESS_TYPES).required(),
  20. city: Joi.string().trim().required()
  21. }).when(Joi.object({ addressType: Joi.equal(ADDRESS_HOME)}).unknown(), {
  22. then: digitalSchema.keys({
  23. addressHome: Joi.string().trim().required(),
  24. rt: Joi.string().trim().required(),
  25. rw: Joi.string().trim().required(),
  26. postalCodeHome: Joi.string().trim().required()
  27. }),
  28. otherwise: digitalSchema.keys({
  29. company: Joi.string().trim().required(),
  30. building: Joi.string().trim().required(),
  31. divisionOrFloor: Joi.string().trim().required(),
  32. addressOffice: Joi.string().trim().required(),
  33. postalCodeOffice: Joi.string().trim().required(),
  34. })
  35. })
  36.  
  37. const testDigital = {
  38. payment_type: 'bank_transfer',
  39. title: 'Mr.',
  40. first_name: 'Aditya',
  41. email: 'zeandcode@gmail.com',
  42. phone: '085716114422'
  43. }
  44.  
  45. const testHome = {
  46. payment_type: 'bank_transfer',
  47. title: 'Mr.',
  48. first_name: 'Aditya',
  49. email: 'zeandcode@gmail.com',
  50. phone: '085716114422',
  51. addressType: 'Home',
  52. city: 'Bekasi',
  53. addressHome: 'Jl. S. Parman',
  54. rt: '01',
  55. rw: '02',
  56. postalCodeHome: '17171'
  57. }
  58.  
  59. const testOffice = {
  60. payment_type: 'bank_transfer',
  61. title: 'Mr.',
  62. first_name: 'Aditya',
  63. email: 'zeandcode@gmail.com',
  64. phone: '085716114422',
  65. addressType: 'Office',
  66. city: 'Bekasi',
  67. company: 'TADA',
  68. building: 'Kuningan',
  69. divisionOrFloor: '5L',
  70. addressOffice: 'Sudirman',
  71. postalCodeOffice: '18367'
  72. }
  73.  
  74. console.log('Test result: ', Joi.validate(testDigital, digitalSchema))
  75. console.log('Test result: ', Joi.validate(testHome, nonDigitalSchema))
  76. console.log('Test result: ', Joi.validate(testOffice, nonDigitalSchema))
  77. }
  78.  
  79. // run by execute node joi_conditional_schema on console
  80. main()
Add Comment
Please, Sign In to add comment