Просмотр исходного кода

Handle a 404 from Recurly if account doesn't exist

James Allen 9 лет назад
Родитель
Сommit
08699d7aa2

+ 5 - 1
services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee

@@ -475,9 +475,13 @@ module.exports = RecurlyWrapper =
 			url: "accounts/#{account_id}/subscriptions"
 			qs:
 				state: "active"
+			expect404: true
 		}, (error, response, body) ->
 			return callback(error) if error?
-			RecurlyWrapper._parseSubscriptionsXml body, callback
+			if response.statusCode == 404
+				return callback null, []
+			else
+				RecurlyWrapper._parseSubscriptionsXml body, callback
 
 	_parseSubscriptionsXml: (xml, callback) ->
 		RecurlyWrapper._parseXmlAndGetAttribute xml, "subscriptions", callback

+ 32 - 0
services/web/test/UnitTests/coffee/Subscription/RecurlyWrapperTests.coffee

@@ -1030,3 +1030,35 @@ describe "RecurlyWrapper", ->
 					@call (err, result) =>
 						expect(err).to.be.instanceof Error
 						done()
+
+	describe "listAccountActiveSubscriptions", ->
+		beforeEach ->
+			@user_id = "mock-user-id"
+			@callback = sinon.stub()
+			@RecurlyWrapper.apiRequest = sinon.stub().yields(null, @response = {"mock": "response"}, @body = "<mock body/>")
+			@RecurlyWrapper._parseSubscriptionsXml = sinon.stub().yields(null, @subscriptions = ["mock", "subscriptions"])
+			
+		describe "with an account", ->
+			beforeEach ->
+				@RecurlyWrapper.listAccountActiveSubscriptions @user_id, @callback
+			
+			it "should send a request to Recurly", ->
+				@RecurlyWrapper.apiRequest
+					.calledWith({
+						url: "accounts/#{@user_id}/subscriptions"
+						qs:
+							state: "active"
+						expect404: true
+					})
+					.should.equal true
+
+			it "should return the subscriptions", ->
+				@callback.calledWith(null, @subscriptions).should.equal true
+			
+		describe "without an account", ->
+			beforeEach ->
+				@response.statusCode = 404
+				@RecurlyWrapper.listAccountActiveSubscriptions @user_id, @callback
+
+			it "should return an empty array of subscriptions", ->
+				@callback.calledWith(null, []).should.equal true