UNPKG

scriptable-testlab

Version:

A lightweight, efficient tool designed to manage and update scripts for Scriptable.

405 lines (339 loc) 9.17 kB
import {AbsContact} from 'scriptable-abstract'; /** * Interface for contact's email addresses */ export interface ContactEmailAddress { identifier?: string; label?: string; localizedLabel?: string; value: string; } /** * Interface for contact's phone numbers */ export interface ContactPhoneNumber { identifier?: string; label?: string; localizedLabel?: string; value: string; } /** * Interface for contact's postal addresses */ export interface ContactPostalAddress { identifier?: string; label: string; localizedLabel: string; street: string; city: string; state: string; postalCode: string; country: string; } /** * Interface for contact's social profiles */ export interface ContactSocialProfile { identifier?: string; label: string; localizedLabel: string; service: string; url: string; userIdentifier: string; username: string; } /** * State interface for Contact mock */ export interface ContactState { identifier: string; namePrefix: string; givenName: string; middleName: string; familyName: string; nickname: string; birthday: Date | null; image: any | null; emailAddresses: ContactEmailAddress[]; phoneNumbers: ContactPhoneNumber[]; postalAddresses: ContactPostalAddress[]; socialProfiles: ContactSocialProfile[]; note: string; urlAddresses: Array<{[key: string]: string}>; dates: Array<{[key: string]: any}>; organizationName: string; departmentName: string; jobTitle: string; isNamePrefixAvailable: boolean; isGiveNameAvailable: boolean; isGivenNameAvailable: boolean; isMiddleNameAvailable: boolean; isFamilyNameAvailable: boolean; isNicknameAvailable: boolean; isBirthdayAvailable: boolean; isEmailAddressesAvailable: boolean; isPhoneNumbersAvailable: boolean; isPostalAddressesAvailable: boolean; isSocialProfilesAvailable: boolean; isImageAvailable: boolean; isNoteAvailable: boolean; isURLAddressesAvailable: boolean; isOrganizationNameAvailable: boolean; isDepartmentNameAvailable: boolean; isJobTitleAvailable: boolean; isDatesAvailable: boolean; } /** * Mock implementation of Scriptable's Contact. * Represents a contact in the user's address book. */ export class MockContact extends AbsContact<ContactState> { constructor() { super({ identifier: '', namePrefix: '', givenName: '', middleName: '', familyName: '', nickname: '', birthday: null, image: null, emailAddresses: [], phoneNumbers: [], postalAddresses: [], socialProfiles: [], note: '', urlAddresses: [], dates: [], organizationName: '', departmentName: '', jobTitle: '', isNamePrefixAvailable: true, isGiveNameAvailable: true, isGivenNameAvailable: true, isMiddleNameAvailable: true, isFamilyNameAvailable: true, isNicknameAvailable: true, isBirthdayAvailable: true, isEmailAddressesAvailable: true, isPhoneNumbersAvailable: true, isPostalAddressesAvailable: true, isSocialProfilesAvailable: true, isImageAvailable: true, isNoteAvailable: true, isURLAddressesAvailable: true, isOrganizationNameAvailable: true, isDepartmentNameAvailable: true, isJobTitleAvailable: true, isDatesAvailable: true, }); } /** * _Creates a new contact._ * @see https://docs.scriptable.app/contact/#new-contact */ static create(): MockContact { return new MockContact(); } /** * _All contacts in the address book._ * @see https://docs.scriptable.app/contact/#all */ static async all(): Promise<MockContact[]> { return Promise.resolve([]); } /** * _Contacts matching the specified name._ * @param name - Name to search for. * @see https://docs.scriptable.app/contact/#contactsnamed */ static async contactsNamed(_name: string): Promise<MockContact[]> { return Promise.resolve([]); } /** * _Picks a contact._ * @see https://docs.scriptable.app/contact/#pickcontact */ static async pickContact(): Promise<MockContact | null> { return Promise.resolve(null); } /** * _Picks multiple contacts._ * @see https://docs.scriptable.app/contact/#pickcontacts */ static async pickContacts(): Promise<MockContact[]> { return Promise.resolve([]); } /** * _Saves the contact._ * @see https://docs.scriptable.app/contact/#-save */ async save(): Promise<void> { return Promise.resolve(); } /** * _Removes the contact._ * @see https://docs.scriptable.app/contact/#-remove */ async remove(): Promise<void> { return Promise.resolve(); } // Property getters and setters get identifier(): string { return this.state.identifier; } get namePrefix(): string { return this.state.namePrefix; } set namePrefix(value: string) { this.setState({namePrefix: value}); } get givenName(): string { return this.state.givenName; } set givenName(value: string) { this.setState({givenName: value}); } get middleName(): string { return this.state.middleName; } set middleName(value: string) { this.setState({middleName: value}); } get familyName(): string { return this.state.familyName; } set familyName(value: string) { this.setState({familyName: value}); } get nickname(): string { return this.state.nickname; } set nickname(value: string) { this.setState({nickname: value}); } get birthday(): Date | null { return this.state.birthday; } set birthday(value: Date | null) { this.setState({birthday: value}); } get image(): any | null { return this.state.image; } set image(value: any | null) { this.setState({image: value}); } get emailAddresses(): ContactEmailAddress[] { return [...this.state.emailAddresses]; } set emailAddresses(value: ContactEmailAddress[]) { this.setState({emailAddresses: [...value]}); } get phoneNumbers(): ContactPhoneNumber[] { return [...this.state.phoneNumbers]; } set phoneNumbers(value: ContactPhoneNumber[]) { this.setState({phoneNumbers: [...value]}); } get postalAddresses(): ContactPostalAddress[] { return [...this.state.postalAddresses]; } set postalAddresses(value: ContactPostalAddress[]) { this.setState({postalAddresses: [...value]}); } get socialProfiles(): ContactSocialProfile[] { return [...this.state.socialProfiles]; } set socialProfiles(value: ContactSocialProfile[]) { this.setState({socialProfiles: [...value]}); } get note(): string { return this.state.note; } set note(value: string) { this.setState({note: value}); } get urlAddresses(): Array<{[key: string]: string}> { return [...this.state.urlAddresses]; } set urlAddresses(value: Array<{[key: string]: string}>) { this.setState({urlAddresses: [...value]}); } get dates(): Array<{[key: string]: any}> { return [...this.state.dates]; } set dates(value: Array<{[key: string]: any}>) { this.setState({dates: [...value]}); } get organizationName(): string { return this.state.organizationName; } set organizationName(value: string) { this.setState({organizationName: value}); } get departmentName(): string { return this.state.departmentName; } set departmentName(value: string) { this.setState({departmentName: value}); } get jobTitle(): string { return this.state.jobTitle; } set jobTitle(value: string) { this.setState({jobTitle: value}); } // Availability getters get isNamePrefixAvailable(): boolean { return this.state.isNamePrefixAvailable; } get isGivenNameAvailable(): boolean { return this.state.isGivenNameAvailable; } get isMiddleNameAvailable(): boolean { return this.state.isMiddleNameAvailable; } get isFamilyNameAvailable(): boolean { return this.state.isFamilyNameAvailable; } get isNicknameAvailable(): boolean { return this.state.isNicknameAvailable; } get isBirthdayAvailable(): boolean { return this.state.isBirthdayAvailable; } get isEmailAddressesAvailable(): boolean { return this.state.isEmailAddressesAvailable; } get isPhoneNumbersAvailable(): boolean { return this.state.isPhoneNumbersAvailable; } get isPostalAddressesAvailable(): boolean { return this.state.isPostalAddressesAvailable; } get isSocialProfilesAvailable(): boolean { return this.state.isSocialProfilesAvailable; } get isImageAvailable(): boolean { return this.state.isImageAvailable; } get isNoteAvailable(): boolean { return this.state.isNoteAvailable; } get isURLAddressesAvailable(): boolean { return this.state.isURLAddressesAvailable; } get isOrganizationNameAvailable(): boolean { return this.state.isOrganizationNameAvailable; } get isDepartmentNameAvailable(): boolean { return this.state.isDepartmentNameAvailable; } get isJobTitleAvailable(): boolean { return this.state.isJobTitleAvailable; } get isDatesAvailable(): boolean { return this.state.isDatesAvailable; } }