diff --git a/app/assets/javascripts/darkswarm/services/stripe_elements.js.coffee b/app/assets/javascripts/darkswarm/services/stripe_elements.js.coffee index acd220f092..6ec274cfec 100644 --- a/app/assets/javascripts/darkswarm/services/stripe_elements.js.coffee +++ b/app/assets/javascripts/darkswarm/services/stripe_elements.js.coffee @@ -15,6 +15,7 @@ Darkswarm.factory 'StripeElements', ($rootScope, Loading, RailsFlashLoader) -> if(response.error) Loading.clear() RailsFlashLoader.loadFlash({error: t("error") + ": #{response.error.message}"}) + @triggerAngularDigest() else secrets.token = response.token.id secrets.cc_type = @mapCC(response.token.card.brand) @@ -32,12 +33,17 @@ Darkswarm.factory 'StripeElements', ($rootScope, Loading, RailsFlashLoader) -> if(response.error) Loading.clear() RailsFlashLoader.loadFlash({error: t("error") + ": #{response.error.message}"}) + @triggerAngularDigest() else secrets.token = response.paymentMethod.id secrets.cc_type = response.paymentMethod.card.brand secrets.card = response.paymentMethod.card submit() + triggerAngularDigest: -> + # $evalAsync is improved way of triggering a digest without calling $apply + $rootScope.$evalAsync() + # Maps the brand returned by Stripe to that required by activemerchant mapCC: (ccType) -> switch ccType diff --git a/spec/javascripts/unit/darkswarm/services/stripe_elements_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/stripe_elements_spec.js.coffee index 0252298f82..7fd1d471dd 100644 --- a/spec/javascripts/unit/darkswarm/services/stripe_elements_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/stripe_elements_spec.js.coffee @@ -46,11 +46,10 @@ describe 'StripeElements Service', -> it "doesn't submit the form, shows an error message instead", inject (Loading, RailsFlashLoader) -> spyOn(Loading, "clear") spyOn(RailsFlashLoader, "loadFlash") - StripeElements.requestToken(secrets, submit) - $rootScope.$digest() # required for #then to by called - expect(submit).not.toHaveBeenCalled() - expect(Loading.clear).toHaveBeenCalled() - expect(RailsFlashLoader.loadFlash).toHaveBeenCalledWith({error: "Error: There was a problem"}) + StripeElements.requestToken(secrets, submit).then (data) -> + expect(submit).not.toHaveBeenCalled() + expect(Loading.clear).toHaveBeenCalled() + expect(RailsFlashLoader.loadFlash).toHaveBeenCalledWith({error: "Error: There was a problem"}) describe 'mapCC', -> it "maps the brand returned by Stripe to that required by activemerchant", ->