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.
		
		
		
		
		
			
		
			
				
	
	
		
			164 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
| /* global textsecure, BlockedNumberController, storage */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| describe('Blocked Number Controller', () => {
 | |
|   beforeEach(async () => {
 | |
|     // Purge everything manually
 | |
|     const numbers = storage.getBlockedNumbers();
 | |
|     numbers.forEach(storage.removeBlockedNumber);
 | |
|     window.getBlockedNumbers().reset([]);
 | |
|   });
 | |
| 
 | |
|   describe('reset', () => {
 | |
|     it('clears blocked numbers', () => {
 | |
|       BlockedNumberController.block('1');
 | |
|       assert.isNotEmpty(storage.getBlockedNumbers());
 | |
|       assert.isNotEmpty(window.getBlockedNumbers().models);
 | |
| 
 | |
|       BlockedNumberController.reset();
 | |
|       assert.isEmpty(storage.getBlockedNumbers());
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('refresh', () => {
 | |
|     it('loads blocked numbers from storage', () => {
 | |
|       BlockedNumberController.refresh();
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
| 
 | |
|       storage.addBlockedNumber('1');
 | |
|       storage.addBlockedNumber('2');
 | |
|       BlockedNumberController.refresh();
 | |
| 
 | |
|       const blocked = window.getBlockedNumbers().map(m => m.get('number'));
 | |
|       assert.lengthOf(blocked, 2);
 | |
|       assert.deepEqual(['1', '2'], blocked.sort());
 | |
|     });
 | |
| 
 | |
|     it('overrides old numbers if we refresh again', () => {
 | |
|       BlockedNumberController.refresh();
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
| 
 | |
|       storage.addBlockedNumber('1');
 | |
|       BlockedNumberController.refresh();
 | |
|       assert.isNotEmpty(
 | |
|         window.getBlockedNumbers().find(m => m.get('number') === '1')
 | |
|       );
 | |
| 
 | |
|       storage.removeBlockedNumber('1');
 | |
|       storage.addBlockedNumber('2');
 | |
|       BlockedNumberController.refresh();
 | |
|       assert.isNotEmpty(
 | |
|         window.getBlockedNumbers().find(m => m.get('number') === '2')
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     it('throws if storage is invalid', () => {
 | |
|       const _storage = window.storage;
 | |
|       window.storage = null;
 | |
|       assert.throws(
 | |
|         () => BlockedNumberController.refresh(),
 | |
|         'BlockedNumberController: Could not load blocked numbers'
 | |
|       );
 | |
|       window.storage = _storage;
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('block', () => {
 | |
|     beforeEach(() => {
 | |
|       BlockedNumberController.refresh();
 | |
|       assert.isEmpty(storage.getBlockedNumbers());
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
|     });
 | |
| 
 | |
|     it('adds number to the blocked list', () => {
 | |
|       BlockedNumberController.block('1');
 | |
| 
 | |
|       const numbers = window.getBlockedNumbers().models;
 | |
|       assert.lengthOf(numbers, 1);
 | |
|       assert.strictEqual('1', numbers[0].get('number'));
 | |
|       assert.deepEqual(['1'], storage.getBlockedNumbers());
 | |
|     });
 | |
| 
 | |
|     it('only blocks the same number once', () => {
 | |
|       BlockedNumberController.block('2');
 | |
|       BlockedNumberController.block('2');
 | |
|       assert.lengthOf(window.getBlockedNumbers().models, 1);
 | |
|       assert.deepEqual(['2'], storage.getBlockedNumbers());
 | |
|     });
 | |
| 
 | |
|     it('does not block our own number', () => {
 | |
|       BlockedNumberController.block(textsecure.storage.user.getNumber());
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
|       assert.isEmpty(storage.getBlockedNumbers());
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('unblock', () => {
 | |
|     beforeEach(() => {
 | |
|       BlockedNumberController.refresh();
 | |
|       assert.isEmpty(storage.getBlockedNumbers());
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
|     });
 | |
| 
 | |
|     it('removes number from the blocked list', () => {
 | |
|       BlockedNumberController.block('1');
 | |
|       BlockedNumberController.block('2');
 | |
| 
 | |
|       assert.lengthOf(window.getBlockedNumbers().models, 2);
 | |
|       assert.lengthOf(storage.getBlockedNumbers(), 2);
 | |
| 
 | |
|       BlockedNumberController.unblock('1');
 | |
| 
 | |
|       const numbers = window.getBlockedNumbers().models;
 | |
|       assert.lengthOf(numbers, 1);
 | |
|       assert.isEmpty(numbers.filter(n => n.get('number') === '1'));
 | |
|       assert.deepEqual(['2'], storage.getBlockedNumbers());
 | |
|     });
 | |
| 
 | |
|     it('removes number from the blocked list even if it is not present in the collection', () => {
 | |
|       BlockedNumberController.block('1');
 | |
|       BlockedNumberController.block('2');
 | |
|       window.getBlockedNumbers().reset([]);
 | |
| 
 | |
|       assert.isEmpty(window.getBlockedNumbers().models);
 | |
|       assert.lengthOf(storage.getBlockedNumbers(), 2);
 | |
| 
 | |
|       BlockedNumberController.unblock('1');
 | |
|       assert.deepEqual(['2'], storage.getBlockedNumbers());
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('unblockAll', () => {
 | |
|     it('removes all our blocked numbers', () => {
 | |
|       BlockedNumberController.refresh();
 | |
| 
 | |
|       BlockedNumberController.block('1');
 | |
|       BlockedNumberController.block('2');
 | |
|       BlockedNumberController.block('3');
 | |
| 
 | |
|       assert.lengthOf(window.getBlockedNumbers().models, 3);
 | |
|       assert.lengthOf(storage.getBlockedNumbers(), 3);
 | |
| 
 | |
|       BlockedNumberController.unblockAll();
 | |
| 
 | |
|       assert.lengthOf(window.getBlockedNumbers().models, 0);
 | |
|       assert.lengthOf(storage.getBlockedNumbers(), 0);
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('isBlocked', () => {
 | |
|     it('returns whether a number is blocked', () => {
 | |
|       BlockedNumberController.refresh();
 | |
| 
 | |
|       BlockedNumberController.block('1');
 | |
|       assert.isOk(BlockedNumberController.isBlocked('1'));
 | |
|       assert.isNotOk(BlockedNumberController.isBlocked('2'));
 | |
| 
 | |
|       BlockedNumberController.unblock('1');
 | |
|       assert.isNotOk(BlockedNumberController.isBlocked('1'));
 | |
|     });
 | |
|   });
 | |
| });
 |