@plq/faker
Version:
A set of classes for mocking known data types such as browser history, browser download list, persona, domain name, Jira project, GitHub repository, etc.
119 lines • 6.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const faker_1 = require("@faker-js/faker");
const base_extended_1 = require("./base-extended");
const downloadStates = ['in_progress', 'complete', 'interrupted'];
const dangerTypes = ['file', 'url', 'content', 'uncommon', 'host', 'unwanted', 'safe'];
const interruptReasons = ['FILE_FAILED', 'FILE_ACCESS_DENIED', 'FILE_NO_SPACE', 'FILE_NAME_TOO_LONG', 'FILE_TOO_LARGE', 'FILE_VIRUS_INFECTED', 'FILE_TRANSIENT_ERROR', 'FILE_BLOCKED', 'FILE_SECURITY_CHECK_FAILED', 'FILE_TOO_SHORT', 'FILE_HASH_MISMATCH', 'FILE_SAME_AS_SOURCE', 'NETWORK_FAILED', 'NETWORK_TIMEOUT', 'NETWORK_DISCONNECTED', 'NETWORK_SERVER_DOWN', 'NETWORK_INVALID_REQUEST', 'SERVER_FAILED', 'SERVER_NO_RANGE', 'SERVER_BAD_CONTENT', 'SERVER_UNAUTHORIZED', 'SERVER_CERT_PROBLEM', 'SERVER_FORBIDDEN', 'SERVER_UNREACHABLE', 'SERVER_CONTENT_LENGTH_MISMATCH', 'SERVER_CROSS_ORIGIN_REDIRECT', 'USER_CANCELED', 'USER_SHUTDOWN', 'CRASH'];
class MockDownloads extends base_extended_1.BaseItemsMock {
constructor(query) {
super(query);
this.reset();
}
getFileUrl() {
const domain = faker_1.faker.internet.url({ appendSlash: false });
const uuid = faker_1.faker.string.uuid();
const mimeType = faker_1.faker.system.mimeType();
const fileExt = faker_1.faker.system.fileExt(mimeType);
const fileName = faker_1.faker.system.fileName({ extensionCount: 0 });
const directoryPath = faker_1.faker.system.directoryPath();
const filePath = `${directoryPath}/${fileName}.${fileExt}`;
const finalUrl = `${domain}/${uuid}${filePath}`;
const finalPath = faker_1.faker.helpers.arrayElement([
directoryPath,
`/${uuid}${directoryPath}`,
'/downloads',
`/downloads/${uuid}`,
`/downloads/${uuid}${directoryPath}`,
]);
const referrerDomain = faker_1.faker.helpers.arrayElement([
domain,
`${domain}/downloads`,
faker_1.faker.internet.url({ appendSlash: false }),
]);
const url = this.query.url ?? `${domain}${finalPath}/${fileName}`;
const referrer = `${referrerDomain}${finalPath}`;
return {
url,
finalUrl,
mimeType,
referrer,
filename: `${fileName}.${fileExt}`,
};
}
getDates() {
const yearAgo = new Date(new Date().getTime() - 365 * 24 * 60 * 60 * 1000).getTime();
const startedAfter = this.query.startedAfter
? new Date(this.query.startedAfter).getTime() + 1
: undefined;
const startedBefore = this.query.startedBefore
? new Date(this.query.startedBefore).getTime() - 1
: undefined;
const endedBefore = this.query.endedBefore
? new Date(this.query.endedBefore).getTime() - 1
: undefined;
const endedAfter = this.query.endedAfter
? new Date(this.query.endedAfter).getTime() + 1
: undefined;
const minStartTime = startedAfter ?? endedAfter ?? new Date(yearAgo);
const maxStartTime = startedBefore ?? endedBefore ?? Math.max(new Date(minStartTime).getTime(), new Date(this.query.startedBefore ?? yearAgo).getTime(), faker_1.faker.date.recent().getTime());
const startTime = new Date(this.query.startTime ?? startedAfter ?? faker_1.faker.date.between({
from: minStartTime,
to: maxStartTime,
})).toISOString();
const startTimeGreater = new Date(startTime).getTime() + 1;
const minEndTime = endedAfter ?? startTimeGreater;
const inProgressEndTime = this.query.state === 'in_progress'
? faker_1.faker.date.future({ refDate: startTimeGreater })
: faker_1.faker.date.between({ from: minEndTime, to: startTimeGreater });
const maxEndTime = endedBefore ?? inProgressEndTime;
const endTime = new Date(this.query.endTime ?? faker_1.faker.date.between({
from: minEndTime,
to: maxEndTime,
})).toISOString();
const estimatedEndTime = this.query.endTime || endedAfter || endedBefore
? undefined
: endTime;
return {
startTime,
estimatedEndTime,
endTime,
};
}
createMockItem() {
const state = this.query.state
?? faker_1.faker.helpers.arrayElement(downloadStates);
const { url, filename, finalUrl, mimeType, referrer, } = this.getFileUrl();
const { startTime, estimatedEndTime, endTime, } = this.getDates();
const fileSize = this.query.fileSize ?? faker_1.faker.number.int({ min: 1, max: this.query.totalBytes });
const bytesReceived = state === 'complete'
? fileSize
: faker_1.faker.number.int({ min: 1, max: fileSize });
return {
id: faker_1.faker.number.int(),
state,
error: state === 'interrupted' ? faker_1.faker.helpers.arrayElement(interruptReasons) : undefined,
mime: mimeType,
referrer,
url,
finalUrl,
filename,
fileSize,
danger: this.query.danger ?? faker_1.faker.helpers.arrayElement(dangerTypes),
bytesReceived: this.query.bytesReceived ?? bytesReceived,
totalBytes: this.query.totalBytes ?? faker_1.faker.number.int({ min: fileSize, max: fileSize * 2 }),
startTime,
estimatedEndTime: state === 'in_progress' ? estimatedEndTime : undefined,
endTime: state === 'complete' ? endTime : undefined,
canResume: state === 'interrupted' ? faker_1.faker.datatype.boolean() : false,
exists: this.query.exists ?? faker_1.faker.datatype.boolean(),
incognito: faker_1.faker.datatype.boolean(),
paused: state !== 'in_progress' ? false : faker_1.faker.datatype.boolean(),
};
}
createMockItems() {
return faker_1.faker.helpers.multiple(() => this.createMockItem(), { count: this.query.limit ?? 10 });
}
}
exports.default = MockDownloads;
//# sourceMappingURL=downloads.js.map