object-model.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import React from "react"
  2. import { shallow } from "enzyme"
  3. import { List } from "immutable"
  4. import ObjectModel from "components/object-model"
  5. // import ModelExample from "components/model-example"
  6. import Immutable from "immutable"
  7. import Model from "components/model"
  8. import ModelCollapse from "components/model-collapse"
  9. import Property from "components/property"
  10. // import { inferSchema } from "corePlugins/samples/fn"
  11. describe("<ObjectModel />", function() {
  12. const dummyComponent = () => null
  13. const components = {
  14. "JumpToPath" : dummyComponent,
  15. "Markdown" : dummyComponent,
  16. "Model" : Model,
  17. "ModelCollapse" : ModelCollapse,
  18. "Property" : Property
  19. }
  20. const props = {
  21. getComponent: c => components[c],
  22. getConfigs: () => {
  23. return {
  24. showExtensions: true
  25. }
  26. },
  27. isRef : false,
  28. specPath: List(),
  29. schema: Immutable.fromJS(
  30. {
  31. "properties": {
  32. // Note reverse order: c, b, a
  33. c: {
  34. type: "integer",
  35. name: "c"
  36. },
  37. b: {
  38. type: "boolean",
  39. name: "b"
  40. },
  41. a: {
  42. type: "string",
  43. name: "a"
  44. }
  45. }
  46. }
  47. ),
  48. specSelectors: {
  49. isOAS3(){
  50. return false
  51. }
  52. },
  53. className: "for-test"
  54. }
  55. const propsNullable = {
  56. ...props,
  57. schema: props.schema.set("nullable", true)
  58. }
  59. const propsMinMaxProperties = {
  60. ...props,
  61. schema: props.schema.set("minProperties", 1).set("maxProperties", 5)
  62. }
  63. it("renders a collapsible header", function(){
  64. const wrapper = shallow(<ObjectModel {...props}/>)
  65. const renderedModelCollapse = wrapper.find(ModelCollapse)
  66. expect(renderedModelCollapse.length).toEqual(1)
  67. })
  68. it("renders the object properties in order", function() {
  69. const wrapper = shallow(<ObjectModel {...props}/>)
  70. const renderedModel = wrapper.find(Model)
  71. expect(renderedModel.length).toEqual(3)
  72. expect(renderedModel.get(0).props.schema.get("name")).toEqual("c")
  73. expect(renderedModel.get(1).props.schema.get("name")).toEqual("b")
  74. expect(renderedModel.get(2).props.schema.get("name")).toEqual("a")
  75. })
  76. it("doesn't render `nullable` for model when it absent", function() {
  77. const wrapper = shallow(<ObjectModel {...props}/>)
  78. const renderProperties = wrapper.find(Property)
  79. expect(renderProperties.length).toEqual(0)
  80. })
  81. it("renders `nullable` for model", function() {
  82. const wrapper = shallow(<ObjectModel {...propsNullable}/>)
  83. const renderProperties = wrapper.find(Property)
  84. expect(renderProperties.length).toEqual(1)
  85. expect(renderProperties.get(0).props.propKey).toEqual("nullable")
  86. expect(renderProperties.get(0).props.propVal).toEqual(true)
  87. })
  88. it("doesn't render `minProperties` and `maxProperties` if they are absent", function() {
  89. const wrapper = shallow(<ObjectModel {...props}/>)
  90. const renderProperties = wrapper.find(Property)
  91. expect(renderProperties.length).toEqual(0)
  92. })
  93. it("renders `minProperties` and `maxProperties` if they are defined", function() {
  94. const wrapper = shallow(<ObjectModel {...propsMinMaxProperties}/>)
  95. const renderProperties = wrapper.find(Property)
  96. expect(renderProperties.length).toEqual(2)
  97. expect(renderProperties.get(0).props.propKey).toEqual("minProperties")
  98. expect(renderProperties.get(0).props.propVal).toEqual(1)
  99. expect(renderProperties.get(1).props.propKey).toEqual("maxProperties")
  100. expect(renderProperties.get(1).props.propVal).toEqual(5)
  101. })
  102. })