Skip to content

Commit

Permalink
Using lean core package from react-native-community + fixing tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rgommezz committed Jul 20, 2019
1 parent 0665a44 commit 88ad6fc
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 49 deletions.
11 changes: 11 additions & 0 deletions __mocks__/@react-native-community/netinfo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export default {
getCurrentConnectivity: jest.fn(),
isConnectionMetered: jest.fn(),
addListener: jest.fn(),
removeListeners: jest.fn(),
isConnected: {
fetch: jest.fn(() => Promise.resolve(true)),
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
},
};
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-native-offline",
"version": "4.3.2",
"version": "5.0.0",
"description": "Handy toolbelt to deal with offline mode in React Native applications. Cross-platform, provides a smooth redux integration.",
"main": "./src/index.js",
"author": "Raul Gomez Acuña <raulgdeveloper@gmail.com> (https://github.com/rgommezz)",
Expand Down Expand Up @@ -69,6 +69,7 @@
"redux-thunk": "^2.3.0"
},
"dependencies": {
"@react-native-community/netinfo": "^4.1.2",
"lodash": "^4.17.11",
"react-redux": "^6.0.0 || ^7.0.0",
"redux": "4.x",
Expand Down
3 changes: 2 additions & 1 deletion src/components/NetworkConnectivity.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* @flow */
import * as React from 'react';
import { AppState, NetInfo, Platform } from 'react-native';
import { AppState, Platform } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import type { HTTPMethod, State } from '../types';
import * as connectivityInterval from '../utils/checkConnectivityInterval';
import checkInternetAccess from '../utils/checkInternetAccess';
Expand Down
3 changes: 2 additions & 1 deletion src/redux/sagas.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
/* eslint flowtype/require-parameter-type: 0 */
import { put, select, call, take, cancelled, fork } from 'redux-saga/effects';
import { eventChannel } from 'redux-saga';
import { AppState, NetInfo, Platform } from 'react-native';
import { AppState, Platform } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import { networkSelector } from './reducer';
import checkInternetAccess from '../utils/checkInternetAccess';
import { connectionChange } from './actionCreators';
Expand Down
2 changes: 1 addition & 1 deletion src/utils/checkInternetConnection.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* @flow */

import { NetInfo } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import checkInternetAccess from './checkInternetAccess';
import { DEFAULT_PING_SERVER_URL, DEFAULT_TIMEOUT } from './constants';

Expand Down
37 changes: 15 additions & 22 deletions test/NetworkConnectivity.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/* @flow */
import * as React from 'react';
import NetInfo from '@react-native-community/netinfo';
import { View, Platform, AppState } from 'react-native';
import { shallow } from 'enzyme';
import { render } from 'react-native-testing-library';
Expand All @@ -13,9 +14,6 @@ type MethodsMap = {
[string]: Function,
};

const mockAddEventListener = jest.fn();
const mockRemoveEventListener = jest.fn();
const mockFetch = jest.fn(() => false);
const mockConnectionChangeHandler = jest.fn();
const mockGetConnectionChangeHandler = jest.fn(
() => mockConnectionChangeHandler,
Expand All @@ -25,14 +23,6 @@ const mockHandleNetInfoChange = jest.fn();
const mockHandleConnectivityChange = jest.fn();
const mockCheckInternet = jest.fn();

jest.mock('NetInfo', () => ({
isConnected: {
addEventListener: mockAddEventListener,
removeEventListener: mockRemoveEventListener,
fetch: mockFetch,
},
}));

jest.mock('../src/utils/checkConnectivityInterval');
jest.mock('../src/utils/checkInternetAccess', () =>
jest.fn().mockResolvedValue(true),
Expand Down Expand Up @@ -75,9 +65,9 @@ const getElement = ({

describe('NetworkConnectivity', () => {
afterEach(() => {
mockAddEventListener.mockClear();
mockRemoveEventListener.mockClear();
mockFetch.mockClear();
NetInfo.isConnected.addEventListener.mockClear();
NetInfo.isConnected.removeEventListener.mockClear();
NetInfo.isConnected.fetch.mockClear();
mockConnectionChangeHandler.mockClear();
mockGetConnectionChangeHandler.mockClear();
mockIntervalHandler.mockClear();
Expand Down Expand Up @@ -109,8 +99,8 @@ describe('NetworkConnectivity', () => {
Component: MockedNetworkConnectivity,
}),
);
expect(mockAddEventListener).toHaveBeenCalledTimes(1);
expect(mockAddEventListener).toHaveBeenCalledWith(
expect(NetInfo.isConnected.addEventListener).toHaveBeenCalledTimes(1);
expect(NetInfo.isConnected.addEventListener).toHaveBeenCalledWith(
'connectionChange',
mockConnectionChangeHandler,
);
Expand All @@ -123,6 +113,9 @@ describe('NetworkConnectivity', () => {
AND fetches initial connection
AND calls the handler
AND does NOT call setupConnectivityCheckInterval`, (done: Function) => {
NetInfo.isConnected.fetch.mockImplementationOnce(() =>
Promise.resolve(false),
);
Platform.OS = 'android';
const MockedNetworkConnectivity = mockPrototypeMethods({
getConnectionChangeHandler: mockGetConnectionChangeHandler,
Expand All @@ -132,12 +125,12 @@ describe('NetworkConnectivity', () => {
Component: MockedNetworkConnectivity,
}),
);
expect(mockAddEventListener).toHaveBeenCalledTimes(1);
expect(mockAddEventListener).toHaveBeenCalledWith(
expect(NetInfo.isConnected.addEventListener).toHaveBeenCalledTimes(1);
expect(NetInfo.isConnected.addEventListener).toHaveBeenCalledWith(
'connectionChange',
mockConnectionChangeHandler,
);
expect(mockFetch).toHaveBeenCalledTimes(1);
expect(NetInfo.isConnected.fetch).toHaveBeenCalledTimes(1);
process.nextTick(() => {
expect(mockConnectionChangeHandler).toHaveBeenCalledWith(false);
expect(setup).not.toHaveBeenCalled();
Expand Down Expand Up @@ -177,8 +170,8 @@ describe('NetworkConnectivity', () => {
}),
);
wrapper.unmount();
expect(mockRemoveEventListener).toHaveBeenCalledTimes(1);
expect(mockRemoveEventListener).toHaveBeenCalledWith(
expect(NetInfo.isConnected.removeEventListener).toHaveBeenCalledTimes(1);
expect(NetInfo.isConnected.removeEventListener).toHaveBeenCalledWith(
'connectionChange',
mockConnectionChangeHandler,
);
Expand Down Expand Up @@ -344,7 +337,7 @@ describe('NetworkConnectivity', () => {
wrapper.setProps({ pingServerUrl: 'https://newServerToPing.com' });
expect(mockCheckInternet).toHaveBeenCalled();
});
})
});

describe('props validation', () => {
it('throws if prop pingTimeout is not a number', () => {
Expand Down
5 changes: 1 addition & 4 deletions test/checkInternetConnection.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { NetInfo } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import checkInternetConnection from '../src/utils/checkInternetConnection';
import checkInternetAccess from '../src/utils/checkInternetAccess';
import {
Expand All @@ -16,9 +16,6 @@ describe('checkInternetConnection', () => {
});
describe('shouldPing = true', () => {
it(`calls checkInternetAccess and resolves the promise with its returned value`, async () => {
NetInfo.isConnected.fetch.mockImplementationOnce(() =>
Promise.resolve(true),
);
const isConnected = await checkInternetConnection('foo.com', 3000, true);
expect(checkInternetAccess).toHaveBeenCalledWith({
timeout: 3000,
Expand Down
4 changes: 2 additions & 2 deletions test/sagaChannels.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { eventChannel } from 'redux-saga';
import { NetInfo } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import {
createNetInfoConnectionChangeChannel,
netInfoEventChannelFn,
Expand All @@ -8,7 +8,7 @@ import {
} from '../src/redux/sagas';

jest.mock('redux-saga');
jest.mock('NetInfo');
jest.mock('@react-native-community/netinfo');

describe('createNetInfoConnectionChangeChannel', () => {
it('returns a redux-saga channel', () => {
Expand Down
3 changes: 2 additions & 1 deletion test/sagas.test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* @flow */
import { testSaga } from 'redux-saga-test-plan';
import { Platform, NetInfo, AppState } from 'react-native';
import { Platform, AppState } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import networkSaga, {
netInfoChangeSaga,
connectionIntervalSaga,
Expand Down
9 changes: 8 additions & 1 deletion test/setupTestEnv.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import React from 'react';
import 'react-native';
import { NativeModules } from 'react-native';
import 'jest-enzyme';
import Adapter from 'enzyme-adapter-react-16';
import Enzyme from 'enzyme';

// Mocking the NetInfo native module
NativeModules.RNCNetInfo = {
getCurrentState: jest.fn(),
addListener: jest.fn(),
removeListeners: jest.fn(),
};

/**
* Set up DOM in node.js environment for Enzyme to mount to
*/
Expand Down
61 changes: 46 additions & 15 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -607,13 +607,20 @@
pirates "^4.0.0"
source-map-support "^0.5.9"

"@babel/runtime@^7.0.0", "@babel/runtime@^7.2.0":
"@babel/runtime@^7.0.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f"
integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==
dependencies:
regenerator-runtime "^0.12.0"

"@babel/runtime@^7.4.5":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
dependencies:
regenerator-runtime "^0.13.2"

"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2":
version "7.2.2"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
Expand Down Expand Up @@ -647,6 +654,11 @@
lodash "^4.17.10"
to-fast-properties "^2.0.0"

"@react-native-community/netinfo@^4.1.2":
version "4.1.2"
resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-4.1.2.tgz#006c1c60e29918a47d3da786b28837b7aa15684f"
integrity sha512-3lW3Zv0V/Q14y5mNBa5ZcDfwTDZzivudPrQjY2awJFN8arw23AVe+dJual1VLny5fNXnWhaKPFHT6YYgs30k8w==

"@redux-saga/core@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.0.2.tgz#4336a5bb4253e5ca69681c25a863fbbc03ea6d88"
Expand Down Expand Up @@ -3500,12 +3512,12 @@ hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"

hoist-non-react-statics@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz#c09c0555c84b38a7ede6912b61efddafd6e75e1e"
integrity sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw==
hoist-non-react-statics@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==
dependencies:
react-is "^16.3.2"
react-is "^16.7.0"

home-or-tmp@^2.0.0:
version "2.0.0"
Expand Down Expand Up @@ -5921,6 +5933,15 @@ prop-types@^15.5.8, prop-types@^15.6.2:
loose-envify "^1.3.1"
object-assign "^4.1.1"

prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
dependencies:
loose-envify "^1.4.0"
object-assign "^4.1.1"
react-is "^16.8.1"

pseudomap@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
Expand Down Expand Up @@ -6019,11 +6040,16 @@ react-dom@^16.6.3:
prop-types "^15.6.2"
scheduler "^0.12.0"

react-is@^16.3.2, react-is@^16.6.1, react-is@^16.6.3, react-is@^16.7.0:
react-is@^16.6.1, react-is@^16.7.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa"
integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==

react-is@^16.8.1, react-is@^16.8.6:
version "16.8.6"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==

react-native-testing-library@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/react-native-testing-library/-/react-native-testing-library-1.5.0.tgz#02762bf8cb5c1295a220d5e5d40ffc2ebecf31da"
Expand Down Expand Up @@ -6096,17 +6122,17 @@ react-proxy@^1.1.7:
lodash "^4.6.1"
react-deep-force-update "^1.0.0"

react-redux@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.0.tgz#09e86eeed5febb98e9442458ad2970c8f1a173ef"
integrity sha512-EmbC3uLl60pw2VqSSkj6HpZ6jTk12RMrwXMBdYtM6niq0MdEaRq9KYCwpJflkOZj349BLGQm1MI/JO1W96kLWQ==
"react-redux@^6.0.0 || ^7.0.0":
version "7.1.0"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.0.tgz#72af7cf490a74acdc516ea9c1dd80e25af9ea0b2"
integrity sha512-hyu/PoFK3vZgdLTg9ozbt7WF3GgX5+Yn3pZm5/96/o4UueXA+zj08aiSC9Mfj2WtD1bvpIb3C5yvskzZySzzaw==
dependencies:
"@babel/runtime" "^7.2.0"
hoist-non-react-statics "^3.2.1"
"@babel/runtime" "^7.4.5"
hoist-non-react-statics "^3.3.0"
invariant "^2.2.4"
loose-envify "^1.4.0"
prop-types "^15.6.2"
react-is "^16.6.3"
prop-types "^15.7.2"
react-is "^16.8.6"

react-test-renderer@^16.0.0-0, react-test-renderer@^16.6.3:
version "16.7.0"
Expand Down Expand Up @@ -6275,6 +6301,11 @@ regenerator-runtime@^0.12.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==

regenerator-runtime@^0.13.2:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==

regenerator-transform@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
Expand Down

0 comments on commit 88ad6fc

Please sign in to comment.