import { dataBuilder } from "@helpers/datas/dataBuilder"; import { lorem } from "@helpers/ui/lipsum"; import { get_random_image, image } from "@mocks/image.mock"; import { get_random_licence, licence } from "@mocks/licence.mock"; import { get_random_provider, provider } from "@mocks/provider.mock"; import { get_random_user, user } from "@mocks/user.mock"; import { RDFTYPE_OBJECT, type TemsObject } from "@src/rdf"; export const sampleObject: TemsObject = { "@id": "store://local.sample-object/1/", "@type": RDFTYPE_OBJECT, creation_date: "2024-11-11T12:53:16.938000Z", update_date: "2024-11-14T08:04:47.656001Z", title: "Sample Object", description: "Sample Description", copyright: "Sample Copyright", website: "https://example.com", licences: [licence], images: [image], providers: [provider], owners: [user], }; export type objectParameters = { imageRange?: number; // 5 imageCount?: number; // undefined imageAsIframe?: boolean; // false keepImage?: boolean; // false allowRemovables?: boolean; // false }; export const get_random_object = ( parameters: objectParameters = {} ): TemsObject => { const removables: string[] = []; const replacements: TemsObject = { "@id": `store://local.sample-object/${Math.floor(Math.random() * 1000)}/`, creation_date: new Date( Date.now() - Math.random() * 365 * 24 * 60 * 60 * 1000 ).toISOString(), update_date: new Date( Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1000 ).toISOString(), title: lorem.generateWords(Math.floor(Math.random() * 3) + 1), description: lorem.generateParagraphs(Math.floor(Math.random() * 2) + 1), copyright: lorem.generateWords(Math.floor(Math.random() * 3) + 1), website: `https://example.com/${Math.floor(Math.random() * 1000)}`, licences: Array.from( { length: Math.floor(Math.random() * 2) }, get_random_licence ), images: Array.from( { length: parameters.imageCount || parameters.imageCount === 0 ? parameters.imageCount : Math.floor(Math.random() * (parameters.imageRange || 5)), }, () => get_random_image(parameters.imageAsIframe) ), providers: Array.from( { length: Math.floor(Math.random() * 1) }, get_random_provider ), owners: Array.from( { length: Math.floor(Math.random() * 1) }, get_random_user ), }; if (parameters.allowRemovables) { const removableGenerator = (key: string) => { // Between 0 and 25% chance if (Math.random() < Math.random() * 0.25) { removables.push(key); } }; removableGenerator("title"); removableGenerator("description"); removableGenerator("copyright"); removableGenerator("licences"); if (!parameters.keepImage) removableGenerator("images"); removableGenerator("providers"); removableGenerator("owners"); } return dataBuilder( sampleObject, removables, replacements, true ) as TemsObject; };