test(services): increase code coverage for file.services
This commit is contained in:
parent
863e430134
commit
93edeb6f86
13
main.ts
13
main.ts
|
@ -1,10 +1,4 @@
|
|||
import {
|
||||
App,
|
||||
Plugin,
|
||||
PluginSettingTab,
|
||||
Setting,
|
||||
TAbstractFile,
|
||||
} from 'obsidian';
|
||||
import { App, Plugin, PluginSettingTab, Setting, TFile } from 'obsidian';
|
||||
|
||||
import { FolderSuggest } from './src/suggestions/folderSuggest';
|
||||
import { renderDonateButton } from './src/components/DonateButton';
|
||||
|
@ -18,7 +12,7 @@ import { renderPreviewFiles } from './src/components/RenderPreviewFiles';
|
|||
|
||||
interface BulkRenamePluginSettings {
|
||||
folderName: string;
|
||||
fileNames: TAbstractFile[];
|
||||
fileNames: TFile[];
|
||||
existingSymbol: string;
|
||||
replacePattern: string;
|
||||
tags: string[];
|
||||
|
@ -205,7 +199,6 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
|
|||
.setName('Existing Characters')
|
||||
.setDesc(desc);
|
||||
|
||||
// if (!isViewTypeTags(this.plugin)) {
|
||||
newSettings.addText((textComponent) => {
|
||||
textComponent.setValue(settings.existingSymbol);
|
||||
textComponent.setPlaceholder('existing symbols');
|
||||
|
@ -214,7 +207,7 @@ export class BulkRenameSettingsTab extends PluginSettingTab {
|
|||
this.plugin.saveSettings();
|
||||
});
|
||||
});
|
||||
// }
|
||||
|
||||
newSettings.addText((textComponent) => {
|
||||
const previewLabel = createPreviewElement('Replacement symbols');
|
||||
textComponent.inputEl.insertAdjacentElement('beforebegin', previewLabel);
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import {
|
||||
getFilesNamesInDirectory,
|
||||
getRenderedFileNamesReplaced,
|
||||
syncScrolls,
|
||||
} from '../services/file.service';
|
||||
import { createPreviewElement } from './PreviewElement';
|
||||
import BulkRenamePlugin, { BulkRenameSettingsTab } from '../../main';
|
||||
import BulkRenamePlugin, { BulkRenameSettingsTab, State } from '../../main';
|
||||
|
||||
export const renderPreviewFiles = (
|
||||
setting: BulkRenameSettingsTab['filesAndPreview'],
|
||||
|
@ -43,3 +42,24 @@ export const renderPreviewFiles = (
|
|||
syncScrolls(existingFilesTextArea, replacedPreviewTextArea, state);
|
||||
});
|
||||
};
|
||||
|
||||
export const syncScrolls = (
|
||||
existingFilesArea: HTMLTextAreaElement,
|
||||
previewArea: HTMLTextAreaElement,
|
||||
state: State,
|
||||
) => {
|
||||
existingFilesArea.addEventListener('scroll', (event) => {
|
||||
const target = event.target as HTMLTextAreaElement;
|
||||
if (target.scrollTop !== state.previewScroll) {
|
||||
previewArea.scrollTop = target.scrollTop;
|
||||
state.previewScroll = target.scrollTop;
|
||||
}
|
||||
});
|
||||
previewArea.addEventListener('scroll', (event) => {
|
||||
const target = event.target as HTMLTextAreaElement;
|
||||
if (target.scrollTop !== state.filesScroll) {
|
||||
existingFilesArea.scrollTop = target.scrollTop;
|
||||
state.filesScroll = target.scrollTop;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { App, Notice, TFile } from 'obsidian';
|
||||
import BulkRenamePlugin, { State } from '../../main';
|
||||
import BulkRenamePlugin from '../../main';
|
||||
|
||||
export const getFilesNamesInDirectory = (plugin: BulkRenamePlugin) => {
|
||||
const { fileNames } = plugin.settings;
|
||||
|
@ -26,7 +26,7 @@ export const getRenderedFileNamesReplaced = (plugin: BulkRenamePlugin) => {
|
|||
return getFilesAsString(newFiles);
|
||||
};
|
||||
|
||||
const selectFilenamesWithReplacedPath = (plugin: BulkRenamePlugin) => {
|
||||
export const selectFilenamesWithReplacedPath = (plugin: BulkRenamePlugin) => {
|
||||
const { fileNames } = plugin.settings;
|
||||
|
||||
return fileNames.map((file) => {
|
||||
|
@ -42,10 +42,11 @@ export const replaceFilePath = (plugin: BulkRenamePlugin, file: TFile) => {
|
|||
|
||||
const pathWithoutExtension = file.path.split('.').slice(0, -1).join('.');
|
||||
|
||||
const newPath = pathWithoutExtension?.replaceAll(
|
||||
existingSymbol,
|
||||
replacePattern,
|
||||
);
|
||||
const convertedToRegExpString = escapeRegExp(existingSymbol);
|
||||
|
||||
const regExpSymbol = new RegExp(convertedToRegExpString, 'g');
|
||||
|
||||
const newPath = pathWithoutExtension?.replace(regExpSymbol, replacePattern);
|
||||
|
||||
return `${newPath}.${file.extension}`;
|
||||
};
|
||||
|
@ -61,11 +62,6 @@ export const renameFilesInObsidian = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// if (replacePattern === existingSymbol) {
|
||||
// new Notice("Replace Pattern shouldn't much Existing Symbol");
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (!fileNames.length) {
|
||||
new Notice('Please check your results before rename!');
|
||||
return;
|
||||
|
@ -81,23 +77,9 @@ export const renameFilesInObsidian = async (
|
|||
new Notice('successfully renamed all files');
|
||||
};
|
||||
|
||||
export const syncScrolls = (
|
||||
existingFilesArea: HTMLTextAreaElement,
|
||||
previewArea: HTMLTextAreaElement,
|
||||
state: State,
|
||||
) => {
|
||||
existingFilesArea.addEventListener('scroll', (event) => {
|
||||
const target = event.target as HTMLTextAreaElement;
|
||||
if (target.scrollTop !== state.previewScroll) {
|
||||
previewArea.scrollTop = target.scrollTop;
|
||||
state.previewScroll = target.scrollTop;
|
||||
}
|
||||
});
|
||||
previewArea.addEventListener('scroll', (event) => {
|
||||
const target = event.target as HTMLTextAreaElement;
|
||||
if (target.scrollTop !== state.filesScroll) {
|
||||
existingFilesArea.scrollTop = target.scrollTop;
|
||||
state.filesScroll = target.scrollTop;
|
||||
}
|
||||
});
|
||||
};
|
||||
let reRegExpChar = /[\\^$.*+?()[\]{}]/g,
|
||||
reHasRegExpChar = RegExp(reRegExpChar.source);
|
||||
|
||||
export function escapeRegExp(s: string) {
|
||||
return s && reHasRegExpChar.test(s) ? s.replace(reRegExpChar, '\\$&') : s;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
import { TFile } from 'obsidian';
|
||||
|
||||
import { replaceFilePath } from './file.service';
|
||||
import {
|
||||
replaceFilePath,
|
||||
selectFilenamesWithReplacedPath,
|
||||
} from './file.service';
|
||||
import BulkRenamePlugin from '../../main';
|
||||
|
||||
describe('File Services', () => {
|
||||
|
@ -79,5 +82,66 @@ describe('File Services', () => {
|
|||
|
||||
expect(result).toEqual(expectedResult);
|
||||
});
|
||||
|
||||
describe('selectFilenamesWithReplacedPath', () => {
|
||||
const files = [
|
||||
{
|
||||
path: 'journals/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
{
|
||||
path: 'pages/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
{
|
||||
path: 'bulkRenameTets/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
{
|
||||
path: 'YesWecan/canWe/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
] as unknown as TFile[];
|
||||
|
||||
const mockPluginPlugin = {
|
||||
settings: {
|
||||
fileNames: files,
|
||||
},
|
||||
} as unknown as BulkRenamePlugin;
|
||||
|
||||
it('should rename many files with RegExp', () => {
|
||||
const plugin = {
|
||||
...mockPluginPlugin,
|
||||
settings: {
|
||||
...mockPluginPlugin.settings,
|
||||
existingSymbol: 'journals|pages|bulkRenameTets|canWe',
|
||||
replacePattern: 'qwe',
|
||||
},
|
||||
} as unknown as BulkRenamePlugin;
|
||||
|
||||
const expectedResults = [
|
||||
{
|
||||
path: 'qwe/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
{
|
||||
path: 'qwe/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
{
|
||||
path: 'qwe/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
{
|
||||
path: 'YesWecan/qwe/2022_10_13.md',
|
||||
extension: 'md',
|
||||
},
|
||||
];
|
||||
|
||||
const updatedFiles = selectFilenamesWithReplacedPath(plugin);
|
||||
|
||||
expect(expectedResults).toEqual(updatedFiles);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
describe('obsidian.service', () => {
|
||||
describe('getObsidianFilesWithTagName', () => {
|
||||
it.todo('should find files by tag');
|
||||
});
|
||||
});
|
|
@ -8,11 +8,11 @@ export const getObsidianFilesByFolderName = (
|
|||
const { folderName } = plugin.settings;
|
||||
const abstractFiles = app.vault.getAllLoadedFiles();
|
||||
|
||||
const files = abstractFiles.filter((file) => {
|
||||
return file instanceof TFile && file.parent.name.includes(folderName);
|
||||
});
|
||||
const files = abstractFiles.filter(
|
||||
(file) => file instanceof TFile && file.parent.name.includes(folderName),
|
||||
) as TFile[];
|
||||
|
||||
const filesSortedByName = files.sort((a, b) => a.name.localeCompare(b.name));
|
||||
const filesSortedByName = sortFilesByName(files);
|
||||
|
||||
return filesSortedByName;
|
||||
};
|
||||
|
@ -43,9 +43,13 @@ export const getObsidianFilesWithTagName = (
|
|||
}
|
||||
|
||||
return file;
|
||||
});
|
||||
}) as TFile[];
|
||||
|
||||
const filesSortedByName = files.sort((a, b) => a.name.localeCompare(b.name));
|
||||
const filesSortedByName = sortFilesByName(files);
|
||||
|
||||
return filesSortedByName;
|
||||
};
|
||||
|
||||
const sortFilesByName = (files: TFile[]) => {
|
||||
return files.sort((a, b) => a.name.localeCompare(b.name));
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue