Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
- BREAKING CHANGES:
- Removed deprecated modules: `SplitFactory` component, `useClient`, `useTreatments` and `useManager` hooks, and `withSplitFactory`, `withSplitClient` and `withSplitTreatments` high-order components. Refer to ./MIGRATION-GUIDE.md for instructions on how to migrate to the new alternatives.
- Renamed TypeScript interfaces `ISplitFactoryProps` to `ISplitFactoryProviderProps`, and `ISplitFactoryChildProps` to `ISplitFactoryProviderChildProps`.
- Renamed `SplitSdk` to `SplitFactory` function, which is the underlying Split SDK factory, i.e., `import { SplitFactory } from '@splitsoftware/splitio'`.

1.13.0 (September 6, 2024)
- Updated @splitsoftware/splitio package to version 10.28.0 that includes minor updates:
Expand Down
18 changes: 9 additions & 9 deletions src/__tests__/SplitClient.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import React from 'react';
import { render, act } from '@testing-library/react';

/** Mocks and test utils */
import { mockSdk, Event } from './testUtils/mockSplitSdk';
import { mockSdk, Event } from './testUtils/mockSplitFactory';
jest.mock('@splitsoftware/splitio/client', () => {
return { SplitFactory: mockSdk() };
});
import { SplitFactory as SplitSdk } from '@splitsoftware/splitio/client';
import { SplitFactory } from '@splitsoftware/splitio/client';
import { sdkBrowser } from './testUtils/sdkConfigs';

/** Test target */
Expand Down Expand Up @@ -39,7 +39,7 @@ describe('SplitClient', () => {
});

test('passes ready props to the child if client is ready.', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY_FROM_CACHE);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);
(outerFactory.manager().names as jest.Mock).mockReturnValue(['split1']);
Expand All @@ -66,7 +66,7 @@ describe('SplitClient', () => {
});

test('rerender child on SDK_READY_TIMEDOUT, SDK_READY_FROM_CACHE, SDK_READY and SDK_UPDATE events.', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);
(outerFactory.manager().names as jest.Mock).mockReturnValue(['split1']);

Expand Down Expand Up @@ -118,7 +118,7 @@ describe('SplitClient', () => {
});

test('rerender child on SDK_READY_TIMED_OUT and SDK_UPDATE events, but not on SDK_READY.', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);
(outerFactory.manager().names as jest.Mock).mockReturnValue(['split1']);

Expand Down Expand Up @@ -162,7 +162,7 @@ describe('SplitClient', () => {
});

test('rerender child only on SDK_READY event, as default behaviour.', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);
(outerFactory.manager().names as jest.Mock).mockReturnValue(['split1']);

Expand Down Expand Up @@ -203,7 +203,7 @@ describe('SplitClient', () => {
});

test('must update on SDK events between the render and commit phases', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let count = 0;

render(
Expand All @@ -228,7 +228,7 @@ describe('SplitClient', () => {
});

test('renders a passed JSX.Element with a new SplitContext value.', (done) => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);

const Component = () => {
return (
Expand Down Expand Up @@ -270,7 +270,7 @@ describe('SplitClient', () => {

test(`passes a new client if re-rendered with a different splitKey.
Only updates the state if the new client triggers an event, but not the previous one.`, (done) => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let renderTimes = 0;

class InnerComponent extends React.Component<any, { splitKey: string }> {
Expand Down
26 changes: 13 additions & 13 deletions src/__tests__/SplitFactoryProvider.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import React from 'react';
import { render, act } from '@testing-library/react';

/** Mocks */
import { mockSdk, Event } from './testUtils/mockSplitSdk';
import { mockSdk, Event } from './testUtils/mockSplitFactory';
jest.mock('@splitsoftware/splitio/client', () => {
return { SplitFactory: mockSdk() };
});
import { SplitFactory as SplitSdk } from '@splitsoftware/splitio/client';
import { SplitFactory } from '@splitsoftware/splitio/client';
import { sdkBrowser } from './testUtils/sdkConfigs';
const logSpy = jest.spyOn(console, 'log');

Expand Down Expand Up @@ -39,7 +39,7 @@ describe('SplitFactoryProvider', () => {
});

test('passes ready props to the child if initialized with a ready factory.', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY_FROM_CACHE);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);
(outerFactory.manager().names as jest.Mock).mockReturnValue(['split1']);
Expand Down Expand Up @@ -98,7 +98,7 @@ describe('SplitFactoryProvider', () => {
</SplitFactoryProvider>
);

const innerFactory = (SplitSdk as jest.Mock).mock.results.slice(-1)[0].value;
const innerFactory = (SplitFactory as jest.Mock).mock.results.slice(-1)[0].value;
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY_TIMED_OUT));
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY_FROM_CACHE));
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY));
Expand All @@ -108,7 +108,7 @@ describe('SplitFactoryProvider', () => {
});

test('rerenders child on SDK_READY_TIMEDOUT, SDK_READY_FROM_CACHE, SDK_READY and SDK_UPDATE events (factory prop)', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let renderTimes = 0;
let previousLastUpdate = -1;

Expand Down Expand Up @@ -182,7 +182,7 @@ describe('SplitFactoryProvider', () => {
</SplitFactoryProvider>
);

const innerFactory = (SplitSdk as jest.Mock).mock.results.slice(-1)[0].value;
const innerFactory = (SplitFactory as jest.Mock).mock.results.slice(-1)[0].value;
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY_TIMED_OUT));
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY));
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_UPDATE));
Expand All @@ -191,7 +191,7 @@ describe('SplitFactoryProvider', () => {
});

test('rerenders child on SDK_READY_TIMED_OUT and SDK_UPDATE events, but not on SDK_READY (factory prop)', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let renderTimes = 0;
let previousLastUpdate = -1;

Expand Down Expand Up @@ -255,15 +255,15 @@ describe('SplitFactoryProvider', () => {
</SplitFactoryProvider>
);

const innerFactory = (SplitSdk as jest.Mock).mock.results.slice(-1)[0].value;
const innerFactory = (SplitFactory as jest.Mock).mock.results.slice(-1)[0].value;
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY_TIMED_OUT));
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_READY));
act(() => (innerFactory as any).client().__emitter__.emit(Event.SDK_UPDATE));
expect(renderTimes).toBe(2);
});

test('rerenders child only on SDK_READY and SDK_READY_FROM_CACHE event, as default behaviour (factory prop)', async () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let renderTimes = 0;
let previousLastUpdate = -1;

Expand Down Expand Up @@ -317,7 +317,7 @@ describe('SplitFactoryProvider', () => {
});

test('logs warning if both a config and factory are passed as props.', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);

render(
<SplitFactoryProvider config={sdkBrowser} factory={outerFactory} >
Expand All @@ -336,7 +336,7 @@ describe('SplitFactoryProvider', () => {
let renderTimes = 0;
const createdFactories = new Set<SplitIO.IBrowserSDK>();
const clientDestroySpies: jest.SpyInstance[] = [];
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);

const Component = ({ factory, isReady, hasTimedout }: ISplitFactoryProviderChildProps) => {
renderTimes++;
Expand Down Expand Up @@ -373,7 +373,7 @@ describe('SplitFactoryProvider', () => {
};

const emitSdkEvents = () => {
const factory = (SplitSdk as jest.Mock).mock.results.slice(-1)[0].value;
const factory = (SplitFactory as jest.Mock).mock.results.slice(-1)[0].value;
factory.client().__emitter__.emit(Event.SDK_READY_TIMED_OUT)
factory.client().__emitter__.emit(Event.SDK_READY)
};
Expand Down Expand Up @@ -426,7 +426,7 @@ describe('SplitFactoryProvider', () => {
test('doesn\'t clean up on unmount if the factory is provided as a prop.', () => {
let destroyMainClientSpy;
let destroySharedClientSpy;
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
const wrapper = render(
<SplitFactoryProvider factory={outerFactory}>
{({ factory }) => {
Expand Down
10 changes: 5 additions & 5 deletions src/__tests__/SplitTreatments.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import React from 'react';
import { render, RenderResult, act } from '@testing-library/react';

/** Mocks */
import { mockSdk, Event } from './testUtils/mockSplitSdk';
import { mockSdk, Event } from './testUtils/mockSplitFactory';
jest.mock('@splitsoftware/splitio/client', () => {
return { SplitFactory: mockSdk() };
});
import { SplitFactory as SplitSdk } from '@splitsoftware/splitio/client';
import { SplitFactory } from '@splitsoftware/splitio/client';
import { sdkBrowser } from './testUtils/sdkConfigs';
import { getStatus, IClientWithContext } from '../utils';
import { newSplitFactoryLocalhostInstance } from './testUtils/utils';
Expand Down Expand Up @@ -54,7 +54,7 @@ describe('SplitTreatments', () => {
});

it('passes as treatments prop the value returned by the method "client.getTreatmentsWithConfig(ByFlagSets)" if the SDK is ready.', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);

render(
Expand Down Expand Up @@ -184,7 +184,7 @@ describe.each([
return null;
}
])('SplitTreatments & useSplitTreatments optimization', (InnerComponent) => {
let outerFactory = SplitSdk(sdkBrowser);
let outerFactory = SplitFactory(sdkBrowser);
(outerFactory as any).client().__emitter__.emit(Event.SDK_READY);

function Component({ names, flagSets, attributes, splitKey, clientAttributes }: {
Expand Down Expand Up @@ -301,7 +301,7 @@ describe.each([

it('rerenders and re-evaluate feature flags when Split context changes (in both SplitFactoryProvider and SplitClient components).', async () => {
// changes in SplitContext implies that either the factory, the client (user key), or its status changed, what might imply a change in treatments
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let renderTimesComp1 = 0;
let renderTimesComp2 = 0;

Expand Down
8 changes: 4 additions & 4 deletions src/__tests__/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import {
SplitContext as ExportedSplitContext,
SplitSdk as ExportedSplitSdk,
SplitFactory as ExportedSplitFactory,
SplitFactoryProvider as ExportedSplitFactoryProvider,
SplitClient as ExportedSplitClient,
SplitTreatments as ExportedSplitTreatments,
Expand All @@ -24,7 +24,7 @@ import {
IUseSplitTreatmentsOptions,
} from '../index';
import { SplitContext } from '../SplitContext';
import { SplitFactory as SplitioEntrypoint } from '@splitsoftware/splitio/client';
import { SplitFactory } from '@splitsoftware/splitio/client';
import { SplitFactoryProvider } from '../SplitFactoryProvider';
import { SplitClient } from '../SplitClient';
import { SplitTreatments } from '../SplitTreatments';
Expand Down Expand Up @@ -52,8 +52,8 @@ describe('index', () => {
expect(ExportedSplitContext).toBe(SplitContext);
});

it('should export Splitio entrypoint', () => {
expect(ExportedSplitSdk).toBe(SplitioEntrypoint);
it('should export SplitFactory', () => {
expect(ExportedSplitFactory).toBe(SplitFactory);
});

});
16 changes: 8 additions & 8 deletions src/__tests__/useSplitClient.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import React from 'react';
import { act, render } from '@testing-library/react';

/** Mocks */
import { mockSdk, Event } from './testUtils/mockSplitSdk';
import { mockSdk, Event } from './testUtils/mockSplitFactory';
jest.mock('@splitsoftware/splitio/client', () => {
return { SplitFactory: mockSdk() };
});
import { SplitFactory as SplitSdk } from '@splitsoftware/splitio/client';
import { SplitFactory } from '@splitsoftware/splitio/client';
import { sdkBrowser } from './testUtils/sdkConfigs';

/** Test target */
Expand All @@ -19,7 +19,7 @@ import { testAttributesBinding, TestComponentProps } from './testUtils/utils';
describe('useSplitClient', () => {

test('returns the main client from the context updated by SplitFactoryProvider.', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let client;
render(
<SplitFactoryProvider factory={outerFactory} >
Expand All @@ -33,7 +33,7 @@ describe('useSplitClient', () => {
});

test('returns the client from the context updated by SplitClient.', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let client;
render(
<SplitFactoryProvider factory={outerFactory} >
Expand All @@ -49,7 +49,7 @@ describe('useSplitClient', () => {
});

test('returns a new client from the factory at Split context given a splitKey.', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let client;
render(
<SplitFactoryProvider factory={outerFactory} >
Expand Down Expand Up @@ -99,7 +99,7 @@ describe('useSplitClient', () => {
});

test('must update on SDK events', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
const mainClient = outerFactory.client() as any;
const user2Client = outerFactory.client('user_2') as any;

Expand Down Expand Up @@ -222,7 +222,7 @@ describe('useSplitClient', () => {

// Remove this test once side effects are moved to the useSplitClient effect.
test('must update on SDK events between the render phase (hook call) and commit phase (effect call)', () =>{
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let count = 0;

render(
Expand All @@ -244,7 +244,7 @@ describe('useSplitClient', () => {
});

test('must support changes in update props', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
const mainClient = outerFactory.client() as any;

let rendersCount = 0;
Expand Down
6 changes: 3 additions & 3 deletions src/__tests__/useSplitManager.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import React from 'react';
import { act, render } from '@testing-library/react';

/** Mocks */
import { Event, mockSdk } from './testUtils/mockSplitSdk';
import { Event, mockSdk } from './testUtils/mockSplitFactory';
jest.mock('@splitsoftware/splitio/client', () => {
return { SplitFactory: mockSdk() };
});
import { SplitFactory as SplitSdk } from '@splitsoftware/splitio/client';
import { SplitFactory } from '@splitsoftware/splitio/client';
import { sdkBrowser } from './testUtils/sdkConfigs';
import { getStatus } from '../utils';

Expand All @@ -17,7 +17,7 @@ import { useSplitManager } from '../useSplitManager';
describe('useSplitManager', () => {

test('returns the factory manager from the Split context, and updates when the context changes.', () => {
const outerFactory = SplitSdk(sdkBrowser);
const outerFactory = SplitFactory(sdkBrowser);
let hookResult;
render(
<SplitFactoryProvider factory={outerFactory} >
Expand Down
Loading