Skip to content

Commit 948d2ef

Browse files
committed
Make TnOption.create() invoke its callback
The response coming back from this endpoint has a different shape than the `TnOption.get()` - it is wrapped in a `<TnOptionOrderResponse>` element. That element doesn't have any direct `TnOptionGroups` children, and so this method was throwing when trying to iterate over an undefined attribute (in `item.tnOptionGroups.forEach(...)`). Adjusting the tests to use an XML response that matches the [API documentation](https://dev.bandwidth.com/numbers/apiReference.html) demonstrates the failure well: the tests time out, because the thrown error prevents the callback from firing. The [package documentation](https://github.com/Bandwidth/node-numbers#add-a-portoutpasscode) suggests that the shape of this response should match `TnOption.get()`, which we can achieve by just unwrapping the contents from that outermost `<TnOptionOrderResponse>` element.
1 parent c7c908e commit 948d2ef

File tree

3 files changed

+5
-3
lines changed

3 files changed

+5
-3
lines changed

lib/tnOption.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ TnOption.create = function(client, order, callback){
6666
if(err){
6767
return callback(err);
6868
}
69+
item = item.tnOptionOrder;
6970
if (item.tnOptionGroups && item.tnOptionGroups.tnOptionGroup) {
7071
item.tnOptionGroups = item.tnOptionGroups.tnOptionGroup;
7172
if (!Array.isArray(item.tnOptionGroups)) {

test/tnOption.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ describe("TnOption", function(){
117117
]
118118
}
119119
}
120-
helper.nock().post("/accounts/FakeAccountId/tnoptions", helper.buildXml({tnOptionOrder: receivedData})).reply(201, helper.xml.tnOption, {"Location": "/accounts/FakeAccountId/tnoptions/1"});
120+
helper.nock().post("/accounts/FakeAccountId/tnoptions", helper.buildXml({tnOptionOrder: receivedData})).reply(201, helper.xml.tnOptionOrderResponse, {"Location": "/accounts/FakeAccountId/tnoptions/1"});
121121
TnOption.create(helper.createClient(), userInput, function(err, item){
122122
if(err){
123123
return done(err);
@@ -152,7 +152,7 @@ describe("TnOption", function(){
152152
]
153153
}
154154
}
155-
helper.nock().post("/accounts/FakeAccountId/tnoptions", helper.buildXml({tnOptionOrder: receivedData})).reply(201, helper.xml.tnOption, {"Location": "/accounts/FakeAccountId/tnoptions/1"});
155+
helper.nock().post("/accounts/FakeAccountId/tnoptions", helper.buildXml({tnOptionOrder: receivedData})).reply(201, helper.xml.tnOptionOrderResponse, {"Location": "/accounts/FakeAccountId/tnoptions/1"});
156156
TnOption.create(helper.createClient(), userInput, function(err, item){
157157
if(err){
158158
return done(err);
@@ -189,7 +189,7 @@ describe("TnOption", function(){
189189
]
190190
}
191191
}
192-
helper.nock().post("/accounts/FakeAccountId/tnoptions", helper.buildXml({tnOptionOrder: receivedData})).reply(201, helper.xml.tnOption, {"Location": "/accounts/FakeAccountId/tnoptions/1"});
192+
helper.nock().post("/accounts/FakeAccountId/tnoptions", helper.buildXml({tnOptionOrder: receivedData})).reply(201, helper.xml.tnOptionOrderResponse, {"Location": "/accounts/FakeAccountId/tnoptions/1"});
193193
TnOption.create(helper.createClient(), userInput, function(err, item){
194194
if(err){
195195
return done(err);

test/xml.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"peerSmsSettings": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><SipPeerSmsFeatureResponse><SipPeerSmsFeature><SipPeerSmsFeatureSettings><TollFree>true</TollFree><ShortCode>true</ShortCode><A2pLongCode>DefaultOff</A2pLongCode><A2pMessageClass>SomeMessageClass</A2pMessageClass><A2pCampaignId>SomeCampaignId</A2pCampaignId><Protocol>SMPP</Protocol><Zone1>true</Zone1><Zone2>true</Zone2><Zone3>true</Zone3><Zone4>true</Zone4><Zone5>true</Zone5></SipPeerSmsFeatureSettings><SmppHosts><SmppHost><HostName>54.10.88.146</HostName><HostId>18</HostId><Priority>0</Priority><ConnectionType>RECEIVER_ONLY</ConnectionType></SmppHost></SmppHosts></SipPeerSmsFeature></SipPeerSmsFeatureResponse>",
44
"tnOptions": "<TnOptionOrders><TotalCount>2</TotalCount><TnOptionOrderSummary><accountId>accountId</accountId><CountOfTNs>1</CountOfTNs><userId>userId</userId><lastModifiedDate>lastModifiedDate</lastModifiedDate><OrderDate>orderDate</OrderDate><OrderType>orderType</OrderType><OrderStatus>FAILED</OrderStatus><OrderId>orderId</OrderId></TnOptionOrderSummary><TnOptionOrderSummary><accountId>14</accountId><CountOfTNs>3</CountOfTNs><userId>userId</userId><lastModifiedDate>lastModifiedDate</lastModifiedDate><OrderDate>orderDate</OrderDate><OrderType>tn_option</OrderType><OrderStatus>COMPLETE</OrderStatus><OrderId>orderId2</OrderId></TnOptionOrderSummary></TnOptionOrders>",
55
"tnOption": "<TnOptionOrder><OrderCreateDate>createdDate</OrderCreateDate><AccountId>14</AccountId><CreatedByUser>user</CreatedByUser><OrderId>orderId</OrderId><LastModifiedDate>dateHere</LastModifiedDate><ProcessingStatus>FAILED</ProcessingStatus><TnOptionGroups><TnOptionGroup><NumberFormat>10digit</NumberFormat><RPIDFormat>10digit</RPIDFormat><RewriteUser>testUser1</RewriteUser><CallForward>6042661720</CallForward><CallingNameDisplay>on</CallingNameDisplay><Protected>true</Protected><Sms>on</Sms><FinalDestinationURI>sip:[email protected]:5060</FinalDestinationURI><TelephoneNumbers><TelephoneNumber>2018551020</TelephoneNumber></TelephoneNumbers></TnOptionGroup><TnOptionGroup><CallingNameDisplay>off</CallingNameDisplay><Protected>false</Protected><Sms>off</Sms><TelephoneNumbers><TelephoneNumber>2018551025</TelephoneNumber></TelephoneNumbers></TnOptionGroup></TnOptionGroups></TnOptionOrder>",
6+
"tnOptionOrderResponse": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><TnOptionOrderResponse><TnOptionOrder><OrderCreateDate>createdDate</OrderCreateDate><AccountId>14</AccountId><CreatedByUser>user</CreatedByUser><OrderId>orderId</OrderId><LastModifiedDate>dateHere</LastModifiedDate><ProcessingStatus>FAILED</ProcessingStatus><TnOptionGroups><TnOptionGroup><NumberFormat>10digit</NumberFormat><RPIDFormat>10digit</RPIDFormat><RewriteUser>testUser1</RewriteUser><CallForward>6042661720</CallForward><CallingNameDisplay>on</CallingNameDisplay><Protected>true</Protected><Sms>on</Sms><FinalDestinationURI>sip:[email protected]:5060</FinalDestinationURI><TelephoneNumbers><TelephoneNumber>2018551020</TelephoneNumber></TelephoneNumbers></TnOptionGroup><TnOptionGroup><CallingNameDisplay>off</CallingNameDisplay><Protected>false</Protected><Sms>off</Sms><TelephoneNumbers><TelephoneNumber>2018551025</TelephoneNumber></TelephoneNumbers></TnOptionGroup></TnOptionGroups></TnOptionOrder></TnOptionOrderResponse>",
67
"geocode": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><GeocodeRequestResponse><GeocodedAddress><AddressLine1>1 Street Name</AddressLine1><HouseNumber>1</HouseNumber><StreetName>Street</StreetName><StreetSuffix>Name</StreetSuffix><City>City</City><StateCode>State</StateCode><Zip>ZipCode</Zip><PlusFour>1234</PlusFour><Country>US</Country></GeocodedAddress></GeocodeRequestResponse>",
78
"peerApplications": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ApplicationSettingsResponse><ApplicationSettings><HttpMessagingV2AppId>100</HttpMessagingV2AppId></ApplicationSettings></ApplicationSettingsResponse>",
89
"application": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ApplicationProvisioningResponse><Application><ApplicationId>1</ApplicationId><ServiceType>Messaging-V2</ServiceType><AppName>Test Application</AppName><MsgCallbackUrl>http://a.com</MsgCallbackUrl></Application></ApplicationProvisioningResponse>",

0 commit comments

Comments
 (0)