11import createSpyObj = jasmine . createSpyObj ;
22import createSpy = jasmine . createSpy ;
33
4- import { NgsgSelectionService } from './ngsg-selection.service' ;
5- import { NgsgClassService } from '../helpers/class/ngsg-class.service' ;
6- import { NgsgStoreService } from '../store/ngsg-store.service' ;
7- import { NgsgElementsHelper } from '../helpers/element/ngsg-elements.helper' ;
4+ import { NgsgSelectionService } from './ngsg-selection.service' ;
5+ import { NgsgClassService } from '../helpers/class/ngsg-class.service' ;
6+ import { NgsgStoreService } from '../store/ngsg-store.service' ;
7+ import { NgsgElementsHelper } from '../helpers/element/ngsg-elements.helper' ;
88
99describe ( 'NgsgSelectionService' , ( ) => {
10-
11- const ngsgClassService = createSpyObj < NgsgClassService > ( 'classService' ,
12- [ 'addSelectedClass' , 'addSelectedClass' , 'removeSelectedClass' ] ) ;
13- const ngsgStore = createSpyObj < NgsgStoreService > ( 'ngsgStore' ,
14- [ 'addSelectedItem' , 'hasSelectedItems' , 'removeSelectedItem' ] ) ;
10+ const ngsgClassService = createSpyObj < NgsgClassService > ( 'classService' , [
11+ 'addSelectedClass' ,
12+ 'addSelectedClass' ,
13+ 'removeSelectedClass'
14+ ] ) ;
15+ const ngsgStore = createSpyObj < NgsgStoreService > ( 'ngsgStore' , [
16+ 'addSelectedItem' ,
17+ 'getSelectedItems' ,
18+ 'hasSelectedItems' ,
19+ 'removeSelectedItem' ,
20+ 'resetSelectedItems'
21+ ] ) ;
1522 let sut : NgsgSelectionService ;
1623
1724 beforeEach ( ( ) => {
@@ -24,7 +31,6 @@ describe('NgsgSelectionService', () => {
2431 } ) ;
2532
2633 describe ( 'selectElementIfNoSelection' , ( ) => {
27-
2834 it ( 'should call hasSelectedItems with the group' , ( ) => {
2935 ngsgStore . hasSelectedItems . and . returnValue ( true ) ;
3036 const dragedElement = 'Cool element' as any ;
@@ -57,14 +63,13 @@ describe('NgsgSelectionService', () => {
5763
5864 expect ( findIndexSpy ) . toHaveBeenCalledWith ( dragedElement ) ;
5965 expect ( ngsgStore . addSelectedItem ) . toHaveBeenCalledWith ( group , {
60- node : dragedElement , originalIndex
66+ node : dragedElement ,
67+ originalIndex
6168 } ) ;
6269 } ) ;
6370
6471 describe ( 'Selection change' , ( ) => {
65-
6672 it ( 'should add the selectedItem if the Meta key is pressed and the item is clicked' , ( ) => {
67-
6873 const event = new KeyboardEvent ( 'keydown' , {
6974 key : 'Meta'
7075 } ) ;
@@ -77,11 +82,10 @@ describe('NgsgSelectionService', () => {
7782 window . dispatchEvent ( event ) ;
7883 sut . updateSelectedDragItem ( group , item , selected ) ;
7984
80- expect ( ngsgStore . addSelectedItem ) . toHaveBeenCalledWith ( group , { node : item , originalIndex : index } ) ;
85+ expect ( ngsgStore . addSelectedItem ) . toHaveBeenCalledWith ( group , { node : item , originalIndex : index } ) ;
8186 } ) ;
8287
8388 it ( 'should remove the selectedItem if the Meta key is pressed and the selected item is clicked' , ( ) => {
84-
8589 const event = new KeyboardEvent ( 'keydown' , {
8690 key : 'Meta'
8791 } ) ;
@@ -99,7 +103,6 @@ describe('NgsgSelectionService', () => {
99103
100104 it ( `should remove the selected class from the selected item if the Meta key is pressed
101105 and the selected item is clicked` , ( ) => {
102-
103106 const event = new KeyboardEvent ( 'keydown' , {
104107 key : 'Meta'
105108 } ) ;
@@ -114,7 +117,28 @@ describe('NgsgSelectionService', () => {
114117
115118 expect ( ngsgClassService . removeSelectedClass ) . toHaveBeenCalledWith ( item ) ;
116119 } ) ;
117- } ) ;
118120
121+ it ( `should reset the selected items if we click on an item without holding the shift key` , ( ) => {
122+ const event = new KeyboardEvent ( 'keyup' , {
123+ key : 'Meta'
124+ } ) ;
125+ const itemOne = { node : 'Foo' } ;
126+ const itemTwo = { node : 'Bar' } ;
127+ const items = [ itemOne , itemTwo ] ;
128+ const group = 'groupOne' ;
129+ const item = 'Some element' as any ;
130+ const selected = false ;
131+ const index = 2 ;
132+
133+ NgsgElementsHelper . findIndex = ( ) => index ;
134+ ngsgStore . getSelectedItems . and . returnValue ( items ) ;
135+ window . dispatchEvent ( event ) ;
136+ sut . updateSelectedDragItem ( group , item , selected ) ;
137+
138+ expect ( ngsgClassService . removeSelectedClass ) . toHaveBeenCalledWith ( itemOne . node ) ;
139+ expect ( ngsgClassService . removeSelectedClass ) . toHaveBeenCalledWith ( itemTwo . node ) ;
140+ expect ( ngsgStore . resetSelectedItems ) . toHaveBeenCalledWith ( group ) ;
141+ } ) ;
142+ } ) ;
119143 } ) ;
120144} ) ;
0 commit comments