Skip to content

Commit 1e0cbf3

Browse files
phateddanez
authored andcommitted
Add importer tests for propTypeCompositionHandler
1 parent de10109 commit 1e0cbf3

File tree

1 file changed

+59
-4
lines changed

1 file changed

+59
-4
lines changed

src/handlers/__tests__/propTypeCompositionHandler-test.js

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88

99
jest.mock('../../Documentation');
1010

11-
import { expression, statement } from '../../../tests/utils';
11+
import {
12+
expression,
13+
statement,
14+
noopImporter,
15+
makeMockImporter,
16+
} from '../../../tests/utils';
1217

1318
describe('propTypeCompositionHandler', () => {
1419
let getPropTypeMock;
@@ -25,14 +30,30 @@ describe('propTypeCompositionHandler', () => {
2530
.default;
2631
});
2732

33+
const mockImporter = makeMockImporter({
34+
'Foo.react': statement(`
35+
export default Component;
36+
function Component() {}
37+
Component.propTypes = {
38+
foo: 'bar'
39+
};
40+
`).get('declaration'),
41+
42+
SharedProps: statement(`
43+
export default {
44+
bar: 'baz'
45+
};
46+
`).get('declaration'),
47+
});
48+
2849
function test(getSrc, parse) {
2950
it('understands assignment from module', () => {
3051
let definition = parse(`
3152
${getSrc('Foo.propTypes')}
3253
var Foo = require("Foo.react");
3354
`);
3455

35-
propTypeCompositionHandler(documentation, definition);
56+
propTypeCompositionHandler(documentation, definition, noopImporter);
3657
expect(documentation.composes).toEqual(['Foo.react']);
3758

3859
documentation = new (require('../../Documentation'))();
@@ -41,7 +62,7 @@ describe('propTypeCompositionHandler', () => {
4162
var SharedProps = require("SharedProps");
4263
`);
4364

44-
propTypeCompositionHandler(documentation, definition);
65+
propTypeCompositionHandler(documentation, definition, noopImporter);
4566
expect(documentation.composes).toEqual(['SharedProps']);
4667
});
4768

@@ -58,9 +79,43 @@ describe('propTypeCompositionHandler', () => {
5879
var SharedProps = require("SharedProps");
5980
`);
6081

61-
propTypeCompositionHandler(documentation, definition);
82+
propTypeCompositionHandler(documentation, definition, noopImporter);
6283
expect(documentation.composes).toEqual(['Foo.react', 'SharedProps']);
6384
});
85+
86+
it('does not add any composes if spreads can be fully resolved with the importer', () => {
87+
const definitionSrc = getSrc(
88+
`{
89+
...Foo.propTypes,
90+
...SharedProps,
91+
}`,
92+
);
93+
const definition = parse(`
94+
${definitionSrc}
95+
import Foo from "Foo.react";
96+
import SharedProps from "SharedProps";
97+
`);
98+
99+
propTypeCompositionHandler(documentation, definition, mockImporter);
100+
expect(documentation.composes).toEqual([]);
101+
});
102+
103+
it('still adds a composes if the importer cannot resolve a value', () => {
104+
const definitionSrc = getSrc(
105+
`{
106+
...Foo.propTypes,
107+
...NotFound,
108+
}`,
109+
);
110+
const definition = parse(`
111+
${definitionSrc}
112+
import Foo from "Foo.react";
113+
import NotFound from "NotFound";
114+
`);
115+
116+
propTypeCompositionHandler(documentation, definition, mockImporter);
117+
expect(documentation.composes).toEqual(['NotFound']);
118+
});
64119
}
65120

66121
describe('React.createClass', () => {

0 commit comments

Comments
 (0)