aboutsummaryrefslogtreecommitdiffstats
path: root/test/ResourceSpec.js
diff options
context:
space:
mode:
authorMisko Hevery2010-03-15 14:36:50 -0700
committerMisko Hevery2010-03-15 14:36:50 -0700
commitcc71b745c3c821f5e012a363ae3267252a81fddb (patch)
treeb86a76a131aa222b8bdf032480dc2ef0dca51a97 /test/ResourceSpec.js
parentbf838aab5d65a1019a4867b496e971c488589512 (diff)
downloadangular.js-cc71b745c3c821f5e012a363ae3267252a81fddb.tar.bz2
added resources; removed compiled code
Diffstat (limited to 'test/ResourceSpec.js')
-rw-r--r--test/ResourceSpec.js159
1 files changed, 159 insertions, 0 deletions
diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js
new file mode 100644
index 00000000..562d6500
--- /dev/null
+++ b/test/ResourceSpec.js
@@ -0,0 +1,159 @@
+function MockXHR(){
+ this.expectations = {
+ 'GET': {},
+ 'POST': {},
+ 'DELETE': {}
+ };
+ this.queue = [];
+}
+MockXHR.prototype = {
+ method: function(verb, url, data, callback) {
+ if (verb == 'POST')
+ url += '|' + angular.toJson(data);
+ var response = this.expectations[verb][url];
+ if (!response)
+ throw "No expectation for " + verb + " on '" + url + "'.";
+ this.queue.push(function(){
+ callback(response);
+ });
+ },
+
+ expectGET: function(url) {
+ var self = this;
+ return {
+ respond: function(response){
+ self.expectations.GET[url] = response;
+ }
+ };
+ },
+
+ expectDELETE: function(url) {
+ var self = this;
+ return {
+ respond: function(response){
+ self.expectations.DELETE[url] = response;
+ }
+ };
+ },
+
+ expectPOST: function(url) {
+ var self = this;
+ return {
+ data: function(data){
+ return {
+ respond: function(response){
+ self.expectations.POST[url + '|' + angular.toJson(data)] = response;
+ }
+ };
+ }
+ };
+ },
+
+ flush: function(){
+ while(this.queue.length) {
+ this.queue.shift()();
+ }
+ }
+};
+
+describe("resource", function() {
+ var xhr, resource, CreditCard, callback;
+
+ beforeEach(function(){
+ xhr = new MockXHR();
+ 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 create resource", function(){
+ xhr.expectPOST('/CreditCard').data({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').data({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();
+ nakedExpect(cc).toEqual({id:{key:123}, name:'rama'});
+ expect(callback).wasCalledWith(cc);
+ });
+
+ 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 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').data({auth:'abc'}).respond({success:'ok'});
+
+ CreditCard.charge({id:123, amount:10},{auth:'abc'}, callback);
+ });
+
+ it('should create on save', function(){
+ xhr.expectPOST('/CreditCard').data({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);
+ });
+
+
+});