UNPKG

react-native-permissions

Version:

An unified permissions API for React Native on iOS, Android and Windows

101 lines (85 loc) 2.81 kB
import type {Contract} from '../contract'; import {PERMISSIONS as PERMISSIONS_ANDROID} from '../permissions.android'; import {PERMISSIONS as PERMISSIONS_IOS} from '../permissions.ios'; import {PERMISSIONS as PERMISSIONS_WINDOWS} from '../permissions.windows'; import {RESULTS} from '../results'; import type {PermissionStatus} from '../types'; export {RESULTS} from '../results'; export const PERMISSIONS = { ANDROID: PERMISSIONS_ANDROID.ANDROID, IOS: PERMISSIONS_IOS.IOS, WINDOWS: PERMISSIONS_WINDOWS.WINDOWS, }; export const canScheduleExactAlarms = jest.fn(async () => true); export const canUseFullScreenIntent = jest.fn(async () => true); export const check = jest.fn(async () => RESULTS.GRANTED); export const checkLocationAccuracy = jest.fn(async () => 'full'); export const openPhotoPicker = jest.fn(async () => {}); export const openSettings = jest.fn(async () => {}); export const request = jest.fn(async () => RESULTS.GRANTED); export const requestLocationAccuracy = jest.fn(async () => 'full'); const notificationOptions = new Set([ 'alert', 'badge', 'sound', 'carPlay', 'criticalAlert', 'provisional', 'providesAppSettings', ]); const notificationSettings = { alert: true, badge: true, sound: true, carPlay: true, criticalAlert: true, provisional: true, providesAppSettings: true, lockScreen: true, notificationCenter: true, }; export const checkNotifications: Contract['checkNotifications'] = jest.fn(async () => ({ status: RESULTS.GRANTED, settings: notificationSettings, })); export const requestNotifications: Contract['requestNotifications'] = jest.fn( async (options = []) => ({ status: RESULTS.GRANTED, settings: options .filter((option) => notificationOptions.has(option)) .reduce((acc, option) => ({...acc, [option]: true}), { lockScreen: true, notificationCenter: true, }), }), ); export const checkMultiple: Contract['checkMultiple'] = jest.fn(async (permissions) => { const output: Record<string, PermissionStatus> = {}; for (const permission of permissions) { output[permission] = RESULTS.GRANTED; } return output as Awaited<ReturnType<Contract['checkMultiple']>>; }); export const requestMultiple: Contract['requestMultiple'] = jest.fn(async (permissions) => { const output: Record<string, PermissionStatus> = {}; for (const permission of permissions) { output[permission] = RESULTS.GRANTED; } return output as Awaited<ReturnType<Contract['requestMultiple']>>; }); export default { PERMISSIONS, RESULTS, canScheduleExactAlarms, canUseFullScreenIntent, check, checkLocationAccuracy, checkMultiple, checkNotifications, openPhotoPicker, openSettings, request, requestLocationAccuracy, requestMultiple, requestNotifications, };