You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
import * as sinon from 'sinon';
 | 
						|
import * as DataShape from '../../../../js/modules/data';
 | 
						|
import { Application } from 'spectron';
 | 
						|
 | 
						|
const globalAny: any = global;
 | 
						|
const sandbox = sinon.createSandbox();
 | 
						|
 | 
						|
// We have to do this in a weird way because Data uses module.exports
 | 
						|
//  which doesn't play well with sinon or ImportMock
 | 
						|
// tslint:disable-next-line: no-require-imports no-var-requires
 | 
						|
const Data = require('../../../../js/modules/data');
 | 
						|
type DataFunction = typeof DataShape;
 | 
						|
 | 
						|
/**
 | 
						|
 * Stub a function inside Data.
 | 
						|
 *
 | 
						|
 * Note: This uses a custom sandbox.
 | 
						|
 * Please call `restoreStubs()` or `stub.restore()` to restore original functionality.
 | 
						|
 */
 | 
						|
export function stubData<K extends keyof DataFunction>(fn: K): sinon.SinonStub {
 | 
						|
  return sandbox.stub(Data, fn);
 | 
						|
}
 | 
						|
 | 
						|
type WindowValue<K extends keyof Window> = Partial<Window[K]> | undefined;
 | 
						|
 | 
						|
/**
 | 
						|
 * Stub a window object.
 | 
						|
 *
 | 
						|
 * Note: This uses a custom sandbox.
 | 
						|
 * Please call `restoreStubs()` or `stub.restore()` to restore original functionality.
 | 
						|
 */
 | 
						|
export function stubWindow<K extends keyof Window>(
 | 
						|
  fn: K,
 | 
						|
  value: WindowValue<K>
 | 
						|
) {
 | 
						|
  // tslint:disable-next-line: no-typeof-undefined
 | 
						|
  if (typeof globalAny.window === 'undefined') {
 | 
						|
    globalAny.window = {};
 | 
						|
  }
 | 
						|
 | 
						|
  const set = (newValue: WindowValue<K>) => {
 | 
						|
    globalAny.window[fn] = newValue;
 | 
						|
  };
 | 
						|
 | 
						|
  const get = () => {
 | 
						|
    return globalAny.window[fn] as WindowValue<K>;
 | 
						|
  };
 | 
						|
 | 
						|
  globalAny.window[fn] = value;
 | 
						|
 | 
						|
  return {
 | 
						|
    get,
 | 
						|
    set,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
export async function spyMessageQueueSend(app: Application) {
 | 
						|
  await app.webContents.executeJavaScript(
 | 
						|
    "var messageQueueSpy = sinon.spy(window.libsession.getMessageQueue(), 'send'); "
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
export async function getAllMessagesSent(app: Application) {
 | 
						|
  const messageQueueSpy = await app.webContents.executeJavaScript(
 | 
						|
    'messageQueueSpy.args;'
 | 
						|
  );
 | 
						|
  if (!messageQueueSpy) {
 | 
						|
    throw new Error(
 | 
						|
      'Be sure to call spyMessageQueueSend() on the correct app first.'
 | 
						|
    );
 | 
						|
  }
 | 
						|
  const messages = await app.webContents.executeJavaScript(
 | 
						|
    'messageQueueSpy.args'
 | 
						|
  );
 | 
						|
  return messages;
 | 
						|
}
 | 
						|
 | 
						|
export function restoreStubs() {
 | 
						|
  globalAny.window = undefined;
 | 
						|
  sandbox.restore();
 | 
						|
}
 |