@@ -54,13 +54,54 @@ const categorizedTemplateOutput = [
54
54
'</div>'
55
55
] . join ( '' ) ;
56
56
57
+ const loadingElTemplate = [
58
+ '<ngc-omnibox-suggestion-item>' ,
59
+ '{{suggestion.sample_item_text}}' ,
60
+ '</ngc-omnibox-suggestion-item>' ,
61
+ '<ngc-omnibox-suggestion-loading></ngc-omnibox-suggestion-loading>'
62
+ ] . join ( '' ) ;
63
+
64
+ const loadingElTemplateOutput = [
65
+ '<ngc-omnibox-suggestion-item ng-repeat="suggestion in omnibox.suggestions" ' ,
66
+ 'suggestion="suggestion" ' ,
67
+ 'ng-attr-aria-selected="{{suggestionItem.isHighlighted() || undefined}}" ' ,
68
+ 'ng-attr-aria-readonly="{{suggestionItem.isSelectable() === false || undefined}}" ' ,
69
+ 'ng-mouseenter="suggestionItem.handleMouseEnter()" ' ,
70
+ 'ng-mouseleave="suggestionItem.handleMouseLeave()" ng-click="suggestionItem.handleClick()">' ,
71
+ '{{suggestion.sample_item_text}}' ,
72
+ '</ngc-omnibox-suggestion-item>' ,
73
+ '<ngc-omnibox-suggestion-loading role="progressbar" ng-if="omnibox.shouldShowLoadingElement">' ,
74
+ '</ngc-omnibox-suggestion-loading>'
75
+ ] . join ( '' ) ;
76
+
77
+ const noResultsElTemplate = [
78
+ '<ngc-omnibox-suggestion-item>' ,
79
+ '{{suggestion.sample_item_text}}' ,
80
+ '</ngc-omnibox-suggestion-item>' ,
81
+ '<ngc-omnibox-suggestion-empty></ngc-omnibox-suggestion-empty>'
82
+ ] . join ( '' ) ;
83
+
84
+ const noResultsElTemplateOutput = [
85
+ '<ngc-omnibox-suggestion-item ng-repeat="suggestion in omnibox.suggestions" ' ,
86
+ 'suggestion="suggestion" ' ,
87
+ 'ng-attr-aria-selected="{{suggestionItem.isHighlighted() || undefined}}" ' ,
88
+ 'ng-attr-aria-readonly="{{suggestionItem.isSelectable() === false || undefined}}" ' ,
89
+ 'ng-mouseenter="suggestionItem.handleMouseEnter()" ' ,
90
+ 'ng-mouseleave="suggestionItem.handleMouseLeave()" ng-click="suggestionItem.handleClick()">' ,
91
+ '{{suggestion.sample_item_text}}' ,
92
+ '</ngc-omnibox-suggestion-item>' ,
93
+ // vv I think this is a bug in jsdom
94
+ '<ngc-omnibox-suggestion-empty ng-if="!omnibox.hasSuggestions && !omnibox.isLoading">' ,
95
+ '</ngc-omnibox-suggestion-empty>'
96
+ ] . join ( '' ) ;
97
+
57
98
/* eslint-enable indent */
58
99
59
100
describe ( 'ngcOmnibox.angularComponent.ngcModifySuggestionsTemplateFactory' , ( ) => {
60
101
const templateCache = { put : ( ) => { } } ;
61
102
let ngcModifySuggestionsTemplate ;
62
103
63
- it ( 'should modify an un-categorized element ' , ( ) => {
104
+ it ( 'should modify an un-categorized subcomponent ' , ( ) => {
64
105
const elementTemplate =
65
106
`<ngc-omnibox-suggestions>${ unCategorizedTemplate } </ngc-omnibox-suggestions>` ;
66
107
const document = jsdom . jsdom ( elementTemplate ) . defaultView . document ;
@@ -70,7 +111,7 @@ describe('ngcOmnibox.angularComponent.ngcModifySuggestionsTemplateFactory', () =
70
111
expect ( ngcModifySuggestionsTemplate ( element ) ) . toBe ( unCategorizedTemplateOutput ) ;
71
112
} ) ;
72
113
73
- it ( 'should modify a categorized element ' , ( ) => {
114
+ it ( 'should modify a categorized subcomponent ' , ( ) => {
74
115
const elementTemplate =
75
116
`<ngc-omnibox-suggestions>${ categorizedTemplate } </ngc-omnibox-suggestions>` ;
76
117
const document = jsdom . jsdom ( elementTemplate ) . defaultView . document ;
@@ -79,4 +120,39 @@ describe('ngcOmnibox.angularComponent.ngcModifySuggestionsTemplateFactory', () =
79
120
ngcModifySuggestionsTemplate = ngcModifySuggestionsTemplateFactory ( [ document ] , templateCache ) ;
80
121
expect ( ngcModifySuggestionsTemplate ( element , 'category-tmpl' ) ) . toBe ( categorizedTemplateOutput ) ;
81
122
} ) ;
123
+
124
+ it ( 'should modify a loading subcomponent' , ( ) => {
125
+ const elementTemplate =
126
+ `<ngc-omnibox-suggestions>${ loadingElTemplate } </ngc-omnibox-suggestions>` ;
127
+ const document = jsdom . jsdom ( elementTemplate ) . defaultView . document ;
128
+ const element = document . querySelector ( 'ngc-omnibox-suggestions' ) ;
129
+
130
+ ngcModifySuggestionsTemplate = ngcModifySuggestionsTemplateFactory ( [ document ] , templateCache ) ;
131
+ expect ( ngcModifySuggestionsTemplate ( element ) ) . toBe ( loadingElTemplateOutput ) ;
132
+ } ) ;
133
+
134
+ it ( 'should modify a no-results subcomponent' , ( ) => {
135
+ const elementTemplate =
136
+ `<ngc-omnibox-suggestions>${ noResultsElTemplate } </ngc-omnibox-suggestions>` ;
137
+ const document = jsdom . jsdom ( elementTemplate ) . defaultView . document ;
138
+ const element = document . querySelector ( 'ngc-omnibox-suggestions' ) ;
139
+
140
+ ngcModifySuggestionsTemplate = ngcModifySuggestionsTemplateFactory ( [ document ] , templateCache ) ;
141
+ expect ( ngcModifySuggestionsTemplate ( element ) ) . toBe ( noResultsElTemplateOutput ) ;
142
+ } ) ;
143
+
144
+ it ( 'should only allow one instance of a subcomponent' , ( ) => {
145
+ const elementTemplate = `
146
+ <ngc-omnibox-suggestions>
147
+ <ngc-omnibox-suggestion-item></ngc-omnibox-suggestion-item>
148
+ <ngc-omnibox-suggestion-item></ngc-omnibox-suggestion-item>
149
+ </ngc-omnibox-suggestions>
150
+ ` ;
151
+ const document = jsdom . jsdom ( elementTemplate ) . defaultView . document ;
152
+ const element = document . querySelector ( 'ngc-omnibox-suggestions' ) ;
153
+
154
+ ngcModifySuggestionsTemplate = ngcModifySuggestionsTemplateFactory ( [ document ] , templateCache ) ;
155
+ expect ( ( ) => ngcModifySuggestionsTemplate ( element ) )
156
+ . toThrowError ( 'Cannot include more than one instance of \'ngc-omnibox-suggestion-item\'' ) ;
157
+ } ) ;
82
158
} ) ;
0 commit comments