1df2360ebSCedric van Puttenimport * as BackgroundFetch from 'expo-background-fetch'; 2a47a1472SVille Immonenimport * as TaskManager from 'expo-task-manager'; 33b6a24fbSTomasz Sapeta 43b6a24fbSTomasz Sapetaconst DEFINED_TASK_NAME = 'defined task'; 53b6a24fbSTomasz Sapetaconst UNDEFINED_TASK_NAME = 'undefined task'; 63b6a24fbSTomasz Sapeta 77efeb25eSSergei Chestakovexport const name = 'TaskManager'; 87efeb25eSSergei Chestakov 93b6a24fbSTomasz Sapetaexport async function test(t) { 10df2360ebSCedric van Putten const backgroundFetchOptions = { 11df2360ebSCedric van Putten minimumInterval: 15 * 60, // 15min in sec 12df2360ebSCedric van Putten stopOnTerminate: false, 13df2360ebSCedric van Putten startOnBoot: true, 143b6a24fbSTomasz Sapeta }; 153b6a24fbSTomasz Sapeta 163b6a24fbSTomasz Sapeta t.describe('TaskManager', () => { 173b6a24fbSTomasz Sapeta t.describe('isTaskDefined()', () => { 183b6a24fbSTomasz Sapeta t.it('returns true if task is defined', () => { 193b6a24fbSTomasz Sapeta t.expect(TaskManager.isTaskDefined(DEFINED_TASK_NAME)).toBe(true); 203b6a24fbSTomasz Sapeta }); 213b6a24fbSTomasz Sapeta t.it('returns false if task is not defined', () => { 223b6a24fbSTomasz Sapeta t.expect(TaskManager.isTaskDefined(UNDEFINED_TASK_NAME)).toBe(false); 233b6a24fbSTomasz Sapeta }); 243b6a24fbSTomasz Sapeta }); 253b6a24fbSTomasz Sapeta 26df2360ebSCedric van Putten t.describe('isTaskRegisteredAsync()', async () => { 273b6a24fbSTomasz Sapeta t.beforeAll(async () => { 28df2360ebSCedric van Putten await BackgroundFetch.registerTaskAsync(DEFINED_TASK_NAME); 293b6a24fbSTomasz Sapeta }); 303b6a24fbSTomasz Sapeta 313b6a24fbSTomasz Sapeta t.it('returns true for registered tasks', async () => { 323b6a24fbSTomasz Sapeta t.expect(await TaskManager.isTaskRegisteredAsync(DEFINED_TASK_NAME)).toBe(true); 333b6a24fbSTomasz Sapeta }); 343b6a24fbSTomasz Sapeta 353b6a24fbSTomasz Sapeta t.it('returns false for unregistered tasks', async () => { 363b6a24fbSTomasz Sapeta t.expect(await TaskManager.isTaskRegisteredAsync(UNDEFINED_TASK_NAME)).toBe(false); 373b6a24fbSTomasz Sapeta }); 383b6a24fbSTomasz Sapeta 393b6a24fbSTomasz Sapeta t.afterAll(async () => { 40df2360ebSCedric van Putten await BackgroundFetch.unregisterTaskAsync(DEFINED_TASK_NAME); 413b6a24fbSTomasz Sapeta }); 423b6a24fbSTomasz Sapeta }); 433b6a24fbSTomasz Sapeta 44df2360ebSCedric van Putten t.describe('getTaskOptionsAsync()', async () => { 453b6a24fbSTomasz Sapeta let taskOptions; 463b6a24fbSTomasz Sapeta 473b6a24fbSTomasz Sapeta t.it('returns null for unregistered tasks', async () => { 483b6a24fbSTomasz Sapeta taskOptions = await TaskManager.getTaskOptionsAsync(DEFINED_TASK_NAME); 493b6a24fbSTomasz Sapeta t.expect(taskOptions).toBe(null); 503b6a24fbSTomasz Sapeta }); 513b6a24fbSTomasz Sapeta 523b6a24fbSTomasz Sapeta t.it('returns correct options after register', async () => { 53df2360ebSCedric van Putten await BackgroundFetch.registerTaskAsync(DEFINED_TASK_NAME, backgroundFetchOptions); 543b6a24fbSTomasz Sapeta taskOptions = await TaskManager.getTaskOptionsAsync(DEFINED_TASK_NAME); 55df2360ebSCedric van Putten t.expect(taskOptions).toEqual(t.jasmine.objectContaining(backgroundFetchOptions)); 563b6a24fbSTomasz Sapeta }); 573b6a24fbSTomasz Sapeta 583b6a24fbSTomasz Sapeta t.it('returns null when unregistered', async () => { 59df2360ebSCedric van Putten await BackgroundFetch.unregisterTaskAsync(DEFINED_TASK_NAME); 603b6a24fbSTomasz Sapeta taskOptions = await TaskManager.getTaskOptionsAsync(DEFINED_TASK_NAME); 613b6a24fbSTomasz Sapeta t.expect(taskOptions).toBe(null); 623b6a24fbSTomasz Sapeta }); 633b6a24fbSTomasz Sapeta }); 643b6a24fbSTomasz Sapeta 65df2360ebSCedric van Putten t.describe('getRegisteredTasksAsync()', async () => { 663b6a24fbSTomasz Sapeta let registeredTasks; 673b6a24fbSTomasz Sapeta 683b6a24fbSTomasz Sapeta t.it('returns empty array if there are no tasks', async () => { 693b6a24fbSTomasz Sapeta registeredTasks = await TaskManager.getRegisteredTasksAsync(); 703b6a24fbSTomasz Sapeta t.expect(registeredTasks).toBeDefined(); 713b6a24fbSTomasz Sapeta t.expect(registeredTasks.length).toBe(0); 723b6a24fbSTomasz Sapeta }); 733b6a24fbSTomasz Sapeta 743b6a24fbSTomasz Sapeta t.it('returns correct array after registering the task', async () => { 75df2360ebSCedric van Putten await BackgroundFetch.registerTaskAsync(DEFINED_TASK_NAME, backgroundFetchOptions); 763b6a24fbSTomasz Sapeta 773b6a24fbSTomasz Sapeta registeredTasks = await TaskManager.getRegisteredTasksAsync(); 783b6a24fbSTomasz Sapeta 793b6a24fbSTomasz Sapeta t.expect(registeredTasks).toBeDefined(); 803b6a24fbSTomasz Sapeta t.expect(registeredTasks.length).toBe(1); 81*22d1e005SBartosz Kaszubowski t.expect(registeredTasks.find((task) => task.taskName === DEFINED_TASK_NAME)).toEqual( 823b6a24fbSTomasz Sapeta t.jasmine.objectContaining({ 833b6a24fbSTomasz Sapeta taskName: DEFINED_TASK_NAME, 84df2360ebSCedric van Putten taskType: 'backgroundFetch', 85df2360ebSCedric van Putten options: backgroundFetchOptions, 863b6a24fbSTomasz Sapeta }) 873b6a24fbSTomasz Sapeta ); 883b6a24fbSTomasz Sapeta }); 893b6a24fbSTomasz Sapeta 903b6a24fbSTomasz Sapeta t.afterAll(async () => { 91df2360ebSCedric van Putten await BackgroundFetch.unregisterTaskAsync(DEFINED_TASK_NAME); 923b6a24fbSTomasz Sapeta }); 933b6a24fbSTomasz Sapeta }); 943b6a24fbSTomasz Sapeta 95df2360ebSCedric van Putten t.describe('unregisterAllTasksAsync()', () => { 963b6a24fbSTomasz Sapeta t.it('unregisters tasks correctly', async () => { 97df2360ebSCedric van Putten await BackgroundFetch.registerTaskAsync(DEFINED_TASK_NAME, backgroundFetchOptions); 983b6a24fbSTomasz Sapeta await TaskManager.unregisterAllTasksAsync(); 993b6a24fbSTomasz Sapeta 1003b6a24fbSTomasz Sapeta t.expect(await TaskManager.isTaskRegisteredAsync(DEFINED_TASK_NAME)).toBe(false); 1013b6a24fbSTomasz Sapeta t.expect((await TaskManager.getRegisteredTasksAsync()).length).toBe(0); 1023b6a24fbSTomasz Sapeta }); 1033b6a24fbSTomasz Sapeta }); 1043b6a24fbSTomasz Sapeta 105df2360ebSCedric van Putten t.describe('rejections', () => { 106df2360ebSCedric van Putten t.it('should reject when trying to unregister non-existing tasks', async () => { 107df2360ebSCedric van Putten await BackgroundFetch.registerTaskAsync(DEFINED_TASK_NAME, backgroundFetchOptions); 1083b6a24fbSTomasz Sapeta 1093b6a24fbSTomasz Sapeta let error; 1103b6a24fbSTomasz Sapeta try { 111df2360ebSCedric van Putten await BackgroundFetch.unregisterTaskAsync(UNDEFINED_TASK_NAME); 1123b6a24fbSTomasz Sapeta } catch (e) { 1133b6a24fbSTomasz Sapeta error = e; 1143b6a24fbSTomasz Sapeta } 1153b6a24fbSTomasz Sapeta t.expect(error).toBeDefined(); 116df2360ebSCedric van Putten t.expect(error.message).toMatch(/not found/); 1173b6a24fbSTomasz Sapeta 118df2360ebSCedric van Putten await BackgroundFetch.unregisterTaskAsync(DEFINED_TASK_NAME); 1193b6a24fbSTomasz Sapeta }); 1203b6a24fbSTomasz Sapeta }); 1213b6a24fbSTomasz Sapeta }); 1223b6a24fbSTomasz Sapeta} 1233b6a24fbSTomasz Sapeta 1243b6a24fbSTomasz Sapeta// Empty task so we can properly test some methods. 125df2360ebSCedric van Putten// We are telling iOS that we successfully fetched new data, to prevent possible throttle from iOS 126*22d1e005SBartosz KaszubowskiTaskManager.defineTask(DEFINED_TASK_NAME, () => BackgroundFetch.BackgroundFetchResult.NewData); 127