Created a File Class (#97)
* Created a File Class * Test the untested parts * ignore any d.ts file
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import fs from 'fs';
|
||||
import test from 'ava';
|
||||
import {Response} from 'node-fetch';
|
||||
import {Readable} from 'stream';
|
||||
import buffer from 'buffer';
|
||||
import test from 'ava';
|
||||
import {Response} from 'node-fetch';
|
||||
import syncBlob, {blobFromSync, blobFrom, fileFromSync, fileFrom} from './from.js';
|
||||
import File from './file.js';
|
||||
import Blob from './index.js';
|
||||
import syncBlob, {blobFromSync, blobFrom} from './from.js';
|
||||
|
||||
const license = fs.readFileSync('./LICENSE', 'utf-8');
|
||||
|
||||
@@ -164,7 +165,22 @@ test('Reading after modified should fail', async t => {
|
||||
const now = new Date();
|
||||
// Change modified time
|
||||
fs.utimesSync('./LICENSE', now, now);
|
||||
const error = await blob.text().catch(error => error);
|
||||
const error = await t.throwsAsync(blob.text());
|
||||
t.is(error.constructor.name, 'DOMException');
|
||||
t.is(error instanceof Error, true);
|
||||
t.is(error.name, 'NotReadableError');
|
||||
});
|
||||
|
||||
test('Reading file after modified should fail', async t => {
|
||||
const file = fileFromSync('./LICENSE');
|
||||
await new Promise(resolve => {
|
||||
setTimeout(resolve, 100);
|
||||
});
|
||||
const now = new Date();
|
||||
// Change modified time
|
||||
fs.utimesSync('./LICENSE', now, now);
|
||||
const error = await t.throwsAsync(file.text());
|
||||
t.is(error.constructor.name, 'DOMException');
|
||||
t.is(error instanceof Error, true);
|
||||
t.is(error.name, 'NotReadableError');
|
||||
});
|
||||
@@ -239,6 +255,7 @@ test('Large chunks are divided into smaller chunks', async t => {
|
||||
});
|
||||
|
||||
test('Can use named import - as well as default', async t => {
|
||||
// eslint-disable-next-line node/no-unsupported-features/es-syntax
|
||||
const {Blob, default: def} = await import('./index.js');
|
||||
t.is(Blob, def);
|
||||
});
|
||||
@@ -254,3 +271,54 @@ if (buffer.Blob) {
|
||||
t.is(await blob2.text(), 'blob part');
|
||||
});
|
||||
}
|
||||
|
||||
test('File is a instance of blob', t => {
|
||||
t.true(new File([], '') instanceof Blob);
|
||||
});
|
||||
|
||||
test('fileFrom returns the name', async t => {
|
||||
t.is((await fileFrom('./LICENSE')).name, 'LICENSE');
|
||||
});
|
||||
|
||||
test('fileFromSync returns the name', t => {
|
||||
t.is(fileFromSync('./LICENSE').name, 'LICENSE');
|
||||
});
|
||||
|
||||
test('fileFromSync(path, type) sets the type', t => {
|
||||
t.is(fileFromSync('./LICENSE', 'text/plain').type, 'text/plain');
|
||||
});
|
||||
|
||||
test('blobFromSync(path, type) sets the type', t => {
|
||||
t.is(blobFromSync('./LICENSE', 'text/plain').type, 'text/plain');
|
||||
});
|
||||
|
||||
test('fileFrom(path, type) sets the type', async t => {
|
||||
const file = await fileFrom('./LICENSE', 'text/plain');
|
||||
t.is(file.type, 'text/plain');
|
||||
});
|
||||
|
||||
test('fileFrom(path, type) read/sets the lastModified ', async t => {
|
||||
const file = await fileFrom('./LICENSE', 'text/plain');
|
||||
// Earlier test updates the last modified date to now
|
||||
t.is(typeof file.lastModified, 'number');
|
||||
// The lastModifiedDate is deprecated and removed from spec
|
||||
t.false('lastModifiedDate' in file);
|
||||
t.is(file.lastModified > Date.now() - 60000, true);
|
||||
});
|
||||
|
||||
test('blobFrom(path, type) sets the type', async t => {
|
||||
const blob = await blobFrom('./LICENSE', 'text/plain');
|
||||
t.is(blob.type, 'text/plain');
|
||||
});
|
||||
|
||||
test('blobFrom(path) sets empty type', async t => {
|
||||
const blob = await blobFrom('./LICENSE');
|
||||
t.is(blob.type, '');
|
||||
});
|
||||
|
||||
test('new File() throws with too few args', t => {
|
||||
t.throws(() => new File(), {
|
||||
instanceOf: TypeError,
|
||||
message: 'Failed to construct \'File\': 2 arguments required, but only 0 present.'
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user