wix-storybook-utils
Version:
Utilities for automated component documentation within Storybook
201 lines • 8.68 kB
JavaScript
"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