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.
		
		
		
		
		
			
		
			
				
	
	
		
			95 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			TypeScript
		
	
import chai from 'chai';
 | 
						|
import { describe } from 'mocha';
 | 
						|
import Sinon from 'sinon';
 | 
						|
import { filterDuplicatesFromDbAndIncomingV4 } from '../../../../../session/apis/open_group_api/opengroupV2/SogsFilterDuplicate';
 | 
						|
import { TestUtils } from '../../../../test-utils';
 | 
						|
 | 
						|
const { expect } = chai;
 | 
						|
 | 
						|
describe('filterDuplicatesFromDbAndIncomingV4', () => {
 | 
						|
  describe('filters already duplicated message in the same incoming batch', () => {
 | 
						|
    beforeEach(() => {
 | 
						|
      TestUtils.stubData('filterAlreadyFetchedOpengroupMessage').returnsArg(0);
 | 
						|
      TestUtils.stubWindowLog();
 | 
						|
    });
 | 
						|
 | 
						|
    afterEach(() => {
 | 
						|
      Sinon.restore();
 | 
						|
    });
 | 
						|
 | 
						|
    it('no duplicates', async () => {
 | 
						|
      const msg1 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg2 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg3 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const filtered = await filterDuplicatesFromDbAndIncomingV4([msg1, msg2, msg3]);
 | 
						|
      expect(filtered.length).to.be.eq(3);
 | 
						|
      expect(filtered[0]).to.be.deep.eq(msg1);
 | 
						|
      expect(filtered[1]).to.be.deep.eq(msg2);
 | 
						|
      expect(filtered[2]).to.be.deep.eq(msg3);
 | 
						|
    });
 | 
						|
 | 
						|
    it('two duplicate sender but not the same timestamp', async () => {
 | 
						|
      const msg1 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg2 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      msg2.session_id = msg1.session_id;
 | 
						|
      msg2.posted = Date.now() + 2;
 | 
						|
      const msg3 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const filtered = await filterDuplicatesFromDbAndIncomingV4([msg1, msg2, msg3]);
 | 
						|
      expect(filtered.length).to.be.eq(3);
 | 
						|
      expect(filtered[0]).to.be.deep.eq(msg1);
 | 
						|
      expect(filtered[1]).to.be.deep.eq(msg2);
 | 
						|
      expect(filtered[2]).to.be.deep.eq(msg3);
 | 
						|
    });
 | 
						|
 | 
						|
    it('two duplicate timestamp but not the same sender', async () => {
 | 
						|
      const msg1 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg2 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      msg2.posted = msg1.posted;
 | 
						|
      const msg3 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const filtered = await filterDuplicatesFromDbAndIncomingV4([msg1, msg2, msg3]);
 | 
						|
      expect(filtered.length).to.be.eq(3);
 | 
						|
      expect(filtered[0]).to.be.deep.eq(msg1);
 | 
						|
      expect(filtered[1]).to.be.deep.eq(msg2);
 | 
						|
      expect(filtered[2]).to.be.deep.eq(msg3);
 | 
						|
    });
 | 
						|
 | 
						|
    it('two duplicate timestamp but not the same sender', async () => {
 | 
						|
      const msg1 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg2 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      msg2.posted = msg1.posted;
 | 
						|
      const msg3 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const filtered = await filterDuplicatesFromDbAndIncomingV4([msg1, msg2, msg3]);
 | 
						|
      expect(filtered.length).to.be.eq(3);
 | 
						|
      expect(filtered[0]).to.be.deep.eq(msg1);
 | 
						|
      expect(filtered[1]).to.be.deep.eq(msg2);
 | 
						|
      expect(filtered[2]).to.be.deep.eq(msg3);
 | 
						|
    });
 | 
						|
 | 
						|
    it('two duplicates in the same poll ', async () => {
 | 
						|
      const msg1 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg2 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      msg2.posted = msg1.posted;
 | 
						|
      msg2.session_id = msg1.session_id;
 | 
						|
      const msg3 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const filtered = await filterDuplicatesFromDbAndIncomingV4([msg1, msg2, msg3]);
 | 
						|
      expect(filtered.length).to.be.eq(2);
 | 
						|
      expect(filtered[0]).to.be.deep.eq(msg1);
 | 
						|
      expect(filtered[1]).to.be.deep.eq(msg3);
 | 
						|
    });
 | 
						|
 | 
						|
    it('three duplicates in the same poll', async () => {
 | 
						|
      const msg1 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      const msg2 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
 | 
						|
      const msg3 = TestUtils.generateOpenGroupMessageV4();
 | 
						|
      msg2.posted = msg1.posted;
 | 
						|
      msg2.session_id = msg1.session_id;
 | 
						|
      msg3.posted = msg1.posted;
 | 
						|
      msg3.session_id = msg1.session_id;
 | 
						|
      const filtered = await filterDuplicatesFromDbAndIncomingV4([msg1, msg2, msg3]);
 | 
						|
      expect(filtered.length).to.be.eq(1);
 | 
						|
      expect(filtered[0]).to.be.deep.eq(msg1);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |