@@ -1020,6 +1020,7 @@ describe('igxCombo', () => {
10201020 newSelection : [ targetItem . itemID ] ,
10211021 added : [ targetItem . itemID ] ,
10221022 removed : [ ] ,
1023+ displayText : `${ targetItem . value [ combo . displayKey ] } ` ,
10231024 event : undefined ,
10241025 cancel : false
10251026 } ) ;
@@ -1034,6 +1035,7 @@ describe('igxCombo', () => {
10341035 newSelection : [ ] ,
10351036 added : [ ] ,
10361037 removed : [ targetItem . itemID ] ,
1038+ displayText : '' ,
10371039 event : undefined ,
10381040 cancel : false
10391041 } ) ;
@@ -1044,58 +1046,66 @@ describe('igxCombo', () => {
10441046 const combo = fix . componentInstance . combo ;
10451047 spyOn ( combo . onSelectionChange , 'emit' ) ;
10461048 let oldSelection = [ ] ;
1049+ /**
1050+ * The test component has a defined `valueKey` property.
1051+ * `selectItems` method should be called with the items' corresponding valueKeys
1052+ */
10471053 let newSelection = [ combo . data [ 1 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ;
1054+ let newSelectionKeys = newSelection . map ( entry => entry [ combo . valueKey ] ) ;
10481055
10491056 combo . toggle ( ) ;
10501057 tick ( ) ;
10511058 fix . detectChanges ( ) ;
1052- combo . selectItems ( newSelection ) ;
1059+ combo . selectItems ( newSelectionKeys ) ;
10531060 fix . detectChanges ( ) ;
10541061 expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
10551062 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 1 ) ;
10561063 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
10571064 oldSelection : oldSelection ,
1058- newSelection : newSelection ,
1059- added : [ combo . data [ 1 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ,
1065+ newSelection : newSelectionKeys ,
1066+ added : newSelectionKeys ,
10601067 removed : [ ] ,
1068+ displayText : newSelection . map ( entry => entry [ combo . valueKey ] ) . join ( ', ' ) ,
10611069 event : undefined ,
10621070 cancel : false
10631071 } ) ;
10641072
10651073 let newItem = combo . data [ 3 ] ;
1066- combo . selectItems ( [ newItem ] ) ;
1067- oldSelection = [ ...newSelection ] ;
1068- newSelection . push ( newItem ) ;
1074+ combo . selectItems ( [ newItem [ combo . valueKey ] ] ) ;
1075+ oldSelection = [ ...newSelectionKeys ] ;
1076+ newSelectionKeys . push ( newItem [ combo . valueKey ] ) ;
10691077 fix . detectChanges ( ) ;
1070- expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
1078+ expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelectionKeys . length ) ;
10711079 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 2 ) ;
10721080 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
10731081 oldSelection : oldSelection ,
1074- newSelection : newSelection ,
1082+ newSelection : newSelectionKeys ,
10751083 removed : [ ] ,
1076- added : [ combo . data [ 3 ] ] ,
1084+ added : [ newItem [ combo . valueKey ] ] ,
1085+ displayText : newSelectionKeys . join ( ', ' ) ,
10771086 event : undefined ,
10781087 cancel : false
10791088 } ) ;
10801089
1081- oldSelection = [ ...newSelection ] ;
1082- newSelection = [ combo . data [ 0 ] ] ;
1083- combo . selectItems ( newSelection , true ) ;
1090+ oldSelection = [ ...newSelectionKeys ] ;
1091+ newSelectionKeys = [ combo . data [ 0 ] [ combo . valueKey ] ] ;
1092+ combo . selectItems ( newSelectionKeys , true ) ;
10841093 fix . detectChanges ( ) ;
1085- expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
1094+ expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelectionKeys . length ) ;
10861095 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledTimes ( 3 ) ;
10871096 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
10881097 oldSelection : oldSelection ,
1089- newSelection : newSelection ,
1098+ newSelection : newSelectionKeys ,
10901099 removed : oldSelection ,
1091- added : [ combo . data [ 0 ] ] ,
1100+ added : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
1101+ displayText : combo . data [ 0 ] [ combo . valueKey ] ,
10921102 event : undefined ,
10931103 cancel : false
10941104 } ) ;
10951105
1096- oldSelection = [ ...newSelection ] ;
1106+ oldSelection = [ ...newSelectionKeys ] ;
10971107 newSelection = [ ] ;
1098- newItem = combo . data [ 0 ] ;
1108+ newItem = combo . data [ 0 ] [ combo . valueKey ] ;
10991109 combo . deselectItems ( [ newItem ] ) ;
11001110 fix . detectChanges ( ) ;
11011111 expect ( combo . selectedItems ( ) . length ) . toEqual ( newSelection . length ) ;
@@ -1104,7 +1114,8 @@ describe('igxCombo', () => {
11041114 expect ( combo . onSelectionChange . emit ) . toHaveBeenCalledWith ( {
11051115 oldSelection : oldSelection ,
11061116 newSelection : newSelection ,
1107- removed : [ combo . data [ 0 ] ] ,
1117+ removed : [ newItem ] ,
1118+ displayText : `` ,
11081119 added : [ ] ,
11091120 event : undefined ,
11101121 cancel : false
@@ -1422,11 +1433,12 @@ describe('igxCombo', () => {
14221433 const dropdown = combo . dropdown ;
14231434 let timesFired = 1 ;
14241435 const mockEvent = new MouseEvent ( 'click' ) ;
1425- const eventParams = {
1436+ const eventParams : IComboSelectionChangeEventArgs = {
14261437 oldSelection : [ ] ,
14271438 newSelection : [ ] ,
14281439 added : [ ] ,
14291440 removed : [ ] ,
1441+ displayText : '' ,
14301442 event : mockEvent ,
14311443 cancel : false
14321444 } ;
@@ -1446,12 +1458,14 @@ describe('igxCombo', () => {
14461458
14471459 eventParams . newSelection = [ dropdown . items [ 3 ] . value ] ;
14481460 eventParams . added = [ dropdown . items [ 3 ] . value ] ;
1461+ eventParams . displayText = dropdown . items [ 3 ] . value ;
14491462 verifyOnSelectionChangeEventIsFired ( 3 ) ;
14501463 timesFired ++ ;
14511464
14521465 eventParams . oldSelection = [ dropdown . items [ 3 ] . value ] ;
14531466 eventParams . newSelection = [ dropdown . items [ 3 ] . value , dropdown . items [ 7 ] . value ] ;
14541467 eventParams . added = [ dropdown . items [ 7 ] . value ] ;
1468+ eventParams . displayText = `${ dropdown . items [ 3 ] . value } , ${ dropdown . items [ 7 ] . value } ` ;
14551469 verifyOnSelectionChangeEventIsFired ( 7 ) ;
14561470 timesFired ++ ;
14571471
@@ -1460,6 +1474,7 @@ describe('igxCombo', () => {
14601474 eventParams . newSelection = [ dropdown . items [ 3 ] . value ] ;
14611475 eventParams . added = [ ] ;
14621476 eventParams . removed = [ dropdown . items [ 7 ] . value ] ;
1477+ eventParams . displayText = dropdown . items [ 3 ] . value ;
14631478 verifyOnSelectionChangeEventIsFired ( 7 ) ;
14641479 } ) ) ;
14651480 it ( 'Should be able to select item when in grouped state' , fakeAsync ( ( ) => {
@@ -1593,56 +1608,67 @@ describe('igxCombo', () => {
15931608 fixture . detectChanges ( ) ;
15941609 const combo = fixture . componentInstance . combo ;
15951610 const selectionSpy = spyOn ( fixture . componentInstance , 'onSelectionChange' ) ;
1596- const expectedResults = {
1597- newSelection : [ combo . data [ 0 ] ] ,
1611+ const expectedResults : IComboSelectionChangeEventArgs = {
1612+ newSelection : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
15981613 oldSelection : [ ] ,
1599- added : [ combo . data [ 0 ] ] ,
1614+ added : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
16001615 removed : [ ] ,
16011616 event : undefined ,
1617+ displayText : `${ combo . data [ 0 ] [ combo . displayKey ] } ` ,
16021618 cancel : false
16031619 } ;
1604- combo . selectItems ( [ combo . data [ 0 ] ] ) ;
1620+ combo . selectItems ( [ combo . data [ 0 ] [ combo . valueKey ] ] ) ;
16051621 expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
16061622 Object . assign ( expectedResults , {
16071623 newSelection : [ ] ,
1608- oldSelection : [ combo . data [ 0 ] ] ,
1624+ oldSelection : [ combo . data [ 0 ] [ combo . valueKey ] ] ,
16091625 added : [ ] ,
1610- removed : [ combo . data [ 0 ] ]
1626+ displayText : '' ,
1627+ removed : [ combo . data [ 0 ] [ combo . valueKey ] ]
16111628 } ) ;
1612- combo . deselectItems ( [ combo . data [ 0 ] ] ) ;
1629+ combo . deselectItems ( [ combo . data [ 0 ] [ combo . valueKey ] ] ) ;
16131630 expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
16141631 } ) ;
16151632
16161633 it ( 'Should properly emit added and removed values in change event - multiple values' , ( ) => {
16171634 const fixture = TestBed . createComponent ( IgxComboSampleComponent ) ;
16181635 fixture . detectChanges ( ) ;
16191636 const combo = fixture . componentInstance . combo ;
1637+ let oldSelection = [ ] ;
1638+ let newSelection = [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ;
16201639 const selectionSpy = spyOn ( fixture . componentInstance , 'onSelectionChange' ) ;
1621- const expectedResults = {
1622- newSelection : [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ,
1623- oldSelection : [ ] ,
1624- added : [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ,
1640+ const expectedResults : IComboSelectionChangeEventArgs = {
1641+ newSelection : newSelection . map ( e => e [ combo . valueKey ] ) ,
1642+ oldSelection,
1643+ added : newSelection . map ( e => e [ combo . valueKey ] ) ,
16251644 removed : [ ] ,
16261645 event : undefined ,
1646+ displayText : `${ newSelection . map ( entry => entry [ combo . displayKey ] ) . join ( ', ' ) } ` ,
16271647 cancel : false
16281648 } ;
1629- combo . selectItems ( [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ) ;
1649+ combo . selectItems ( newSelection . map ( e => e [ combo . valueKey ] ) ) ;
16301650 expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
1631- combo . deselectItems ( [ combo . data [ 0 ] ] ) ;
1651+ oldSelection = [ ...newSelection ] . map ( e => e [ combo . valueKey ] ) ;
1652+ newSelection = [ combo . data [ 1 ] , combo . data [ 2 ] ] ;
1653+ combo . deselectItems ( [ combo . data [ 0 ] [ combo . valueKey ] ] ) ;
16321654 Object . assign ( expectedResults , {
1633- newSelection : [ combo . data [ 1 ] , combo . data [ 2 ] ] ,
1634- oldSelection : [ combo . data [ 0 ] , combo . data [ 1 ] , combo . data [ 2 ] ] ,
1655+ newSelection : newSelection . map ( e => e [ combo . valueKey ] ) ,
1656+ oldSelection,
16351657 added : [ ] ,
1636- removed : [ combo . data [ 0 ] ]
1658+ displayText : newSelection . map ( e => e [ combo . displayKey ] ) . join ( ', ' ) ,
1659+ removed : [ combo . data [ 0 ] [ combo . valueKey ] ]
16371660 } ) ;
1661+ oldSelection = [ ...newSelection ] . map ( e => e [ combo . valueKey ] ) ;
1662+ newSelection = [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ;
16381663 expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
16391664 Object . assign ( expectedResults , {
1640- newSelection : [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ,
1641- oldSelection : [ combo . data [ 1 ] , combo . data [ 2 ] ] ,
1642- added : [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] ,
1643- removed : [ combo . data [ 1 ] , combo . data [ 2 ] ]
1665+ newSelection : newSelection . map ( e => e [ combo . valueKey ] ) ,
1666+ oldSelection,
1667+ added : newSelection . map ( e => e [ combo . valueKey ] ) ,
1668+ displayText : newSelection . map ( e => e [ combo . displayKey ] ) . join ( ', ' ) ,
1669+ removed : oldSelection
16441670 } ) ;
1645- combo . selectItems ( [ combo . data [ 4 ] , combo . data [ 5 ] , combo . data [ 6 ] ] , true ) ;
1671+ combo . selectItems ( newSelection . map ( e => e [ combo . valueKey ] ) , true ) ;
16461672 expect ( selectionSpy ) . toHaveBeenCalledWith ( expectedResults ) ;
16471673 } ) ;
16481674 } ) ;
@@ -3511,7 +3537,12 @@ class IgxComboScrollTestComponent {
35113537`
35123538} )
35133539class IgxComboSampleComponent {
3514-
3540+ /**
3541+ * TODO
3542+ * Test that use this component should properly call `selectItems` method
3543+ * IF a `valueKey` is defined, calls should be w/ the items' valueKey property value
3544+ * IF no `valueKey` is defined, calls should be w/ object references to the items
3545+ */
35153546 @ViewChild ( 'combo' , { read : IgxComboComponent , static : true } )
35163547 public combo : IgxComboComponent ;
35173548
0 commit comments