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