UNPKG

@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
"use strict"; 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