Expose GK api on client
Summary: Make sure that GKs can be used in pure sandy plugins. Reviewed By: jknoxville Differential Revision: D25368358 fbshipit-source-id: c7c6aa4ecf0443cb3b5d90e22e8aca9a73a69389
This commit is contained in:
committed by
Facebook GitHub Bot
parent
031cec299b
commit
698df77553
@@ -401,3 +401,31 @@ test('available methods can be overridden', async () => {
|
||||
);
|
||||
expect(await plugin.instance.checkEnabled()).toBeFalsy();
|
||||
});
|
||||
|
||||
test('GKs are supported', () => {
|
||||
const pluginModule = {
|
||||
plugin(client: PluginClient<{}, {}>) {
|
||||
return {
|
||||
isTest() {
|
||||
return client.GK('bla');
|
||||
},
|
||||
};
|
||||
},
|
||||
Component() {
|
||||
return null;
|
||||
},
|
||||
};
|
||||
|
||||
{
|
||||
const plugin = TestUtils.startPlugin(pluginModule);
|
||||
expect(plugin.instance.isTest()).toBe(false);
|
||||
}
|
||||
{
|
||||
const plugin = TestUtils.startPlugin(pluginModule, {GKs: ['bla']});
|
||||
expect(plugin.instance.isTest()).toBe(true);
|
||||
}
|
||||
{
|
||||
const plugin = TestUtils.startPlugin(pluginModule, {GKs: ['x']});
|
||||
expect(plugin.instance.isTest()).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -15,4 +15,5 @@ import {NormalizedMenuEntry} from './MenuEntry';
|
||||
export interface FlipperLib {
|
||||
enableMenuEntries(menuEntries: NormalizedMenuEntry[]): void;
|
||||
createPaste(input: string): Promise<string | undefined>;
|
||||
GK(gatekeeper: string): boolean;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,12 @@ export interface BasePluginClient {
|
||||
* Facebook only function. Resolves to undefined if creating a paste failed.
|
||||
*/
|
||||
createPaste(input: string): Promise<string | undefined>;
|
||||
|
||||
/**
|
||||
* Returns true if the user is taking part in the given gatekeeper.
|
||||
* Always returns `false` in open source.
|
||||
*/
|
||||
GK(gkName: string): boolean;
|
||||
}
|
||||
|
||||
let currentPluginInstance: BasePluginInstance | undefined = undefined;
|
||||
@@ -155,6 +161,7 @@ export abstract class BasePluginInstance {
|
||||
}
|
||||
},
|
||||
createPaste: this.flipperLib.createPaste,
|
||||
GK: this.flipperLib.GK,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,10 @@ interface StartPluginOptions {
|
||||
startUnactivated?: boolean;
|
||||
/** Provide a set of unsupported methods to simulate older clients that don't support certain methods yet */
|
||||
unsupportedMethods?: string[];
|
||||
/**
|
||||
* Provide a set of GKs that are enabled in this test.
|
||||
*/
|
||||
GKs?: string[];
|
||||
}
|
||||
|
||||
type ExtractClientType<Module extends FlipperPluginModule<any>> = Parameters<
|
||||
@@ -179,7 +183,7 @@ export function startPlugin<Module extends FlipperPluginModule<any>>(
|
||||
}
|
||||
|
||||
const sendStub = jest.fn();
|
||||
const flipperUtils = createMockFlipperLib();
|
||||
const flipperUtils = createMockFlipperLib(options);
|
||||
const testDevice = createMockDevice(options);
|
||||
const appName = 'TestApplication';
|
||||
const deviceName = 'TestDevice';
|
||||
@@ -290,7 +294,7 @@ export function startDevicePlugin<Module extends FlipperDevicePluginModule>(
|
||||
);
|
||||
}
|
||||
|
||||
const flipperLib = createMockFlipperLib();
|
||||
const flipperLib = createMockFlipperLib(options);
|
||||
const testDevice = createMockDevice(options);
|
||||
const pluginInstance = new SandyDevicePluginInstance(
|
||||
flipperLib,
|
||||
@@ -340,10 +344,13 @@ export function renderDevicePlugin<Module extends FlipperDevicePluginModule>(
|
||||
};
|
||||
}
|
||||
|
||||
export function createMockFlipperLib(): FlipperLib {
|
||||
export function createMockFlipperLib(options?: StartPluginOptions): FlipperLib {
|
||||
return {
|
||||
enableMenuEntries: jest.fn(),
|
||||
createPaste: jest.fn(),
|
||||
GK(gk: string) {
|
||||
return options?.GKs?.includes(gk) || false;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user