diff --git a/README.md b/README.md index bf96f70..707c064 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # faker -A set of classes for mocking known data types such as browser history, browser download list, person, domain name, Jira project, GitHub repository, etc. +A set of classes for mocking known data types such as browser history, browser download list, browser bookmarks, person, domain name, Jira project, GitHub repository, etc. ## Installation diff --git a/src/base-extended.ts b/src/base-extended.ts index 0b5dded..fa6f27d 100644 --- a/src/base-extended.ts +++ b/src/base-extended.ts @@ -2,6 +2,7 @@ import MockUser, { MockUserItem } from './user' import MockProject, { MockProjectItem } from './project' import MockDomain, { MockDomainItem } from './domain' import { BaseItemMock } from './base' +import { faker } from '@faker-js/faker' export type SiteQuery = { domain?: MockDomainItem @@ -9,11 +10,18 @@ export type SiteQuery = { project?: MockProjectItem } +/** + * Class representing a base site mock. + * @extends BaseItemMock + */ export abstract class BaseSiteMock extends BaseItemMock { public readonly user: MockUserItem public readonly project: MockProjectItem public readonly domain: MockDomainItem + /** + * The templates of the site. + */ protected abstract readonly templates: Record constructor(query?: SiteQuery) { @@ -24,7 +32,53 @@ export abstract class BaseSiteMock extends BaseItemMock extends BaseItemMock { + items: T[] = [] + + /** + * Abstract method to create a mock item. + * @abstract + * @return The mock item + */ + protected abstract createMockItem(): T + + /** + * Abstract method to create an array of mock items. + * @abstract + * @return The array of mock items + */ + protected abstract createMockItems(): T[] + + /** + * Get a random item from the items array. + */ + public getItem(): T { + return faker.helpers.arrayElement(this.items) + } + + /** + * Get all items. + */ + public getItems(): T[] { + return this.items + } + + /** + * Reset the items array. + */ + public reset(): void { + this.items = this.createMockItems() + } +} diff --git a/src/base.ts b/src/base.ts index 64b7034..0a7e576 100644 --- a/src/base.ts +++ b/src/base.ts @@ -1,43 +1,32 @@ -import { faker } from '@faker-js/faker' - -export abstract class BaseItemsMock { - query: Q - items: T[] = [] - - protected abstract createMockItem(): T - protected abstract createMockItems(): T[] - - constructor(query?: Q, defaultQuery: Q = {} as Q) { - this.query = query ?? defaultQuery - } - - public getItem(): T { - return faker.helpers.arrayElement(this.items) - } - - public getItems(): T[] { - return this.items - } - - public reset(): void { - this.items = this.createMockItems() - } -} - +/** + * Class representing a base item mock. + * @extends BaseItemMock + */ export abstract class BaseItemMock { query: Q item: T = {} as T + /** + * Abstract method to create a mock item. + * @abstract + */ protected abstract createMockItem(): T constructor(query?: Q, defaultQuery: Q = {} as Q) { this.query = query ?? defaultQuery } + /** + * Get the mock item. + * @return The mock item + */ public getItem(): T { return this.item } + /** + * Reset the item. + */ public reset(): void { this.item = this.createMockItem() } diff --git a/src/bookmarks.ts b/src/bookmarks.ts index dab1a01..35bf438 100644 --- a/src/bookmarks.ts +++ b/src/bookmarks.ts @@ -1,7 +1,8 @@ import { faker } from '@faker-js/faker' import { WithRequired } from './types' import { createBalancedArray } from '@plq/array-functions' -import { BaseItemsMock } from './base' + +import { BaseItemsMock } from './base-extended' export interface MockBookmarksItem extends chrome.bookmarks.BookmarkTreeNode {} export interface MockBookmarksQuery extends chrome.bookmarks.BookmarkSearchQuery { diff --git a/src/downloads.ts b/src/downloads.ts index bec6b7e..b95dcca 100644 --- a/src/downloads.ts +++ b/src/downloads.ts @@ -1,6 +1,7 @@ import { faker } from '@faker-js/faker' -import { BaseItemsMock } from './base' + +import { BaseItemsMock } from './base-extended' export interface MockDownloadItem extends chrome.downloads.DownloadItem {} diff --git a/src/history.ts b/src/history.ts index 9f7d715..302fc40 100644 --- a/src/history.ts +++ b/src/history.ts @@ -8,8 +8,8 @@ import type { MockDomainItem } from './domain' import type { MockUserItem } from './user' import type { MockProjectItem } from './project' -import { BaseItemsMock } from './base' import { isEmpty } from '@plq/is' +import { BaseItemsMock } from './base-extended' export interface MockHistoryQuery extends chrome.history.HistoryQuery {} export interface MockHistoryItem extends chrome.history.HistoryItem {} diff --git a/src/user.ts b/src/user.ts index 2e2c8cd..8cef9c8 100644 --- a/src/user.ts +++ b/src/user.ts @@ -11,13 +11,24 @@ export interface MockUserItem { fullName: string } +/** + * Class representing a mock user. + */ export default class MockUser extends BaseItemMock{ + /** + * Create a mock user. + * @param {MockDomainItem} domain - The domain of the user + */ constructor(domain?: MockDomainItem) { super(domain, new MockDomain().getItem()) this.reset() } + /** + * Create a mock user item. + * @return {MockUserItem} The mock user item + */ createMockItem(): MockUserItem { const firstName = faker.person.firstName() const lastName = faker.person.lastName()