Moving Customers and CustomerResource services to admin.resource module

This commit is contained in:
Rob Harrington
2016-11-25 09:59:32 +11:00
parent dbbd52cace
commit 268c8dbcdd
5 changed files with 44 additions and 23 deletions

View File

@@ -3,8 +3,8 @@ angular.module("admin.customers").controller "customersCtrl", ($scope, $q, $filt
$scope.availableCountries = availableCountries
$scope.RequestMonitor = RequestMonitor
$scope.submitAll = pendingChanges.submitAll
$scope.add = Customers.add
$scope.customerLimit = 20
$scope.customers = Customers.all
$scope.columns = Columns.columns
$scope.confirmRefresh = (event) ->
@@ -16,7 +16,6 @@ angular.module("admin.customers").controller "customersCtrl", ($scope, $q, $filt
Customers.index({enterprise_id: $scope.shop_id}).then (data) ->
pendingChanges.removeAll()
$scope.customers_form.$setPristine()
$scope.customers = data
$scope.shop_id = shops[0].id if shops.length == 1

View File

@@ -1,4 +1,4 @@
angular.module("admin.customers").factory 'CustomerResource', ($resource) ->
angular.module("admin.resources").factory 'CustomerResource', ($resource) ->
$resource('/admin/customers/:id.json', {}, {
'index':
method: 'GET'

View File

@@ -1,19 +1,24 @@
angular.module("admin.customers").factory "Customers", ($q, InfoDialog, RequestMonitor, CustomerResource, CurrentShop) ->
angular.module("admin.resources").factory "Customers", ($q, InfoDialog, RequestMonitor, CustomerResource, CurrentShop) ->
new class Customers
customers: []
all: []
byID: {}
pristineByID: {}
add: (email) ->
params =
enterprise_id: CurrentShop.shop.id
email: email
CustomerResource.create params, (customer) =>
@customers.unshift customer if customer.id
if customer.id
@all.unshift customer
@byID[customer.id] = customer
@pristineByID[customer.id] = angular.copy(customer)
remove: (customer) ->
params = id: customer.id
CustomerResource.destroy params, =>
i = @customers.indexOf customer
@customers.splice i, 1 unless i < 0
i = @all.indexOf customer
@all.splice i, 1 unless i < 0
, (response) =>
errors = response.data.errors
if errors?
@@ -22,14 +27,19 @@ angular.module("admin.customers").factory "Customers", ($q, InfoDialog, RequestM
InfoDialog.open 'error', "Could not delete customer: #{customer.email}"
index: (params) ->
request = CustomerResource.index(params, (data) => @customers = data)
request = CustomerResource.index(params, (data) => @load(data))
RequestMonitor.load(request.$promise)
request.$promise
load: (customers) ->
for customer in customers
@all.push customer
@byID[customer.id] = customer
@pristineByID[customer.id] = angular.copy(customer)
update: (address, customer, addressType) ->
params =
id: customer.id
customer:
"#{addressType}_attributes": address
CustomerResource.update params

View File

@@ -62,28 +62,17 @@ describe "CustomersCtrl", ->
as = scope.findByCode('b')
expect(as).toDeepEqual []
describe "scope.add", ->
it "creates a new customer", ->
email = "customer@example.org"
newCustomer = {id: 6, email: email}
customers.unshift(newCustomer)
http.expectPOST('/admin/customers.json?email=' + email + '&enterprise_id=3').respond 200, newCustomer
scope.add(email)
http.flush()
expect(scope.customers).toDeepEqual customers
describe "scope.deleteCustomer", ->
beforeEach ->
spyOn(window, 'confirm').and.returnValue(true)
it "deletes a customer", ->
expect(scope.customers.length).toBe 2
expect(scope.customers.length).toBe 1
customer = scope.customers[0]
http.expectDELETE('/admin/customers/' + customer.id + '.json').respond 200
scope.deleteCustomer(customer)
http.flush()
expect(scope.customers.length).toBe 1
expect(scope.customers[0]).not.toDeepEqual customer
expect(scope.customers.length).toBe 0
describe "scope.findTags", ->
tags = [

View File

@@ -0,0 +1,23 @@
describe "Customers", ->
Customers = CurrentShop = customers = $httpBackend = null
beforeEach ->
module 'admin.customers'
jasmine.addMatchers
toDeepEqual: (util, customEqualityTesters) ->
compare: (actual, expected) ->
{ pass: angular.equals(actual, expected) }
inject ($q, _$httpBackend_, _Customers_, _CurrentShop_) ->
Customers = _Customers_
describe "scope.add", ->
it "creates a new customer", inject ($httpBackend, CurrentShop) ->
email = "customer@example.org"
newCustomer = {id: 6, email: email}
CurrentShop.shop = { id: 3 }
$httpBackend.expectPOST('/admin/customers.json?email=' + email + '&enterprise_id=3').respond 200, newCustomer
Customers.add(email)
$httpBackend.flush()
expect(Customers.all).toDeepEqual [newCustomer]