Fix bug in subscriptions address controller where the country id lookup was not exact and states returned were incorrect. Add unit tests to cover different cases

This commit is contained in:
luisramos0
2018-10-16 17:30:57 +01:00
parent 590091c42a
commit feaf16d878
3 changed files with 54 additions and 7 deletions

View File

@@ -1,11 +1,21 @@
angular.module("admin.subscriptions").controller "AddressController", ($scope, $filter, StatusMessage, availableCountries) ->
$scope.countries = availableCountries
$scope.statesFor = (country_id) ->
return [] unless country_id
$filter('filter')(availableCountries, {id: country_id})[0].states
country = $filter('filter')(availableCountries, {id: country_id}, true)[0]
return [] unless country
country.states
$scope.billStates = $scope.statesFor($scope.subscription.bill_address.country_id)
$scope.shipStates = $scope.statesFor($scope.subscription.ship_address.country_id)
$scope.$watch 'subscription.bill_address.country_id', (newValue, oldValue) ->
$scope.billStates = $scope.statesFor(newValue) if newValue?
$scope.$watch 'subscription.ship_address.country_id', (newValue, oldValue) ->
$scope.shipStates = $scope.statesFor(newValue) if newValue?
$scope.registerNextCallback 'address', ->
$scope.subscription_form.$submitted = true
if $scope.subscription_address_form.$valid
@@ -18,9 +28,3 @@ angular.module("admin.subscriptions").controller "AddressController", ($scope, $
$scope.registerBackCallback 'address', ->
StatusMessage.clear()
$scope.setView('details')
$scope.$watch 'subscription.bill_address.country_id', (newValue, oldValue) ->
$scope.billStates = $scope.statesFor(newValue) if newValue?
$scope.$watch 'subscription.ship_address.country_id', (newValue, oldValue) ->
$scope.shipStates = $scope.statesFor(newValue) if newValue?

View File

@@ -0,0 +1,43 @@
describe "AddressController", ->
scope = null
subscription = { id: 1 }
states_in_spain = [{id: 55, name: "CAT", abbr: "CAT"}]
states_in_portugal = [{id: 55, name: "ACT", abbr: "ACT"}, {id: 5, name: "BFT", abbr: "BFT"}]
availableCountries = [
{id: 9, name: "Australia", states: []},
{id: 119, name: "Spain", states: states_in_spain},
{id: 19, name: "Portugal", states: states_in_portugal}
]
beforeEach ->
module('admin.subscriptions')
inject ($controller, $rootScope) ->
scope = $rootScope
scope.registerNextCallback = () ->
scope.registerBackCallback = () ->
scope.subscription = subscription
subscription.bill_address = {country_id: 1}
subscription.ship_address = {country_id: 2}
$controller 'AddressController', {$scope: scope, availableCountries: availableCountries}
describe "statesFor", ->
it "returns empty array for nil country id", ->
expect(scope.statesFor(null)).toEqual []
it "returns empty array for country id not in availableCountries", ->
expect(scope.statesFor(10)).toEqual []
it "returns empty array for country id in availableCountries but without states", ->
expect(scope.statesFor(9)).toEqual []
it "returns states for country id in availableCountries with states", ->
expect(scope.statesFor(119)).toEqual states_in_spain
it "returns empty array for country id (11) in availableCountries but only as part of other country id (119)", ->
expect(scope.statesFor(11)).toEqual []
it "returns states for country id (19) in availableCountries with states even if other country ids contain the requested id (119)", ->
expect(scope.statesFor(19)).toEqual states_in_portugal