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 < any > ;
let getItemByIdStub : Sinon.SinonStub < any > ;
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 ) ;
} ) ;
} ) ;
} ) ;