@@ -102,6 +102,87 @@ describe('#parseServerObject', () => {
102102 expect ( parseResult ) . to . contain . warning ( "'Server Object' 'variables' is not an object" ) ;
103103 } ) ;
104104
105+ it ( "warns when a variable in server 'variables' is not defined in the URL and removes it" , ( ) => {
106+ const server = new namespace . elements . Object ( {
107+ url : 'https://{username}.gigantic-server.com/{version}/' ,
108+ variables : {
109+ username : {
110+ default : 'Mario' ,
111+ description : 'API user name' ,
112+ } ,
113+ version : {
114+ default : '1.0' ,
115+ } ,
116+ location : {
117+ default : 'Prague' ,
118+ } ,
119+ } ,
120+ } ) ;
121+
122+ const parseResult = parse ( context ) ( server ) ;
123+ expect ( parseResult . length ) . to . equal ( 2 ) ;
124+ expect ( parseResult ) . to . contain . annotations ;
125+ expect ( parseResult ) . to . contain . warning ( "Server variable 'location' is not present in the URL and will be ignored" ) ;
126+
127+ const resource = parseResult . get ( 0 ) ;
128+ expect ( resource ) . to . be . instanceof ( namespace . elements . Resource ) ;
129+
130+ const { hrefVariables } = resource ;
131+ const firstHrefVariable = hrefVariables . content . content [ 0 ] ;
132+ const secondHrefVariable = hrefVariables . content . content [ 1 ] ;
133+
134+ expect ( hrefVariables ) . to . be . instanceof ( namespace . elements . HrefVariables ) ;
135+ expect ( hrefVariables . length ) . to . equal ( 2 ) ;
136+
137+ expect ( firstHrefVariable ) . to . be . instanceof ( namespace . elements . Member ) ;
138+ expect ( firstHrefVariable . key . toValue ( ) ) . to . equal ( 'username' ) ;
139+ expect ( firstHrefVariable . value . default ) . to . equal ( 'Mario' ) ;
140+ expect ( firstHrefVariable . value . description . toValue ( ) ) . to . equal ( 'API user name' ) ;
141+
142+ expect ( secondHrefVariable ) . to . be . instanceof ( namespace . elements . Member ) ;
143+ expect ( secondHrefVariable . key . toValue ( ) ) . to . equal ( 'version' ) ;
144+ expect ( secondHrefVariable . value . default ) . to . equal ( '1.0' ) ;
145+ } ) ;
146+
147+ it ( "warns when a URL defined variable is missing from 'variables'" , ( ) => {
148+ const server = new namespace . elements . Object ( {
149+ url : 'https://{username}.{server}/{version}/' ,
150+ variables : {
151+ username : {
152+ default : 'Mario' ,
153+ description : 'API user name' ,
154+ } ,
155+ version : {
156+ default : '1.0' ,
157+ } ,
158+ } ,
159+ } ) ;
160+
161+ const parseResult = parse ( context ) ( server ) ;
162+ expect ( parseResult . length ) . to . equal ( 2 ) ;
163+ expect ( parseResult ) . to . contain . annotations ;
164+ expect ( parseResult ) . to . contain . warning ( "URL variable 'server' is missing within the server variables" ) ;
165+
166+ const resource = parseResult . get ( 0 ) ;
167+ expect ( resource ) . to . be . instanceof ( namespace . elements . Resource ) ;
168+
169+ const { hrefVariables } = resource ;
170+ const firstHrefVariable = hrefVariables . content . content [ 0 ] ;
171+ const secondHrefVariable = hrefVariables . content . content [ 1 ] ;
172+
173+ expect ( hrefVariables ) . to . be . instanceof ( namespace . elements . HrefVariables ) ;
174+ expect ( hrefVariables . length ) . to . equal ( 2 ) ;
175+
176+ expect ( firstHrefVariable ) . to . be . instanceof ( namespace . elements . Member ) ;
177+ expect ( firstHrefVariable . key . toValue ( ) ) . to . equal ( 'username' ) ;
178+ expect ( firstHrefVariable . value . default ) . to . equal ( 'Mario' ) ;
179+ expect ( firstHrefVariable . value . description . toValue ( ) ) . to . equal ( 'API user name' ) ;
180+
181+ expect ( secondHrefVariable ) . to . be . instanceof ( namespace . elements . Member ) ;
182+ expect ( secondHrefVariable . key . toValue ( ) ) . to . equal ( 'version' ) ;
183+ expect ( secondHrefVariable . value . default ) . to . equal ( '1.0' ) ;
184+ } ) ;
185+
105186 it ( 'parse server object with variables' , ( ) => {
106187 const server = new namespace . elements . Object ( {
107188 url : 'https://{username}.gigantic-server.com/{version}' ,
0 commit comments