xref: /expo/apps/test-suite/tests/TaskManager.js (revision 22d1e005)
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