Proposed solution for #253

Wrapped Node's path.normalize() around paths that have
`componentPartPath` as a part segment. For non-namespaced components
this segment can be empty which leads to two consecutive slashes.

Updated test suite to assert against the updated import statements
in various files.
This commit is contained in:
sthzg 2016-07-10 23:02:51 +02:00
parent 14e8eb4aec
commit dcee97ec65
3 changed files with 48 additions and 20 deletions

View File

@ -18,7 +18,7 @@ describe('react-webpack:component', () => {
fileName: 'src/styles/Mycomponent.css',
expandedFileName: 'src/styles/my/littleSpecial/Test.css',
assertions: {
componentImport: 'require(\'styles//Mycomponent.css\');',
componentImport: 'require(\'styles/Mycomponent.css\');',
styleContent: '.mycomponent-component'
}
},
@ -27,7 +27,7 @@ describe('react-webpack:component', () => {
fileName: 'src/styles/Mycomponent.sass',
expandedFileName: 'src/styles/my/littleSpecial/Test.sass',
assertions: {
componentImport: 'require(\'styles//Mycomponent.sass\');',
componentImport: 'require(\'styles/Mycomponent.sass\');',
styleContent: '.mycomponent-component'
}
},
@ -36,7 +36,7 @@ describe('react-webpack:component', () => {
fileName: 'src/styles/Mycomponent.scss',
expandedFileName: 'src/styles/my/littleSpecial/Test.scss',
assertions: {
componentImport: 'require(\'styles//Mycomponent.scss\');',
componentImport: 'require(\'styles/Mycomponent.scss\');',
styleContent: '.mycomponent-component'
}
},
@ -45,7 +45,7 @@ describe('react-webpack:component', () => {
fileName: 'src/styles/Mycomponent.less',
expandedFileName: 'src/styles/my/littleSpecial/Test.less',
assertions: {
componentImport: 'require(\'styles//Mycomponent.less\');',
componentImport: 'require(\'styles/Mycomponent.less\');',
styleContent: '.mycomponent-component'
}
},
@ -54,7 +54,7 @@ describe('react-webpack:component', () => {
fileName: 'src/styles/Mycomponent.styl',
expandedFileName: 'src/styles/my/littleSpecial/Test.styl',
assertions: {
componentImport: 'require(\'styles//Mycomponent.styl\');',
componentImport: 'require(\'styles/Mycomponent.styl\');',
styleContent: '.mycomponent-component'
}
}
@ -158,7 +158,7 @@ describe('react-webpack:component', () => {
it('should create a unit test that imports the generated component', (done) => {
createGeneratedComponent('mycomponent', style.type, options, () => {
assert.fileContent('test/components/MycomponentComponentTest.js', 'import MycomponentComponent from \'components//MycomponentComponent.js\';');
assert.fileContent('test/components/MycomponentComponentTest.js', 'import MycomponentComponent from \'components/MycomponentComponent.js\';');
done();
});
});
@ -197,7 +197,7 @@ describe('react-webpack:component', () => {
},
sass: {
type: 'sass',
fileName: 'src/components/Mycomponent.cssmodule.sass',
fileName: 'src/components/mycomponent.cssmodule.sass',
expandedFileName: 'src/components/my/littleSpecial/test.cssmodule.sass',
assertions: {
componentImport: 'import styles from \'./mycomponent.cssmodule.sass\';',
@ -339,7 +339,7 @@ describe('react-webpack:component', () => {
it('should create a unit test that imports the generated component', (done) => {
createGeneratedComponent('mycomponent', style.type, options, () => {
assert.fileContent('test/components/MycomponentTest.js', 'import Mycomponent from \'components//Mycomponent.js\';');
assert.fileContent('test/components/MycomponentTest.js', 'import Mycomponent from \'components/Mycomponent.js\';');
done();
});
});
@ -411,7 +411,7 @@ describe('react-webpack:component', () => {
it('should create a unit test that imports the generated component', (done) => {
createGeneratedComponent('mycomponent', style.type, options, () => {
assert.fileContent('test/components/MycomponentTest.js', 'import Mycomponent from \'components//Mycomponent.js\';');
assert.fileContent('test/components/MycomponentTest.js', 'import Mycomponent from \'components/Mycomponent.js\';');
done();
});
});

View File

@ -69,7 +69,7 @@ describe('Utilities:Yeoman', () => {
describe('when the generator version is set to 4', () => {
const expection = {
const expectionNamespaced = {
style: {
webpackPath: './test.cssmodule.css',
path: 'src/components/my/component/',
@ -91,9 +91,37 @@ describe('Utilities:Yeoman', () => {
}
};
const expectionRoot = {
style: {
webpackPath: './test.cssmodule.css',
path: 'src/components/',
fileName: 'test.cssmodule.css',
className: 'test-component',
suffix: '.css'
},
component: {
webpackPath: 'components/Test.js',
path: 'src/components/',
fileName: 'Test.js',
className: 'Test',
displayName: 'Test',
suffix: '.js'
},
test: {
path: 'test/components/',
fileName: 'TestTest.js'
}
};
it('should get all required information for component creation from the components name', () => {
expect(utils.getAllSettingsFromComponentName('my/component/test', 'css', 4)).to.deep.equal(expection);
expect(utils.getAllSettingsFromComponentName('my/component/test', 'css', 4)).to.deep.equal(expectionNamespaced);
});
it('should build path information wo/ two slashes when dealing with a non-namespaced component', () => {
expect(utils.getAllSettingsFromComponentName('test', 'css', 4)).to.deep.equal(expectionRoot);
});
});
describe('when the generator version is set to 3 (or not set at all)', () => {

View File

@ -61,21 +61,21 @@ let getAllSettingsFromComponentName = (componentName, style, generatorVersion) =
settings = {
style: {
webpackPath: `./${componentBaseName.toLowerCase()}.cssmodule${styleSettings.suffix}`,
path: `${componentPath.path}/${componentPartPath}/`,
path: path.normalize(`${componentPath.path}/${componentPartPath}/`),
fileName: `${componentBaseName.toLowerCase()}.cssmodule${styleSettings.suffix}`,
className: getComponentStyleName(componentBaseName),
suffix: styleSettings.suffix
},
component: {
webpackPath: `components/${componentPartPath}/${componentBaseName}.js`,
path: `${componentPath.path}/${componentPartPath}/`,
webpackPath: path.normalize(`components/${componentPartPath}/${componentBaseName}.js`),
path: path.normalize(`${componentPath.path}/${componentPartPath}/`),
fileName: `${componentBaseName}.js`,
className: `${componentBaseName}`,
displayName: `${componentFullName}`,
suffix: '.js'
},
test: {
path: `${testPath.path}/components/${componentPartPath}/`,
path: path.normalize(`${testPath.path}/components/${componentPartPath}/`),
fileName: `${componentBaseName}Test.js`
}
};
@ -87,22 +87,22 @@ let getAllSettingsFromComponentName = (componentName, style, generatorVersion) =
default:
settings = {
style: {
webpackPath: `styles/${componentPartPath}/${componentBaseName}${styleSettings.suffix}`,
path: `${stylePaths.path}/${componentPartPath}/`,
webpackPath: path.normalize(`styles/${componentPartPath}/${componentBaseName}${styleSettings.suffix}`),
path: path.normalize(`${stylePaths.path}/${componentPartPath}/`),
fileName: `${componentBaseName}${styleSettings.suffix}`,
className: getComponentStyleName(componentBaseName),
suffix: styleSettings.suffix
},
component: {
webpackPath: `components/${componentPartPath}/${componentBaseName}Component.js`,
path: `${componentPath.path}/${componentPartPath}/`,
webpackPath: path.normalize(`components/${componentPartPath}/${componentBaseName}Component.js`),
path: path.normalize(`${componentPath.path}/${componentPartPath}/`),
fileName: `${componentBaseName}Component.js`,
className: `${componentBaseName}Component`,
displayName: `${componentFullName}Component`,
suffix: '.js'
},
test: {
path: `${testPath.path}/components/${componentPartPath}/`,
path: path.normalize(`${testPath.path}/components/${componentPartPath}/`),
fileName: `${componentBaseName}ComponentTest.js`
}
};