1import * as DevicePushTokenAutoRegistration from '../DevicePushTokenAutoRegistration.fx';
2import { DevicePushToken } from '../Tokens.types';
3import getDevicePushTokenAsync from '../getDevicePushTokenAsync';
4import { updateDevicePushTokenAsync } from '../utils/updateDevicePushTokenAsync';
5
6const ENABLED_REGISTRATION_FIXTURE: DevicePushTokenAutoRegistration.DevicePushTokenRegistration = {
7  isEnabled: true,
8};
9const DISABLED_REGISTRATION_FIXTURE: DevicePushTokenAutoRegistration.DevicePushTokenRegistration = {
10  isEnabled: false,
11};
12
13jest.mock('../utils/updateDevicePushTokenAsync');
14jest.mock('../ServerRegistrationModule');
15jest.mock('../getDevicePushTokenAsync');
16
17describe('__handlePersistedRegistrationInfoAsync', () => {
18  it(`doesn't fail if persisted value is empty`, async () => {
19    const spy = jest.spyOn(console, 'warn').mockImplementation();
20    await expect(
21      DevicePushTokenAutoRegistration.__handlePersistedRegistrationInfoAsync(null)
22    ).resolves.toBeUndefined();
23    await expect(
24      DevicePushTokenAutoRegistration.__handlePersistedRegistrationInfoAsync(undefined)
25    ).resolves.toBeUndefined();
26    await expect(
27      DevicePushTokenAutoRegistration.__handlePersistedRegistrationInfoAsync('{i-am-invalid-json')
28    ).resolves.toBeUndefined();
29    spy.mockRestore();
30  });
31
32  it(`doesn't try to update registration if it's not enabled`, async () => {
33    await DevicePushTokenAutoRegistration.__handlePersistedRegistrationInfoAsync(
34      JSON.stringify(DISABLED_REGISTRATION_FIXTURE)
35    );
36    expect(getDevicePushTokenAsync).not.toBeCalled();
37    expect(updateDevicePushTokenAsync).not.toBeCalled();
38  });
39
40  it(`does try to update registration if it's enabled`, async () => {
41    const mockPendingDevicePushToken: DevicePushToken = {
42      data: 'i-want-to-be-sent-to-server',
43      type: 'ios',
44    };
45    (
46      getDevicePushTokenAsync as jest.MockedFunction<typeof getDevicePushTokenAsync>
47    ).mockResolvedValue(mockPendingDevicePushToken);
48    await DevicePushTokenAutoRegistration.__handlePersistedRegistrationInfoAsync(
49      JSON.stringify(ENABLED_REGISTRATION_FIXTURE)
50    );
51    expect(updateDevicePushTokenAsync).toBeCalledWith(
52      expect.anything(),
53      mockPendingDevicePushToken
54    );
55  });
56});
57