diff options
Diffstat (limited to '__mocks__')
-rw-r--r-- | __mocks__/react-native-svg.js | 67 | ||||
-rw-r--r-- | __mocks__/state-mock.ts | 856 |
2 files changed, 67 insertions, 856 deletions
diff --git a/__mocks__/react-native-svg.js b/__mocks__/react-native-svg.js new file mode 100644 index 000000000..91a10e643 --- /dev/null +++ b/__mocks__/react-native-svg.js @@ -0,0 +1,67 @@ +// @flow + +// https://github.com/FormidableLabs/react-native-svg-mock +import React from 'react' + +const createComponent = function (name) { + return class extends React.Component { + // overwrite the displayName, since this is a class created dynamically + static displayName = name + + render() { + return React.createElement(name, this.props, this.props.children) + } + } +} + +// Mock all react-native-svg exports +// from https://github.com/magicismight/react-native-svg/blob/master/index.js +const Svg = createComponent('Svg') +const Circle = createComponent('Circle') +const Ellipse = createComponent('Ellipse') +const G = createComponent('G') +const Text = createComponent('Text') +const TextPath = createComponent('TextPath') +const TSpan = createComponent('TSpan') +const Path = createComponent('Path') +const Polygon = createComponent('Polygon') +const Polyline = createComponent('Polyline') +const Line = createComponent('Line') +const Rect = createComponent('Rect') +const Use = createComponent('Use') +const Image = createComponent('Image') +const Symbol = createComponent('Symbol') +const Defs = createComponent('Defs') +const LinearGradient = createComponent('LinearGradient') +const RadialGradient = createComponent('RadialGradient') +const Stop = createComponent('Stop') +const ClipPath = createComponent('ClipPath') +const Pattern = createComponent('Pattern') +const Mask = createComponent('Mask') + +export { + Svg, + Circle, + Ellipse, + G, + Text, + TextPath, + TSpan, + Path, + Polygon, + Polyline, + Line, + Rect, + Use, + Image, + Symbol, + Defs, + LinearGradient, + RadialGradient, + Stop, + ClipPath, + Pattern, + Mask, +} + +export default Svg diff --git a/__mocks__/state-mock.ts b/__mocks__/state-mock.ts deleted file mode 100644 index f269bfc65..000000000 --- a/__mocks__/state-mock.ts +++ /dev/null @@ -1,856 +0,0 @@ -import {LogModel} from './../src/state/models/log' -import {LRUMap} from 'lru_map' -import {RootStoreModel} from './../src/state/models/root-store' -import {NavigationTabModel} from './../src/state/models/navigation' -import {SessionModel} from '../src/state/models/session' -import {NavigationModel} from '../src/state/models/navigation' -import {ShellUiModel} from '../src/state/models/shell-ui' -import {MeModel} from '../src/state/models/me' -import {OnboardModel} from '../src/state/models/onboard' -import {ProfilesViewModel} from '../src/state/models/profiles-view' -import {LinkMetasViewModel} from '../src/state/models/link-metas-view' -import {FeedModel} from '../src/state/models/feed-view' -import {NotificationsViewModel} from '../src/state/models/notifications-view' -import {ProfileViewModel} from '../src/state/models/profile-view' -import {ProfileUiModel, Sections} from '../src/state/models/profile-ui' -import {SessionServiceClient} from '@atproto/api' -import {UserAutocompleteViewModel} from '../src/state/models/user-autocomplete-view' -import {UserLocalPhotosModel} from '../src/state/models/user-local-photos' -import {SuggestedActorsViewModel} from '../src/state/models/suggested-actors-view' -import {UserFollowersViewModel} from '../src/state/models/user-followers-view' -import {UserFollowsViewModel} from '../src/state/models/user-follows-view' -import {NotificationsViewItemModel} from './../src/state/models/notifications-view' -import { - PostThreadViewModel, - PostThreadViewPostModel, -} from '../src/state/models/post-thread-view' -import {FeedItemModel} from '../src/state/models/feed-view' -import {RepostedByViewModel} from '../src/state/models/reposted-by-view' -import {VotesViewModel} from '../src/state/models/votes-view' - -export const mockedProfileStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: true, - error: '', - params: { - actor: '', - }, - did: 'test did', - handle: 'testhandle', - declaration: { - cid: '', - actorType: '', - }, - creator: 'test did', - displayName: '', - description: '', - avatar: '', - banner: '', - followersCount: 0, - followsCount: 0, - membersCount: 0, - postsCount: 0, - myState: { - follow: '', - member: '', - }, - rootStore: {} as RootStoreModel, - hasContent: true, - hasError: false, - isEmpty: false, - isUser: true, - isScene: false, - setup: jest.fn().mockResolvedValue({aborted: false}), - refresh: jest.fn().mockResolvedValue({}), - toggleFollowing: jest.fn().mockResolvedValue({}), - updateProfile: jest.fn(), - // unknown required because of the missing private methods: _xLoading, _xIdle, _load, _replaceAll -} as unknown as ProfileViewModel - -export const mockedFeedItemStore = { - _reactKey: 'item-1', - _isThreadParent: false, - _isThreadChildElided: false, - _isThreadChild: false, - _hideParent: false, - _isRenderingAsThread: false, - post: { - uri: 'testuri', - cid: 'test cid', - author: { - did: 'test did', - handle: 'test.handle', - displayName: 'test name', - declaration: {cid: '', actorType: ''}, - }, - record: { - $type: 'app.bsky.feed.post', - createdAt: '2022-12-29T16:39:57.919Z', - text: 'Sup', - }, - replyCount: 0, - repostCount: 0, - upvoteCount: 0, - downvoteCount: 0, - indexedAt: '2022-12-29T16:39:57.919Z', - viewer: {}, - }, - postRecord: { - $type: 'app.bsky.feed.post', - text: 'test text', - createdAt: '1', - reply: { - root: { - uri: 'testuri', - cid: 'tes cid', - }, - parent: { - uri: 'testuri', - cid: 'tes cid', - }, - }, - }, - rootStore: {} as RootStoreModel, - copy: jest.fn(), - toggleUpvote: jest.fn().mockResolvedValue({}), - toggleDownvote: jest.fn(), - toggleRepost: jest.fn().mockResolvedValue({}), - delete: jest.fn().mockResolvedValue({}), - reasonRepost: { - by: { - did: 'test did', - handle: 'test.handle', - declaration: {cid: '', actorType: ''}, - }, - indexedAt: '', - }, - reasonTrend: { - by: { - did: 'test did', - handle: 'test.handle', - declaration: {cid: '', actorType: ''}, - }, - indexedAt: '', - }, - reply: { - parent: { - author: { - did: 'test did', - handle: 'test.handle', - displayName: 'test name', - declaration: {cid: '', actorType: ''}, - }, - cid: '', - downvoteCount: 0, - indexedAt: '2023-01-10T11:17:46.945Z', - record: {}, - replyCount: 1, - repostCount: 0, - upvoteCount: 0, - uri: 'testuri', - viewer: {}, - }, - root: { - author: { - did: 'test did', - handle: 'test.handle', - displayName: 'test name', - declaration: {cid: '', actorType: ''}, - }, - cid: '', - downvoteCount: 0, - indexedAt: '2023-01-10T11:17:46.739Z', - record: {}, - replyCount: 1, - repostCount: 0, - upvoteCount: 1, - uri: 'testuri', - viewer: {}, - }, - }, -} as FeedItemModel - -export const mockedFeedStore = { - isLoading: false, - isRefreshing: false, - hasNewLatest: false, - hasLoaded: true, - error: '', - hasMore: true, - params: { - actor: '', - limit: 1, - before: '', - }, - feed: [], - rootStore: {} as RootStoreModel, - feedType: 'home', - hasContent: true, - hasError: false, - isEmpty: false, - nonReplyFeed: [ - { - _reactKey: 'item-1', - post: { - author: { - handle: 'handle.test', - displayName: 'test name', - avatar: '', - }, - cid: 'bafyreihkwjoy2vbfqld2lp3tv4ce6yfr354sqgp32qoplrudso4gyyjiwe', - downvoteCount: 0, - indexedAt: '2022-12-29T16:35:55.270Z', - record: { - $type: 'app.bsky.feed.post', - createdAt: '2022-12-29T16:39:57.919Z', - text: 'Sup', - }, - replyCount: 0, - repostCount: 0, - upvoteCount: 0, - uri: 'at://did:plc:wcizmlgv3rdslk64t6q4silu/app.bsky.feed.post/3jkzce5kfvn2h', - viewer: { - handle: 'handle.test', - displayName: 'test name', - avatar: '', - }, - }, - reason: undefined, - reply: undefined, - }, - ], - setHasNewLatest: jest.fn(), - setup: jest.fn().mockResolvedValue({}), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn().mockResolvedValue({}), - loadLatest: jest.fn(), - update: jest.fn(), - checkForLatest: jest.fn().mockRejectedValue('Error checking for latest'), - registerListeners: jest.fn().mockReturnValue(jest.fn()), - // unknown required because of the missing private methods: _xLoading, _xIdle, _pendingWork, _initialLoad, _loadLatest, _loadMore, _update, _replaceAll, _appendAll, _prependAll, _updateAll, _getFeed, loadMoreCursor, pollCursor, _loadPromise, _updatePromise, _loadLatestPromise, _loadMorePromise -} as unknown as FeedModel - -export const mockedPostThreadViewPostStore = { - _reactKey: 'item-1', - _depth: 0, - _isHighlightedPost: false, - _hasMore: false, - postRecord: { - text: 'test text', - createdAt: '', - reply: { - root: { - uri: 'testuri', - cid: 'tes cid', - }, - parent: { - uri: 'testuri', - cid: 'tes cid', - }, - }, - }, - post: { - uri: 'testuri', - cid: 'testcid', - record: {}, - author: { - did: 'test did', - handle: 'test.handle', - declaration: {cid: '', actorType: ''}, - viewer: { - muted: true, - }, - }, - replyCount: 0, - repostCount: 0, - upvoteCount: 0, - downvoteCount: 0, - indexedAt: '', - viewer: { - repost: '', - upvote: '', - downvote: '', - }, - }, - rootStore: {} as RootStoreModel, - assignTreeModels: jest.fn(), - toggleRepost: jest.fn().mockRejectedValue({}), - toggleUpvote: jest.fn().mockRejectedValue({}), - toggleDownvote: jest.fn(), - delete: jest.fn(), -} as PostThreadViewPostModel - -export const mockedPostThreadViewStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: false, - error: '', - notFound: false, - resolvedUri: 'testuri', - params: { - uri: 'testuri', - }, - thread: mockedPostThreadViewPostStore, - hasContent: true, - hasError: false, - setup: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - update: jest.fn(), - // unknown required because of the missing private methods: _xLoading, _xIdle, _resolveUri, _load, _replaceAll -} as unknown as PostThreadViewModel - -export const mockedNotificationsViewItemStore = { - _reactKey: 'item-1', - uri: 'testuri', - cid: '', - author: { - did: 'test did', - handle: 'test.handle', - declaration: {cid: '', actorType: ''}, - }, - rootStore: {} as RootStoreModel, - copy: jest.fn(), - reason: 'test reason', - isRead: true, - indexedAt: '', - isUpvote: true, - isRepost: false, - isTrend: false, - isMention: false, - isReply: false, - isFollow: false, - isAssertion: false, - needsAdditionalData: false, - isInvite: false, - subjectUri: 'testuri', - toSupportedRecord: jest.fn().mockReturnValue({ - text: 'test text', - createdAt: '', - }), - fetchAdditionalData: jest.fn(), - toNotifeeOpts: jest.fn(), -} as NotificationsViewItemModel - -export const mockedNotificationsStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: true, - error: '', - params: { - limit: 1, - before: '', - }, - hasMore: true, - notifications: [mockedNotificationsViewItemStore], - rootStore: {} as RootStoreModel, - hasContent: true, - hasError: false, - isEmpty: false, - setup: jest.fn().mockResolvedValue({aborted: false}), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn().mockResolvedValue({}), - update: jest.fn().mockResolvedValue(null), - updateReadState: jest.fn(), - // unknown required because of the missing private methods: _xLoading, _xIdle, _pendingWork, _initialLoad, _loadMore, _update, _replaceAll, _appendAll, _updateAll, loadMoreCursor, _loadPromise, _updatePromise, _loadLatestPromise, _loadMorePromise -} as unknown as NotificationsViewModel - -export const mockedSessionStore = { - serialize: jest.fn(), - hydrate: jest.fn(), - data: { - service: '', - refreshJwt: '', - accessJwt: '', - handle: '', - did: 'test did', - }, - online: false, - attemptingConnect: false, - rootStore: {} as RootStoreModel, - hasSession: true, - clear: jest.fn(), - setState: jest.fn(), - setOnline: jest.fn(), - updateAuthTokens: jest.fn(), - connect: jest.fn(), - describeService: jest.fn().mockResolvedValue({ - availableUserDomains: ['test'], - links: { - termsOfService: 'https://testTermsOfService', - privacyPolicy: 'https://testPrivacyPolicy', - }, - }), - login: jest.fn(), - createAccount: jest.fn(), - logout: jest.fn(), - - // unknown required because of the missing private methods: _connectPromise, configureApi & _connect -} as unknown as SessionModel - -export const mockedNavigationTabStore = { - serialize: jest.fn(), - hydrate: jest.fn(), - id: '0', - history: [ - { - url: '', - ts: 0, - title: '', - id: '0', - }, - ], - index: 0, - isNewTab: false, - current: { - url: '', - ts: 0, - title: '', - id: '0', - }, - canGoBack: false, - canGoForward: false, - backTen: [ - { - url: '', - title: '', - index: 0, - id: '0', - }, - ], - forwardTen: [ - { - url: '', - title: '', - index: 0, - id: '0', - }, - ], - navigate: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - goBack: jest.fn(), - fixedTabReset: jest.fn(), - goForward: jest.fn(), - goToIndex: jest.fn(), - setTitle: jest.fn(), - setIsNewTab: jest.fn(), - fixedTabPurpose: 0, - getBackList: () => [ - { - url: '/', - title: '', - index: 1, - id: '1', - }, - ], - getForwardList: jest.fn(), -} as NavigationTabModel - -export const mockedNavigationStore = { - serialize: jest.fn(), - hydrate: jest.fn(), - tabs: [mockedNavigationTabStore], - tabIndex: 0, - clear: jest.fn(), - tab: mockedNavigationTabStore, - tabCount: 1, - isCurrentScreen: jest.fn(), - navigate: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - setTitle: jest.fn(), - handleLink: jest.fn(), - switchTo: jest.fn(), - setActiveTab: jest.fn(), - closeTab: jest.fn(), - newTab: jest.fn(), -} as NavigationModel - -export const mockedShellStore = { - serialize: jest.fn(), - hydrate: jest.fn(), - minimalShellMode: false, - isMainMenuOpen: false, - isModalActive: false, - activeModal: undefined, - isLightboxActive: false, - activeLightbox: undefined, - isComposerActive: false, - composerOpts: undefined, - darkMode: false, - setDarkMode: jest.fn(), - setMainMenuOpen: jest.fn(), - setMinimalShellMode: jest.fn(), - openModal: jest.fn(), - closeModal: jest.fn(), - closeComposer: jest.fn(), - closeLightbox: jest.fn(), - openComposer: jest.fn(), - openLightbox: jest.fn(), -} as ShellUiModel - -export const mockedMeStore = { - serialize: jest.fn(), - hydrate: jest.fn(), - did: 'test did', - handle: 'test', - displayName: 'test', - description: 'test', - avatar: '', - notificationCount: 0, - rootStore: {} as RootStoreModel, - mainFeed: mockedFeedStore, - notifications: mockedNotificationsStore, - clear: jest.fn(), - load: jest.fn(), - clearNotificationCount: jest.fn(), - fetchNotifications: jest.fn(), - bgFetchNotifications: jest.fn(), - refreshMemberships: jest.fn(), -} as MeModel - -export const mockedOnboardStore = { - serialize: jest.fn(), - hydrate: jest.fn(), - isOnboarding: false, - stage: '', - start: jest.fn(), - stop: jest.fn(), - next: jest.fn(), -} as OnboardModel - -export const mockedProfilesStore = { - hydrate: jest.fn(), - serialize: jest.fn(), - cache: new LRUMap(100), - rootStore: {} as RootStoreModel, - getProfile: jest.fn().mockResolvedValue({data: {}}), - overwrite: jest.fn(), -} as ProfilesViewModel - -export const mockedLinkMetasStore = { - hydrate: jest.fn(), - serialize: jest.fn(), - cache: new LRUMap(100), - rootStore: {} as RootStoreModel, - getLinkMeta: jest.fn(), -} as LinkMetasViewModel - -export const mockedLogStore = { - entries: [], - serialize: jest.fn(), - hydrate: jest.fn(), - debug: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - // unknown required because of the missing private methods: add -} as unknown as LogModel - -export const mockedRootStore = { - api: { - com: {}, - app: { - bsky: { - actor: { - searchTypeahead: jest.fn().mockResolvedValue({data: {users: []}}), - }, - graph: { - getFollows: jest.fn().mockResolvedValue({data: {follows: []}}), - getFollowers: jest.fn().mockResolvedValue({}), - getMembers: jest.fn().mockResolvedValue({}), - }, - }, - }, - } as unknown as SessionServiceClient, - resolveName: jest.fn(), - serialize: jest.fn(), - hydrate: jest.fn(), - fetchStateUpdate: jest.fn(), - clearAll: jest.fn(), - onPostDeleted: jest.fn(), - emitPostDeleted: jest.fn(), - initBgFetch: jest.fn(), - onBgFetch: jest.fn(), - onBgFetchTimeout: jest.fn(), - session: mockedSessionStore, - nav: mockedNavigationStore, - shell: mockedShellStore, - me: mockedMeStore, - onboard: mockedOnboardStore, - profiles: mockedProfilesStore, - linkMetas: mockedLinkMetasStore, - log: mockedLogStore, -} as RootStoreModel - -export const mockedProfileUiStore = { - profile: mockedProfileStore, - feed: mockedFeedStore, - selectedViewIndex: 0, - rootStore: mockedRootStore, - params: { - user: 'test user', - }, - currentView: mockedFeedStore, - isInitialLoading: false, - isRefreshing: false, - isUser: true, - isScene: false, - selectorItems: [Sections.Posts, Sections.PostsWithReplies], - selectedView: Sections.Posts, - setSelectedViewIndex: jest.fn(), - setup: jest.fn().mockResolvedValue({aborted: false}), - update: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn(), -} as ProfileUiModel - -export const mockedAutocompleteViewStore = { - isLoading: false, - isActive: true, - prefix: '', - follows: [ - { - did: 'test did', - declaration: { - cid: '', - actorType: 'app.bsky.system.actorUser', - }, - handle: '', - displayName: '', - createdAt: '', - indexedAt: '', - }, - ], - searchRes: [ - { - did: 'test did', - declaration: { - cid: '', - actorType: 'app.bsky.system.actorUser', - }, - handle: '', - displayName: '', - }, - ], - knownHandles: new Set<string>(), - suggestions: [ - { - handle: 'handle.test', - displayName: 'Test Display', - }, - { - handle: 'handle2.test', - displayName: 'Test Display 2', - }, - ], - rootStore: {} as RootStoreModel, - setup: jest.fn(), - setActive: jest.fn(), - setPrefix: jest.fn(), - // unknown required because of the missing private methods: _searchPromise, _getFollows , _search -} as unknown as UserAutocompleteViewModel - -export const mockedLocalPhotosStore = { - photos: { - node: { - type: '', - group_name: '', - image: { - filename: '', - extension: '', - uri: '', - height: 1000, - width: 1000, - fileSize: null, - playableDuration: 0, - }, - timestamp: 1672847197, - location: null, - }, - }, - rootStore: {} as RootStoreModel, - setup: jest.fn(), - // unknown required because of the missing private methods: _getPhotos -} as unknown as UserLocalPhotosModel - -export const mockedSuggestedActorsStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: false, - error: '', - suggestions: [ - { - did: '1', - declaration: { - cid: '', - actorType: 'app.bsky.system.actorUser', - }, - handle: 'handle1.test', - displayName: 'test name 1', - description: 'desc', - indexedAt: '', - _reactKey: '1', - }, - { - did: '2', - declaration: { - cid: '', - actorType: 'app.bsky.system.actorUser', - }, - handle: '', - displayName: 'handle2.test', - description: 'desc', - indexedAt: '', - _reactKey: '2', - }, - ], - rootStore: {} as RootStoreModel, - hasContent: true, - hasError: false, - isEmpty: false, - setup: jest.fn().mockResolvedValue(null), - refresh: jest.fn().mockResolvedValue({}), - // unknown required because of the missing private methods: _xLoading, _xIdle, _fetch, _appendAll, _append -} as unknown as SuggestedActorsViewModel - -export const mockedUserFollowersStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: false, - error: '', - params: { - user: 'test user', - }, - subject: { - did: 'test did', - handle: '', - declaration: {cid: '', actorType: ''}, - }, - followers: [ - { - did: 'test did', - declaration: {cid: '', actorType: ''}, - handle: 'testhandle', - displayName: 'test name', - indexedAt: '', - _reactKey: '1', - }, - { - did: 'test did2', - declaration: {cid: '', actorType: ''}, - handle: 'testhandle2', - displayName: 'test name 2', - indexedAt: '', - _reactKey: '2', - }, - ], - rootStore: {} as RootStoreModel, - hasContent: true, - hasError: false, - isEmpty: false, - setup: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn(), - // unknown required because of the missing private methods: _xIdle, _xLoading, _fetch, _replaceAll, _append -} as unknown as UserFollowersViewModel - -export const mockedUserFollowsStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: false, - error: '', - params: { - user: 'test user', - }, - subject: { - did: 'test did', - handle: '', - declaration: {cid: '', actorType: ''}, - }, - follows: [ - { - did: 'test did', - declaration: {cid: '', actorType: ''}, - handle: 'testhandle', - displayName: 'test name', - indexedAt: '', - _reactKey: '1', - }, - { - did: 'test did2', - declaration: {cid: '', actorType: ''}, - handle: 'testhandle2', - displayName: 'test name 2', - indexedAt: '', - _reactKey: '2', - }, - ], - rootStore: {} as RootStoreModel, - hasContent: true, - hasError: false, - isEmpty: false, - setup: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn(), - // unknown required because of the missing private methods: _xIdle, _xLoading, _fetch, _replaceAll, _append -} as unknown as UserFollowsViewModel - -export const mockedRepostedByViewStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: false, - error: '', - resolvedUri: '', - params: { - uri: 'testuri', - }, - uri: '', - repostedBy: [ - { - _reactKey: '', - did: '', - handle: '', - displayName: '', - declaration: {cid: '', actorType: ''}, - indexedAt: '', - }, - ], - hasContent: false, - hasError: false, - isEmpty: false, - setup: jest.fn().mockResolvedValue({}), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn().mockResolvedValue({}), - // unknown required because of the missing private methods: _xIdle, _xLoading, _resolveUri, _fetch, _refresh, _replaceAll, _append -} as unknown as RepostedByViewModel - -export const mockedVotesViewStore = { - isLoading: false, - isRefreshing: false, - hasLoaded: false, - error: '', - resolvedUri: '', - params: { - uri: 'testuri', - }, - uri: '', - votes: [ - { - _reactKey: '', - direction: 'up', - indexedAt: '', - createdAt: '', - actor: { - did: '', - handle: '', - declaration: {cid: '', actorType: ''}, - }, - }, - ], - hasContent: false, - hasError: false, - isEmpty: false, - setup: jest.fn(), - refresh: jest.fn().mockResolvedValue({}), - loadMore: jest.fn().mockResolvedValue({}), - // unknown required because of the missing private methods: _xIdle, _xLoading, _resolveUri, _fetch, _replaceAll, _append -} as unknown as VotesViewModel |