diff options
| author | Rob Spies | 2010-06-22 17:09:55 -0700 | 
|---|---|---|
| committer | Rob Spies | 2010-06-22 17:09:55 -0700 | 
| commit | 1500e91defa4020bfe9608749b25e585cd1d8e3d (patch) | |
| tree | 8c2872252b62567dc4eb00f7d7547661d5674c55 /test/ResourceSpec.js | |
| parent | eaa397c76b7d28343cde9f3a0338b9b0e79197c8 (diff) | |
| parent | b129a1094e6b42ed82c3ccecc2f40daaa0a6cb6a (diff) | |
| download | angular.js-1500e91defa4020bfe9608749b25e585cd1d8e3d.tar.bz2 | |
Merge http://github.com/angular/angular.js into angular
Conflicts:
	.gitignore
Diffstat (limited to 'test/ResourceSpec.js')
| -rw-r--r-- | test/ResourceSpec.js | 159 | 
1 files changed, 159 insertions, 0 deletions
| diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js new file mode 100644 index 00000000..d11c3e08 --- /dev/null +++ b/test/ResourceSpec.js @@ -0,0 +1,159 @@ +describe("resource", function() { +  var xhr, resource, CreditCard, callback; + +  beforeEach(function(){ +    var browser = new MockBrowser(); +    xhr = browser.xhr; +    resource = new ResourceFactory(xhr); +    CreditCard = resource.route('/CreditCard/:id:verb', {id:'@id.key'}, { +      charge:{ +        method:'POST', +        params:{verb:'!charge'} +      } +    }); +    callback = jasmine.createSpy(); +  }); + +  it("should build resource", function(){ +    expect(typeof CreditCard).toBe('function'); +    expect(typeof CreditCard.get).toBe('function'); +    expect(typeof CreditCard.save).toBe('function'); +    expect(typeof CreditCard.remove).toBe('function'); +    expect(typeof CreditCard['delete']).toBe('function'); +    expect(typeof CreditCard.query).toBe('function'); +  }); + +  it('should default to empty parameters', function(){ +    xhr.expectGET('URL').respond({}); +    resource.route('URL').query(); +  }); + +  it("should build resource with default param", function(){ +    xhr.expectGET('/Order/123/Line/456.visa?minimum=0.05').respond({id:'abc'}); +    xhr.expectGET('/Order/123/Line/456.visa?minimum=0.05').respond({id:'ddd'}); +    var LineItem = resource.route('/Order/:orderId/Line/:id:verb', {orderId: '123', id: '@id.key', verb:'.visa', minimum:0.05}); +    var item = LineItem.get({id:456}); +    xhr.flush(); +    nakedExpect(item).toEqual({id:'abc'}); + +    item = LineItem.get({id:456}); +    xhr.flush(); +    nakedExpect(item).toEqual({id:'abc'}); + +  }); + +  it("should create resource", function(){ +    xhr.expectPOST('/CreditCard', {name:'misko'}).respond({id:123, name:'misko'}); + +    var cc = CreditCard.save({name:'misko'}, callback); +    nakedExpect(cc).toEqual({name:'misko'}); +    expect(callback).wasNotCalled(); +    xhr.flush(); +    nakedExpect(cc).toEqual({id:123, name:'misko'}); +    expect(callback).wasCalledWith(cc); +  }); + +  it("should read resource", function(){ +    xhr.expectGET("/CreditCard/123").respond({id:123, number:'9876'}); +    var cc = CreditCard.get({id:123}, callback); +    expect(cc instanceof CreditCard).toBeTruthy(); +    nakedExpect(cc).toEqual({}); +    expect(callback).wasNotCalled(); +    xhr.flush(); +    nakedExpect(cc).toEqual({id:123, number:'9876'}); +    expect(callback).wasCalledWith(cc); +  }); + +  it("should update resource", function(){ +    xhr.expectPOST('/CreditCard/123', {id:{key:123}, name:'misko'}).respond({id:{key:123}, name:'rama'}); + +    var cc = CreditCard.save({id:{key:123}, name:'misko'}, callback); +    nakedExpect(cc).toEqual({id:{key:123}, name:'misko'}); +    expect(callback).wasNotCalled(); +    xhr.flush(); +  }); + +  it("should query resource", function(){ +    xhr.expectGET("/CreditCard?key=value").respond([{id:1}, {id:2}]); + +    var ccs = CreditCard.query({key:'value'}, callback); +    expect(ccs).toEqual([]); +    expect(callback).wasNotCalled(); +    xhr.flush(); +    nakedExpect(ccs).toEqual([{id:1}, {id:2}]); +    expect(callback).wasCalledWith(ccs); +  }); + +  it("should have all arguments optional", function(){ +    xhr.expectGET('/CreditCard').respond([{id:1}]); +    var log = ''; +    var ccs = CreditCard.query(function(){ log += 'cb;'; }); +    xhr.flush(); +    nakedExpect(ccs).toEqual([{id:1}]); +    expect(log).toEqual('cb;'); +  }); + +  it('should delete resource', function(){ +    xhr.expectDELETE("/CreditCard/123").respond({}); + +    CreditCard.remove({id:123}, callback); +    expect(callback).wasNotCalled(); +    xhr.flush(); +    nakedExpect(callback.mostRecentCall.args).toEqual([{}]); +  }); + +  it('should post charge verb', function(){ +    xhr.expectPOST('/CreditCard/123!charge?amount=10', {auth:'abc'}).respond({success:'ok'}); + +    CreditCard.charge({id:123, amount:10},{auth:'abc'}, callback); +  }); + +  it('should create on save', function(){ +    xhr.expectPOST('/CreditCard', {name:'misko'}).respond({id:123}); +    var cc = new CreditCard(); +    expect(cc.$get).not.toBeDefined(); +    expect(cc.$query).not.toBeDefined(); +    expect(cc.$remove).toBeDefined(); +    expect(cc.$save).toBeDefined(); + +    cc.name = 'misko'; +    cc.$save(callback); +    nakedExpect(cc).toEqual({name:'misko'}); +    xhr.flush(); +    nakedExpect(cc).toEqual({id:123}); +    expect(callback).wasCalledWith(cc); +  }); + +  it('should bind default parameters', function(){ +    xhr.expectGET('/CreditCard/123.visa?minimum=0.05').respond({id:123}); +    var Visa = CreditCard.bind({verb:'.visa', minimum:0.05}); +    var visa = Visa.get({id:123}); +    xhr.flush(); +    nakedExpect(visa).toEqual({id:123}); +  }); + +  it('should excersize full stack', function(){ +    var scope = angular.compile('<div></div>'); +    var Person = scope.$resource('/Person/:id'); +    scope.$browser.xhr.expectGET('/Person/123').respond('\n{\nname:\n"misko"\n}\n'); +    var person = Person.get({id:123}); +    scope.$browser.xhr.flush(); +    expect(person.name).toEqual('misko'); +  }); + +  describe('failure mode', function(){ +    it('should report error when non 200', function(){ +      xhr.expectGET('/CreditCard/123').respond(500, "Server Error"); +      var cc = CreditCard.get({id:123}); +      try { +        xhr.flush(); +        fail('expected exception, non thrown'); +      } catch (e) { +        expect(e.status).toEqual(500); +        expect(e.response).toEqual('Server Error'); +        expect(e.message).toEqual('500: Server Error'); +      } +    }); +  }); + +}); | 
