UNPKG

wix-storybook-utils

Version:

Utilities for automated component documentation within Storybook

201 lines 8.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = tslib_1.__importStar(require("react")); var enzyme_1 = require("enzyme"); var _1 = tslib_1.__importDefault(require("./")); var methods_table_1 = require("./methods-table"); var testkit = function () { var component; var baseUrl = 'https://www.wix-pages.com/wix-style-react-public.pr_10984/?path=/story/'; var byHook = function (hook) { return component.find("[data-hook=\"".concat(hook, "\"]")); }; var mockWindowLocation = function () { Object.defineProperties(window, { parent: { value: { location: { href: baseUrl, }, }, }, }); }; mockWindowLocation(); return { when: { created: function (props) { component = (0, enzyme_1.mount)(React.createElement(_1.default, tslib_1.__assign({}, props))); return component; }, }, get: { propsTables: function () { return byHook('autodocs-props-table'); }, propsRowsNames: function () { return byHook('autodocs-prop-row-name'); }, propRowsTypes: function () { return byHook('autodocs-prop-row-type'); }, propRowsTypesWithLink: function () { return byHook('autodocs-prop-row-linked-type'); }, methodsTable: function () { return byHook('autodocs-methods-table'); }, methodsTableRows: function () { return byHook('autodocs-methods-table-row'); }, baseUrl: baseUrl, }, }; }; describe('AutoDocs', function () { it('should render props sorted alphabetically with required prioritized', function () { var type = { name: 'string' }; var props = { metadata: { displayName: '', props: { d: { type: type }, z: { type: type, required: true }, a: { type: type }, dz: { type: type }, '42z': { type: type }, }, }, }; var expectedOrder = ['z', '42z', 'a', 'd', 'dz']; var driver = testkit(); driver.when.created(props); var propNames = driver.get.propsRowsNames().map(function (node) { return node.text(); }); expect(propNames).toEqual(expectedOrder); }); describe('given metadata with deprecated props', function () { it('should display separate table for depreacted props', function () { var driver = testkit(); driver.when.created({ metadata: { props: { deprecated: { tags: [{ title: 'deprecated' }] } }, }, }); expect(driver.get.propsTables().length).toEqual(2); }); }); describe('given metadata with linkTypeTo annotation', function () { it('should generate a link to the relevant storybook story', function () { var driver = testkit(); var expectedTypeName = 'TooltipCommon'; var expectedLink = "".concat(driver.get.baseUrl, "components-overlays--tooltip"); driver.when.created({ metadata: { props: { tooltip: { type: { name: expectedTypeName }, tags: [ { title: 'linkTypeTo', description: "components-overlays--tooltip", }, ], }, }, }, }); var typesWithLink = driver.get.propRowsTypesWithLink(); var names = typesWithLink.map(function (node) { return node.text(); }); var links = typesWithLink.map(function (node) { return node.props().href; }); expect(names[0]).toBe(expectedTypeName); expect(links[0]).toBe(expectedLink); }); it('should generate a link to external website', function () { var expectedLink = "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match"; var driver = testkit(); driver.when.created({ metadata: { props: { https: { type: { name: 'string' }, tags: [ { title: 'linkTypeTo', description: expectedLink, }, ], }, }, }, }); var typesWithLink = driver.get.propRowsTypesWithLink(); var links = typesWithLink.map(function (node) { return node.props().href; }); expect(links[0]).toBe(expectedLink); }); }); describe('given metadata with setTypeName annotation', function () { it('should display the given type name instead of the actual prop type ', function () { var expectedNames = ['firstName', 'secondName', 'thirdName']; var expectedLink = 'https://...'; var driver = testkit(); driver.when.created({ metadata: { props: { firstProps: { type: { name: 'string' }, tags: [ { title: 'setTypeName', description: expectedNames[0], }, ], }, secondProp: { type: { name: 'string' }, tags: [ { title: 'setTypeName', description: expectedNames[1], }, { title: 'linkTypeTo', description: expectedLink, }, ], }, thirdProp: { type: { name: 'shape', computed: true, value: "import { TooltipCommonProps } from '../common/PropTypes/TooltipCommon';", }, tags: [ { title: 'setTypeName', description: expectedNames[2], }, { title: 'linkTypeTo', description: expectedLink, }, ], }, }, }, }); var types = driver.get.propRowsTypes().map(function (node) { return node.text(); }); var typesWithLink = driver.get .propRowsTypesWithLink() .map(function (node) { return node.text(); }); expect(tslib_1.__spreadArray(tslib_1.__spreadArray([], types, true), typesWithLink, true)).toEqual(expectedNames); }); }); describe('methods table', function () { it('should not render lifecycle methods', function () { var driver = testkit(); var methods = tslib_1.__spreadArray(tslib_1.__spreadArray([], methods_table_1.hiddenMethods, true), [ '_privateMethod', 'publicCoolMethod', 'publicAwesomeMethod', ], false).map(function (name) { return ({ name: name, params: [], description: '' }); }); driver.when.created({ metadata: { props: {}, methods: methods, }, }); var rows = driver.get.methodsTableRows(); expect(rows.length).toEqual(2); expect(rows.at(0).text()).toEqual('publicCoolMethod'); expect(rows.at(1).text()).toEqual('publicAwesomeMethod'); }); }); }); //# sourceMappingURL=index.test.js.map