fileUtils.spec.ts•2.27 kB
import mime from 'mime'
import mock from 'mock-fs'
import { afterEach, describe, expect, it, vi } from 'vitest'
import { get_file_name_from_path, get_mime_type, list_files_in_directory } from './fileUtils'
vi.mock('mime', () => {
	return {
		default: {
			getType: vi.fn(),
		},
	}
})
afterEach(async () => {
	mock.restore()
	vi.restoreAllMocks()
})
describe('get_file_name_from_path', () => {
	it('strips files/contents', async () => {
		const path = await get_file_name_from_path('/files/contents/cats')
		expect(path).toBe('/cats')
	}),
		it('works if files/contents is not present', async () => {
			const path = await get_file_name_from_path('/dogs')
			expect(path).toBe('/dogs')
		}),
		it('strips a trailing slash', async () => {
			const path = await get_file_name_from_path('/files/contents/birds/')
			expect(path).toBe('/birds')
		})
}),
	describe('list_files_in_directory', () => {
		it('lists the files in a directory', async () => {
			mock({
				testDir: {
					cats: 'aurora, luna',
					dogs: 'penny',
				},
			})
			const listFiles = await list_files_in_directory('testDir')
			expect(listFiles).toEqual(['file:///testDir/cats', 'file:///testDir/dogs'])
		}),
			it('throws an error if path is not a directory', async () => {
				mock({
					testDir: {
						cats: 'aurora, luna',
						dogs: 'penny',
					},
				})
				await expect(async () => await list_files_in_directory('testDir/cats')).rejects.toThrow(
					'Failed to read directory'
				)
			}),
			it('treats empty strings as cwd', async () => {
				mock({
					testDir: {
						cats: 'aurora, luna',
						dogs: 'penny',
					},
				})
				const listFiles = await list_files_in_directory('')
				expect(listFiles).toEqual(['file:///../../../../../../testDir'])
			})
	}),
	describe('get_mime_type', async () => {
		it("provides the natural mime type when not 'inode/directory'", async () => {
			vi.mocked(mime.getType).mockReturnValueOnce('theType')
			const mimeType = await get_mime_type('someFile')
			expect(mimeType).toEqual('theType')
		})
		it("overrides mime type for 'inode/directory'", async () => {
			vi.mocked(mime.getType).mockReturnValueOnce('inode/directory')
			const mimeType = await get_mime_type('someDirectory')
			expect(mimeType).toEqual('text/directory')
		})
	})