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.
		
		
		
		
		
			
		
			
				
	
	
		
			157 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			TypeScript
		
	
/* eslint-disable func-names  */
 | 
						|
/* eslint-disable import/no-extraneous-dependencies */
 | 
						|
// tslint:disable: await-promise
 | 
						|
// tslint:disable: no-implicit-dependencies
 | 
						|
// tslint:disable: no-invalid-this
 | 
						|
 | 
						|
import { afterEach, beforeEach, describe, it } from 'mocha';
 | 
						|
import { Common } from './common';
 | 
						|
import { Application } from 'spectron';
 | 
						|
import ConversationPage from './page-objects/conversation.page';
 | 
						|
 | 
						|
async function generateAndSendMessage(app: Application) {
 | 
						|
  // send a message from app and validate it is received on app2
 | 
						|
  const textMessage = Common.generateSendMessageText();
 | 
						|
  await app.client
 | 
						|
    .element(ConversationPage.sendMessageTextarea)
 | 
						|
    .setValue(textMessage);
 | 
						|
 | 
						|
  await app.client
 | 
						|
    .element(ConversationPage.sendMessageTextarea)
 | 
						|
    .getValue()
 | 
						|
    .should.eventually.equal(textMessage);
 | 
						|
  // send the message
 | 
						|
  await app.client.keys('Enter');
 | 
						|
 | 
						|
  // validate that the message has been added to the message list view
 | 
						|
  await app.client.waitForExist(
 | 
						|
    ConversationPage.existingSendMessageText(textMessage),
 | 
						|
    2000
 | 
						|
  );
 | 
						|
 | 
						|
  return textMessage;
 | 
						|
}
 | 
						|
 | 
						|
async function makeFriendsPlusMessage(
 | 
						|
  app: Application,
 | 
						|
  [app2, pubkey]: [Application, string]
 | 
						|
) {
 | 
						|
  await Common.makeFriends(app, [app2, pubkey]);
 | 
						|
 | 
						|
  // Send something back so that `app` can see our name
 | 
						|
  await app2.client.waitForExist(ConversationPage.conversationItem, 5000);
 | 
						|
  await app2.client.element(ConversationPage.conversationItem).click();
 | 
						|
  const text = await generateAndSendMessage(app2);
 | 
						|
 | 
						|
  await app.client.waitForExist(
 | 
						|
    ConversationPage.existingReceivedMessageText(text),
 | 
						|
    8000
 | 
						|
  );
 | 
						|
 | 
						|
  // Click away so we can call this function again
 | 
						|
  await app.client.element(ConversationPage.conversationButtonSection).click();
 | 
						|
}
 | 
						|
 | 
						|
async function testTwoMembers() {
 | 
						|
  const [app, app2] = await Common.startAppsAsFriends();
 | 
						|
 | 
						|
  const useSenderKeys = true;
 | 
						|
 | 
						|
  // create group and add new friend
 | 
						|
  await Common.addFriendToNewClosedGroup([app, app2], useSenderKeys);
 | 
						|
 | 
						|
  const text1 = await generateAndSendMessage(app);
 | 
						|
 | 
						|
  // validate that the message has been added to the message list view
 | 
						|
  await app2.client.waitForExist(
 | 
						|
    ConversationPage.existingReceivedMessageText(text1),
 | 
						|
    5000
 | 
						|
  );
 | 
						|
 | 
						|
  // Send a message back:
 | 
						|
  const text2 = await generateAndSendMessage(app2);
 | 
						|
 | 
						|
  // TODO: fix this. We can send messages back manually, not sure
 | 
						|
  // why this test fails
 | 
						|
  await app.client.waitForExist(
 | 
						|
    ConversationPage.existingReceivedMessageText(text2),
 | 
						|
    10000
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
async function testThreeMembers() {
 | 
						|
  // 1. Make three clients A, B, C
 | 
						|
 | 
						|
  const app1Props = {
 | 
						|
    recoveryPhrase: Common.TEST_RECOVERY_PHRASE_1,
 | 
						|
    displayName: Common.TEST_DISPLAY_NAME1,
 | 
						|
    stubSnode: true,
 | 
						|
  };
 | 
						|
 | 
						|
  const app2Props = {
 | 
						|
    recoveryPhrase: Common.TEST_RECOVERY_PHRASE_2,
 | 
						|
    displayName: Common.TEST_DISPLAY_NAME2,
 | 
						|
    stubSnode: true,
 | 
						|
  };
 | 
						|
 | 
						|
  const app3Props = {
 | 
						|
    recoveryPhrase: Common.TEST_RECOVERY_PHRASE_3,
 | 
						|
    displayName: Common.TEST_DISPLAY_NAME3,
 | 
						|
    stubSnode: true,
 | 
						|
  };
 | 
						|
 | 
						|
  const [app1, app2, app3] = await Promise.all([
 | 
						|
    Common.startAndStub(app1Props),
 | 
						|
    Common.startAndStubN(app2Props, 2),
 | 
						|
    Common.startAndStubN(app3Props, 3),
 | 
						|
  ]);
 | 
						|
 | 
						|
  // 2. Make A friends with B and C (B and C are not friends)
 | 
						|
  await makeFriendsPlusMessage(app1, [app2, Common.TEST_PUBKEY2]);
 | 
						|
 | 
						|
  await makeFriendsPlusMessage(app1, [app3, Common.TEST_PUBKEY3]);
 | 
						|
 | 
						|
  const useSenderKeys = true;
 | 
						|
 | 
						|
  // 3. Add all three to the group
 | 
						|
 | 
						|
  await Common.addFriendToNewClosedGroup([app1, app2, app3], useSenderKeys);
 | 
						|
 | 
						|
  // 4. Test that all members can see the message from app1
 | 
						|
  const text1 = await generateAndSendMessage(app1);
 | 
						|
  await app2.client.waitForExist(
 | 
						|
    ConversationPage.existingReceivedMessageText(text1),
 | 
						|
    5000
 | 
						|
  );
 | 
						|
  await app3.client.waitForExist(
 | 
						|
    ConversationPage.existingReceivedMessageText(text1),
 | 
						|
    5000
 | 
						|
  );
 | 
						|
  // TODO: test that B and C can send messages to the group
 | 
						|
 | 
						|
  // const text2 = await generateAndSendMessage(app3);
 | 
						|
 | 
						|
  // await app2.client.waitForExist(
 | 
						|
  //   ConversationPage.existingReceivedMessageText(text2),
 | 
						|
  //   5000
 | 
						|
  // );
 | 
						|
}
 | 
						|
 | 
						|
describe('senderkeys', function() {
 | 
						|
  this.timeout(60000);
 | 
						|
  this.slow(20000);
 | 
						|
  beforeEach(async () => {
 | 
						|
    await Common.killallElectron();
 | 
						|
    await Common.stopStubSnodeServer();
 | 
						|
  });
 | 
						|
 | 
						|
  afterEach(async () => {
 | 
						|
    await Common.killallElectron();
 | 
						|
    await Common.stopStubSnodeServer();
 | 
						|
  });
 | 
						|
 | 
						|
  it('Two member group', testTwoMembers);
 | 
						|
 | 
						|
  it('Three member group: test session requests', testThreeMembers);
 | 
						|
});
 |