mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
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:
@@ -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?
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user