From 2382de946f983fcf00d11102746fafe923b911bc Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Thu, 13 Dec 2012 14:37:35 +1100 Subject: [PATCH] Test OrderCycle service create order cycle, use $window for testability --- .../javascripts/admin/order_cycle.js.erb | 6 +- .../unit/order_cycle_spec.js.coffee | 59 ++++++++++++++++--- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/admin/order_cycle.js.erb b/app/assets/javascripts/admin/order_cycle.js.erb index d37fb01966..13e80ed3e0 100644 --- a/app/assets/javascripts/admin/order_cycle.js.erb +++ b/app/assets/javascripts/admin/order_cycle.js.erb @@ -41,7 +41,7 @@ angular.module('order_cycle', ['ngResource']). config(function($httpProvider) { $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content'); }). - factory('OrderCycle', function($resource) { + factory('OrderCycle', function($resource, $window) { var OrderCycle = $resource('/admin/order_cycles/:order_cycle_id.json', {}, {'index': { method: 'GET', isArray: true}, 'create': { method: 'POST'}, @@ -98,7 +98,7 @@ angular.module('order_cycle', ['ngResource']). var oc = new OrderCycle({order_cycle: this.order_cycle}); oc.$create(function(data) { if(data['success']) { - window.location = '/admin/order_cycles'; + $window.location = '/admin/order_cycles'; } else { console.log('fail'); } @@ -111,7 +111,7 @@ angular.module('order_cycle', ['ngResource']). var oc = new OrderCycle({order_cycle: this.order_cycle}); oc.$update({order_cycle_id: this.order_cycle.id}, function(data) { if(data['success']) { - window.location = '/admin/order_cycles'; + $window.location = '/admin/order_cycles'; } else { console.log('fail'); } diff --git a/spec/javascripts/unit/order_cycle_spec.js.coffee b/spec/javascripts/unit/order_cycle_spec.js.coffee index 31b748c7c3..74b4f92be6 100644 --- a/spec/javascripts/unit/order_cycle_spec.js.coffee +++ b/spec/javascripts/unit/order_cycle_spec.js.coffee @@ -83,13 +83,19 @@ describe 'OrderCycle services', -> describe 'OrderCycle service', -> OrderCycle = null $httpBackend = null + $window = null beforeEach -> - module('order_cycle') + $window = {navigator: {userAgent: 'foo'}} + + module 'order_cycle', ($provide)-> + $provide.value('$window', $window) + null + inject ($injector, _$httpBackend_)-> OrderCycle = $injector.get('OrderCycle') $httpBackend = _$httpBackend_ - $httpBackend.expectGET('/admin/order_cycles/123.json').respond + $httpBackend.whenGET('/admin/order_cycles/123.json').respond id: 123 name: 'Test Order Cycle' coordinator_id: 456 @@ -97,13 +103,6 @@ describe 'OrderCycle services', -> {sender_id: 1, receiver_id: 456} {sender_id: 456, receiver_id: 2} ] - # $httpBackend.expectGET('/admin/order_cycles/987.json').respond - # id: 987 - # name: 'Erroring order cycle' - # coordinator_id: 456 - # exchanges: [ - # {sender_id: 234, receiver_id: 123} - # ] it 'initialises order cycle', -> expect(OrderCycle.order_cycle).toEqual @@ -181,5 +180,47 @@ describe 'OrderCycle services', -> it 'removes original exchanges array', -> expect(OrderCycle.order_cycle.exchanges).toEqual(undefined) + describe 'creating an order cycle', -> + it 'redirects to the order cycles page on success', -> + OrderCycle.order_cycle = + incoming_exchanges: [ + {enterprise_id: "2", active: true} + {enterprise_id: "7", active: true} + {enterprise_id: "9", active: false} + ] + outgoing_exchanges: [] + name: "name" + orders_open_at: "2012-12-14 07:30:00" + orders_close_at: "2012-12-22 04:15:00" + coordinator_id: "7" + + $httpBackend.expectPOST('/admin/order_cycles.json', { + order_cycle: + incoming_exchanges: [ + {enterprise_id:"2",active:true} + {enterprise_id:"7",active:true} + ] + outgoing_exchanges:[] + name:"name" + orders_open_at:"2012-12-14 07:30:00" + orders_close_at:"2012-12-22 04:15:00" + coordinator_id:"7" + }).respond {success: true} + + OrderCycle.create() + $httpBackend.flush() + expect($window.location).toEqual('/admin/order_cycles') + + it 'does not redirect on error', -> + $httpBackend.expectPOST('/admin/order_cycles.json', { + order_cycle: + incoming_exchanges: [] + outgoing_exchanges:[] + }).respond {success: false} + + OrderCycle.create() + $httpBackend.flush() + expect($window.location).toEqual(undefined) + describe 'OrderCycle directives', ->