@ -1,19 +1,19 @@
import { expect } from 'chai' ;
import { from_hex , from_string , to_hex } from 'libsodium-wrappers-sumo' ;
import { from_hex , from_string } from 'libsodium-wrappers-sumo' ;
import * as SessionUtilWrapper from 'session_util_wrapper' ;
// tslint:disable: chai-vague-errors no-unused-expression no-http-string no-octal-literal whitespace
describe ( 'libsession_wrapper_contacts ' , ( ) = > {
it ( 'contacts' , ( ) = > {
// Note: To run this test, you need to compile the libsession wrapper for node (and not for electron).
// To do this, you can cd to the node_module/libsession_wrapper folder and do
// yarn configure && yarn build
// once that is done, you can rename this file and remove the _skip suffix so that test is run.
// Note: To run this test, you need to compile the libsession wrapper for node (and not for electron).
// To do this, you can cd to the node_module/libsession_wrapper folder and do
// yarn configure && yarn build
// once that is done, you can rename this file and remove the _skip suffix so that test is run.
// We have to disable it by filename as nodejs tries to load the module during the import step above, and fails as it is not compiled for nodejs but for electron.
// We have to disable it by filename as nodejs tries to load the module during the import step above, and fails as it is not compiled for nodejs but for electron.
it ( '[config][contacts]' , ( ) = > {
const edSecretKey = from_hex (
'0123456789abcdef0123456789abcdef000000000000000000000000000000004cb76fdc6d32278e3f83dbf608360ecc6b65727934b85d2fb86862ff98c46ab7'
) ;
@ -139,7 +139,7 @@ describe('libsession_wrapper_contacts ', () => {
contacts2 . setNickname ( third_id , 'Nickname 3' ) ;
contacts2 . setApproved ( third_id , true ) ;
contacts2 . setBlocked ( third_id , true ) ;
contacts2 . setProfilePic ture ( third_id , 'http://example.com/huge.bmp' , from_string ( 'qwerty' ) ) ;
contacts2 . setProfilePic ( third_id , 'http://example.com/huge.bmp' , from_string ( 'qwerty' ) ) ;
expect ( contacts . needsPush ( ) ) . to . be . true ;
expect ( contacts2 . needsPush ( ) ) . to . be . true ;
@ -180,4 +180,113 @@ describe('libsession_wrapper_contacts ', () => {
expect ( session_ids2 ) . to . be . deep . eq ( [ another_id , third_id ] ) ;
expect ( nicknames2 ) . to . be . deep . eq ( [ '(N/A)' , 'Nickname 3' ] ) ;
} ) ;
it ( '[config][contacts][c]' , ( ) = > {
const edSecretKey = from_hex (
'0123456789abcdef0123456789abcdef000000000000000000000000000000004cb76fdc6d32278e3f83dbf608360ecc6b65727934b85d2fb86862ff98c46ab7'
) ;
// Initialize a brand new, empty config because we have no dump data to deal with.
const contacts = new SessionUtilWrapper . ContactsConfigWrapper ( edSecretKey , null ) ;
const real_id = '050000000000000000000000000000000000000000000000000000000000000000' ;
expect ( contacts . get ( real_id ) ) . to . be . null ;
const c = contacts . getOrCreate ( real_id ) ;
expect ( c . id ) . to . be . eq ( real_id ) ;
expect ( c . name ) . to . be . null ;
expect ( c . nickname ) . to . be . null ;
expect ( c . approved ) . to . be . false ;
expect ( c . approvedMe ) . to . be . false ;
expect ( c . blocked ) . to . be . false ;
expect ( c . profilePicture ? . key ) . to . be . undefined ;
expect ( c . profilePicture ? . url ) . to . be . undefined ;
c . name = 'Joe' ;
c . nickname = 'Joey' ;
c . approved = true ;
c . approvedMe = true ;
// contacts.set(c); // FIXME use .set when ready
contacts . setName ( real_id , c . name ) ;
contacts . setNickname ( real_id , c . nickname ) ;
contacts . setApproved ( real_id , c . approved ) ;
contacts . setApprovedMe ( real_id , c . approvedMe ) ;
const c2 = contacts . getOrCreate ( real_id ) ;
expect ( c2 . name ) . to . be . eq ( 'Joe' ) ;
expect ( c2 . nickname ) . to . be . eq ( 'Joey' ) ;
expect ( c2 . approved ) . to . be . true ;
expect ( c2 . approvedMe ) . to . be . true ;
expect ( c2 . blocked ) . to . be . false ;
expect ( c2 . profilePicture ? . key ) . to . be . undefined ;
expect ( c2 . profilePicture ? . url ) . to . be . undefined ;
expect ( contacts . needsDump ( ) ) . to . be . true ;
expect ( contacts . needsPush ( ) ) . to . be . true ;
let push1 = contacts . push ( ) ;
expect ( push1 . seqno ) . to . be . equal ( 1 ) ;
const contacts2 = new SessionUtilWrapper . ContactsConfigWrapper ( edSecretKey , null ) ;
let accepted = contacts2 . merge ( [ push1 . data ] ) ;
expect ( accepted ) . to . be . equal ( 1 ) ;
contacts . confirmPushed ( push1 . seqno ) ;
let c3 = contacts2 . getOrCreate ( real_id ) ;
expect ( c3 . name ) . to . be . eq ( 'Joe' ) ;
expect ( c3 . nickname ) . to . be . eq ( 'Joey' ) ;
expect ( c3 . approved ) . to . be . true ;
expect ( c3 . approvedMe ) . to . be . true ;
expect ( c3 . blocked ) . to . be . false ;
expect ( c3 . profilePicture ? . key ) . to . be . undefined ;
expect ( c3 . profilePicture ? . url ) . to . be . undefined ;
const another_id = '051111111111111111111111111111111111111111111111111111111111111111' ;
c3 = contacts . getOrCreate ( another_id ) ;
expect ( c3 . name ) . to . be . null ;
expect ( c3 . nickname ) . to . be . null ;
expect ( c3 . approved ) . to . be . false ;
expect ( c3 . approvedMe ) . to . be . false ;
expect ( c3 . blocked ) . to . be . false ;
expect ( c3 . profilePicture ? . key ) . to . be . undefined ;
expect ( c3 . profilePicture ? . url ) . to . be . undefined ;
contacts2 . set ( c3 ) ;
let push2 = contacts2 . push ( ) ;
accepted = contacts . merge ( [ push2 . data ] ) ;
expect ( accepted ) . to . be . equal ( 1 ) ;
const allContacts2 = contacts . getAll ( ) ;
const session_ids2 = allContacts2 . map ( m = > m . id ) ;
const nicknames2 = allContacts2 . map ( m = > m . nickname || '(N/A)' ) ;
expect ( session_ids2 . length ) . to . be . eq ( 2 ) ;
expect ( nicknames2 . length ) . to . be . eq ( 2 ) ;
expect ( session_ids2 ) . to . be . deep . eq ( [ real_id , another_id ] ) ;
expect ( nicknames2 ) . to . be . deep . eq ( [ 'Joey' , '(N/A)' ] ) ;
// Changing things while iterating:
// no need to support this in JS for now.
const allContacts3 = contacts . getAll ( ) ;
let deletions = 0 ;
let non_deletions = 0 ;
allContacts3 . forEach ( c = > {
if ( c . id !== real_id ) {
contacts . erase ( c . id ) ;
deletions ++ ;
} else {
non_deletions ++ ;
}
} ) ;
expect ( deletions ) . to . be . eq ( 1 ) ;
expect ( non_deletions ) . to . be . eq ( 1 ) ;
expect ( contacts . get ( real_id ) ) . to . exist ;
expect ( contacts . get ( another_id ) ) . to . be . null ;
} ) ;
} ) ;