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', ); });