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:
Michel Weststrate
2020-12-07 09:43:42 -08:00
committed by Facebook GitHub Bot
parent 031cec299b
commit 698df77553
6 changed files with 59 additions and 3 deletions

View File

@@ -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);
}
});

View File

@@ -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;
}

View File

@@ -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,
};
}

View File

@@ -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;
},
};
}