import chai from 'chai'; import Sinon from 'sinon'; import chaiAsPromised from 'chai-as-promised'; import { SignalService } from '../../../../protobuf'; import { ConfigurationMessage } from '../../../../session/messages/outgoing/controlMessage/ConfigurationMessage'; import { UserUtils } from '../../../../session/utils'; import { TestUtils } from '../../../test-utils'; import * as cache from '../../../../receiver/cache'; import { EnvelopePlus } from '../../../../receiver/types'; import { ConfigMessageHandler } from '../../../../receiver/configMessage'; import { ConfigurationSync } from '../../../../session/utils/job_runners/jobs/ConfigurationSyncJob'; import { ReleasedFeatures } from '../../../../util/releaseFeature'; import { stubData } from '../../../test-utils/utils'; chai.use(chaiAsPromised as any); chai.should(); const { expect } = chai; describe('handleConfigurationMessageLegacy_receiving', () => { let createOrUpdateStub: Sinon.SinonStub; let getItemByIdStub: Sinon.SinonStub; let sender: string; let envelope: EnvelopePlus; let config: ConfigurationMessage; beforeEach(() => { TestUtils.stubWindowFeatureFlags(); Sinon.stub(cache, 'removeFromCache').resolves(); sender = TestUtils.generateFakePubKey().key; config = new ConfigurationMessage({ activeOpenGroups: [], activeClosedGroups: [], timestamp: Date.now(), identifier: 'identifier', displayName: 'displayName', contacts: [], }); Sinon.stub(ConfigurationSync, 'queueNewJobIfNeeded').resolves(); TestUtils.stubWindow('setSettingValue', () => undefined); }); afterEach(() => { Sinon.restore(); }); it('should not be processed if we do not have a pubkey', async () => { TestUtils.stubWindowLog(); Sinon.stub(UserUtils, 'getOurPubKeyStrFromCache').resolves(undefined); envelope = TestUtils.generateEnvelopePlus(sender); const proto = config.contentProto(); createOrUpdateStub = stubData('createOrUpdateItem').resolves(); getItemByIdStub = stubData('getItemById').resolves(); const checkIsUserConfigFeatureReleasedStub = Sinon.stub( ReleasedFeatures, 'checkIsUserConfigFeatureReleased' ).resolves(false); await ConfigMessageHandler.handleConfigurationMessageLegacy( envelope, proto.configurationMessage as SignalService.ConfigurationMessage ); expect(createOrUpdateStub.callCount).to.equal(0); expect(getItemByIdStub.callCount).to.equal(0); expect(checkIsUserConfigFeatureReleasedStub.callCount).to.be.eq(1); // should only have the one as part of the global legacy check, but none for the smaller handlers }); describe('with ourNumber set', () => { const ourNumber = TestUtils.generateFakePubKey().key; beforeEach(() => { Sinon.stub(UserUtils, 'getOurPubKeyStrFromCache').resolves(ourNumber); }); it('should not be processed if the message is not coming from our number', async () => { const proto = config.contentProto(); // sender !== ourNumber envelope = TestUtils.generateEnvelopePlus(sender); Sinon.stub(ReleasedFeatures, 'checkIsUserConfigFeatureReleased').resolves(false); createOrUpdateStub = stubData('createOrUpdateItem').resolves(); getItemByIdStub = stubData('getItemById').resolves(); await ConfigMessageHandler.handleConfigurationMessageLegacy( envelope, proto.configurationMessage as SignalService.ConfigurationMessage ); expect(createOrUpdateStub.callCount).to.equal(0); expect(getItemByIdStub.callCount).to.equal(0); }); }); });