jest.autoMockOff();
import transformer from '../14.0.0-remove-duplicate-and-unused-props';
import { dtpPropsToMoveIntoPickerProps } from '../utils/dtp-props-to-move-into-picker-props';
import { selectPropsToMoveIntoProps } from '../utils/select-props-to-move-into-props';
const defineInlineTest = require('jscodeshift/dist/testUtils').defineInlineTest;
const datePickerImportName = 'DatePicker';
const timePickerImportName = 'TimePicker';
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`import React from 'react';`,
`import React from 'react';`,
'should not transform if imports are not present',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { Code } from '@atlaskit/code';
const Component1 = () => ;
const Component2 = () => <>text>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
`
import React from 'react';
import { Code } from '@atlaskit/code';
const Component1 = () => ;
const Component2 = () => <>text>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
'should not transform if removable props are not preset',
);
describe('Migrate *selectProps to *pickerProps in DateTimePicker', () => {
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
'should not touch them if no `*PickerSelectProps` exist',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return (
); } }
class TimeComponent3 extends React.Component { render() { return (
); } }
const dateElement = ;
const timeElement = ;
`,
'should move `*PickerSelectProps` to `*PickerProps.selectProps`',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return (
); } }
class TimeComponent3 extends React.Component { render() { return (
); } }
const dateElement = ;
const timeElement = ;
`,
'should move `*PickerSelectProps` to `*PickerProps.selectProps` and not touch unrelated props',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return (
); } }
class TimeComponent3 extends React.Component { render() { return (
); } }
const dateElement = ;
const timeElement = ;
`,
'should combine `*PickerSelectProps` to `*PickerProps.selectProps`',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return (
); } }
const element = ;
`,
'should combine `*PickerSelectProps` to `*PickerProps.selectProps` if both are present',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return (
); } }
const element = ;
`,
'should combine `*PickerSelectProps` to `*PickerProps.selectProps` if both are present and not touch unrelated props',
);
});
describe('Migrate top-level props into *pickerProps in DateTimePicker', () => {
dtpPropsToMoveIntoPickerProps.forEach((formula) => {
const { oldPropName, destination } = formula;
describe(oldPropName, () => {
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
`,
`should not touch them if \`${oldPropName}\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return (
); } }
const element = ;
`,
`should migrate \`${oldPropName}\` into \`${destination[0]}.${destination[1]} if \`${destination[0]}\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return (
); } }
const element = ;
`,
`should migrate \`${oldPropName}\` into \`${destination[0]}.${destination[1]} if \`${destination[0]}\` does exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return
; } }
const element = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Component1 = () => ;
const Component2 = () => <>>;
class Component3 extends React.Component { render() { return (
); } }
const element = ;
`,
`should migrate \`${oldPropName}\` into \`${destination[0]}.${destination[1]} if \`${destination[0]}\` does exist and not touch unrelated props`,
);
});
});
});
describe('Migrate relevant selectProps into top-level props on DatePicker/TimePicker', () => {
[datePickerImportName, timePickerImportName].forEach((Picker) => {
describe(Picker, () => {
selectPropsToMoveIntoProps.forEach((formula) => {
const { source, newPropName } = formula;
const [selectProps, propertyName] = source;
const propertyNameInObj = propertyName.includes('-') ? `"${propertyName}"` : propertyName;
describe(newPropName, () => {
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { ${Picker} } from '@atlaskit/datetime-picker';
const DateComponent1 = () => <${Picker} dummyProp={{ test: 'test' }} />;
const TimeComponent1 = () => <${Picker} dummyProp={{ test: 'test' }} />;
const DateComponent2 = () => <><${Picker} dummyProp={{ test: 'test' }} />>;
const TimeComponent2 = () => <><${Picker} dummyProp={{ test: 'test' }} />>;
class DateComponent3 extends React.Component { render() { return <${Picker} dummyProp={{ test: 'test' }} />
; } }
class TimeComponent3 extends React.Component { render() { return <${Picker} dummyProp={{ test: 'test' }} />
; } }
const dateElement = <${Picker} dummyProp={{ test: 'test' }} />;
const timeElement = <${Picker} dummyProp={{ test: 'test' }} />;
`,
`
import React from 'react';
import { ${Picker} } from '@atlaskit/datetime-picker';
const DateComponent1 = () => <${Picker} dummyProp={{ test: 'test' }} />;
const TimeComponent1 = () => <${Picker} dummyProp={{ test: 'test' }} />;
const DateComponent2 = () => <><${Picker} dummyProp={{ test: 'test' }} />>;
const TimeComponent2 = () => <><${Picker} dummyProp={{ test: 'test' }} />>;
class DateComponent3 extends React.Component { render() { return <${Picker} dummyProp={{ test: 'test' }} />
; } }
class TimeComponent3 extends React.Component { render() { return <${Picker} dummyProp={{ test: 'test' }} />
; } }
const dateElement = <${Picker} dummyProp={{ test: 'test' }} />;
const timeElement = <${Picker} dummyProp={{ test: 'test' }} />;
`,
`should not touch them if \`${newPropName}\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { ${Picker} } from '@atlaskit/datetime-picker';
const Component1 = () => <${Picker} ${selectProps}={{ ${propertyNameInObj}: "value" }} />;
const Component2 = () => <><${Picker} ${selectProps}={{ ${propertyNameInObj}: "value" }} />>;
class Component3 extends React.Component { render() { return <${Picker} ${selectProps}={{ ${propertyNameInObj}: "value" }} />
; } }
const element = <${Picker} ${selectProps}={{ ${propertyNameInObj}: "value" }} />;
`,
`
import React from 'react';
import { ${Picker} } from '@atlaskit/datetime-picker';
const Component1 = () => <${Picker} ${newPropName}='value' />;
const Component2 = () => <><${Picker} ${newPropName}='value' />>;
class Component3 extends React.Component { render() { return <${Picker} ${newPropName}='value' />
; } }
const element = <${Picker} ${newPropName}='value' />;
`,
`should migrate \`${selectProps}.${propertyName}\` to \`${newPropName}\` if \`${newPropName}\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { ${Picker} } from '@atlaskit/datetime-picker';
const Component1 = () => <${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />;
const Component2 = () => <><${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />>;
class Component3 extends React.Component { render() { return <${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />
; } }
const element = <${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />;
`,
`
import React from 'react';
import { ${Picker} } from '@atlaskit/datetime-picker';
const Component1 = () => <${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />;
const Component2 = () => <><${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />>;
class Component3 extends React.Component { render() { return <${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />
; } }
const element = <${Picker} ${newPropName}="value" ${selectProps}={{ ${propertyNameInObj}: "id", test: "test" }} />;
`,
`should leave \`${selectProps}.${propertyName}\` if \`${newPropName}\` exists`,
);
});
});
});
});
});
describe('Migrate relevant selectProps into *PickerProps on DateTimePicker', () => {
selectPropsToMoveIntoProps.forEach((formula) => {
const { source, newPropName } = formula;
const [selectProps, propertyName] = source;
const oldPropertyNameInObj = propertyName.includes('-') ? `"${propertyName}"` : propertyName;
const newPropertyNameInObj = `"${newPropName}"`;
describe(newPropertyNameInObj, () => {
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const DateComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const DateComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
`,
`should not touch them if *PickerProps does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`should not touch them if \`*PickerProps.selectProps\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`should not touch them if \`*PickerProps.selectProps.${oldPropertyNameInObj}}\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`should migrate \`*PickerProps.${selectProps}.${propertyName}\` to \`*PickerProps.${newPropertyNameInObj}\` if \`*PickerProps.${newPropertyNameInObj}\` does not exist`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`should migrate \`*PickerProps.${selectProps}.${propertyName}\` to \`*PickerProps.${newPropertyNameInObj}\` if \`*PickerProps.${newPropertyNameInObj}\` does not exist and not touch other props in *PickerProps`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
Dat
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const DateComponent1 = () => ;
const TimeComponent1 = () => ;
const BothComponent1 = () => ;
const DateComponent2 = () => <>>;
const TimeComponent2 = () => <>>;
const BothComponent2 = () => <>>;
class DateComponent3 extends React.Component { render() { return
; } }
class TimeComponent3 extends React.Component { render() { return
; } }
class BothComponent3 extends React.Component { render() { return
; } }
Dat
const dateElement = ;
const timeElement = ;
const bothElement = ;
`,
`should leave \`*PickerProps.${selectProps}.${propertyName}\` if \`*PickerProps.${newPropertyNameInObj}\` exists`,
);
});
});
});
describe('Complex interactions', () => {
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
`,
`should migrate complex DateTimePicker with nested select props and picker to top-level props`,
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DatePicker } from '@atlaskit/datetime-picker';
const Example = <>
>
`,
`
import React from 'react';
import { DatePicker } from '@atlaskit/datetime-picker';
const Example = <>
>
`,
'should handle basic example',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Example = <>
>
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
const Example = <>
>
`,
'should handle basic example',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
`,
'should handle boolean attributes and remove brackets',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { TimePicker } from '@atlaskit/datetime-picker';
`,
`
import React from 'react';
import { TimePicker } from '@atlaskit/datetime-picker';
`,
'should handle variables when moving from select props into top level',
);
defineInlineTest(
{ default: transformer, parser: 'tsx' },
{},
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
`,
`
import React from 'react';
import { DateTimePicker } from '@atlaskit/datetime-picker';
`,
'should handle variables when moving from select props into top level',
);
});