Skip to content

Commit

Permalink
Remove redundant folders in fixture list (case insensitive) (#1163)
Browse files Browse the repository at this point in the history
  • Loading branch information
ovidiuch committed Feb 15, 2020
1 parent a489126 commit 5e2c209
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 8 deletions.
Expand Up @@ -54,6 +54,33 @@ it('collapses solo named item', () => {
expect(collapseSoloIndexes(tree)).toEqual(collapsedTree);
});

it('collapses solo named item (case insensitive)', () => {
const tree = {
items: {},
dirs: {
successMessage: {
items: {
SuccessMessage: {
path: 'successMessage/SuccessMessage.fixture.js',
name: null
}
},
dirs: {}
}
}
};
const collapsedTree = {
items: {
SuccessMessage: {
path: 'successMessage/SuccessMessage.fixture.js',
name: null
}
},
dirs: {}
};
expect(collapseSoloIndexes(tree)).toEqual(collapsedTree);
});

it('does not collapse solo index item with sub dirs', () => {
const tree = {
items: {},
Expand Down Expand Up @@ -189,3 +216,48 @@ it('collapses solo named dir', () => {
};
expect(collapseSoloIndexes(tree)).toEqual(collapsedTree);
});

it('collapses solo named dir (case insensitive)', () => {
const tree = {
items: {},
dirs: {
welcomeMessage: {
items: {},
dirs: {
WelcomeMessage: {
items: {
Susan: {
path: 'welcomeMessage/WelcomeMessage.fixture.js',
name: 'Susan'
},
Sarah: {
path: 'welcomeMessage/WelcomeMessage.fixture.js',
name: 'Sarah'
}
},
dirs: {}
}
}
}
}
};
const collapsedTree = {
items: {},
dirs: {
WelcomeMessage: {
items: {
Susan: {
path: 'welcomeMessage/WelcomeMessage.fixture.js',
name: 'Susan'
},
Sarah: {
path: 'welcomeMessage/WelcomeMessage.fixture.js',
name: 'Sarah'
}
},
dirs: {}
}
}
};
expect(collapseSoloIndexes(tree)).toEqual(collapsedTree);
});
Expand Up @@ -18,17 +18,24 @@ export function collapseSoloIndexes(treeNode: FixtureNode): FixtureNode {

forEach(treeNode.dirs, (dirNode, dirName) => {
const dirItems = dirNode.items;
const dirMainItem = dirItems.index || dirItems[dirName];
const containsSoloItem = Object.keys(dirItems).length === 1 && dirMainItem;
const dirItemNames = Object.keys(dirItems);
const soloIndexItem = dirItemNames.length === 1 && dirItems.index;
const soloNamedItem =
dirItemNames.length === 1 && noCaseEqual(dirName, dirItemNames[0]);
const hasSubdirs = Object.keys(dirNode.dirs).length > 0;

if (containsSoloItem && !items[dirName] && !hasSubdirs) {
items[dirName] = dirMainItem;
if (soloIndexItem && !items[dirName] && !hasSubdirs) {
items[dirName] = dirItems.index;
} else if (soloNamedItem && !items[dirItemNames[0]] && !hasSubdirs) {
items[dirItemNames[0]] = dirItems[dirItemNames[0]];
} else {
const containsSoloNamedDir =
Object.keys(dirNode.dirs).length === 1 && dirNode.dirs[dirName];
if (containsSoloNamedDir) {
dirs[dirName] = collapseSoloIndexes(dirNode.dirs[dirName]);
const subDirNames = Object.keys(dirNode.dirs);
const soloNamedDir =
subDirNames.length === 1 && noCaseEqual(dirName, subDirNames[0]);
if (soloNamedDir) {
dirs[subDirNames[0]] = collapseSoloIndexes(
dirNode.dirs[subDirNames[0]]
);
} else {
dirs[dirName] = collapseSoloIndexes(dirNode);
}
Expand All @@ -37,3 +44,7 @@ export function collapseSoloIndexes(treeNode: FixtureNode): FixtureNode {

return { items, dirs };
}

function noCaseEqual(a: string, b: string) {
return a.toUpperCase() === b.toUpperCase();
}

0 comments on commit 5e2c209

Please sign in to comment.