diff options
Diffstat (limited to 'spec/django')
-rw-r--r-- | spec/django/login.js | 67 | ||||
-rw-r--r-- | spec/django/signup.js | 59 |
2 files changed, 126 insertions, 0 deletions
diff --git a/spec/django/login.js b/spec/django/login.js new file mode 100644 index 0000000..eea6062 --- /dev/null +++ b/spec/django/login.js @@ -0,0 +1,67 @@ +describe("Login", function() { + + it("has an identify function", function() { + var srp = new SRP(); + expect(typeof srp.identify).toBe('function'); + }); + + describe("(INTEGRATION)", function (){ + // a valid auth attempt for the user / password given in the spec runner: + var a = 'af141ae6'; + var B = '887005895b1f5528b4e4dfdce914f73e763b96d3c901d2f41d8b8cd26255a75'; + var salt = '5d3055e0acd3ddcfc15'; + var M = 'be6d7db2186d5f6a2c55788479b6eaf75229a7ca0d9e7dc1f886f1970a0e8065' + var M2 = '2547cf26318519090f506ab73a68995a2626b1c948e6f603ef9e1b0b78bf0f7b'; + var A, callback; + + + beforeEach(function() { + this.srp = new SRP(); + A = this.srp.calculateAndSetA(a); + + specHelper.setupFakeXHR.apply(this); + + this.srp.success = sinon.spy(); + }); + + afterEach(function() { + this.xhr.restore(); + }); + + it("works with XML responses", function(){ + this.srp.identify(); + + this.expectRequest('handshake/', 'I=user&A='+A); + this.respondXML("<r s='"+salt+"' B='"+B+"' />"); + this.expectRequest('authenticate/', 'M='+M); + this.respondXML("<M>"+M2+"</M>"); + + expect(this.srp.success).toHaveBeenCalled(); + }); + + it("works with JSON responses", function(){ + this.srp.identify(); + + this.expectRequest('handshake/', 'I=user&A='+A); + this.respondJSON({s: salt, B: B}); + this.expectRequest('authenticate/', 'M='+M); + this.respondJSON({M: M2}); + + expect(this.srp.success).toHaveBeenCalled(); + }); + + it("rejects B = 0", function(){ + this.srp.error_message = sinon.spy(); + this.srp.identify(); + + this.expectRequest('handshake/', 'I=user&A='+A); + this.respondJSON({s: salt, B: 0}); + // aborting if B=0 + expect(this.requests).toEqual([]); + expect(this.srp.error_message).toHaveBeenCalled(); + }); + }); + + +}); + diff --git a/spec/django/signup.js b/spec/django/signup.js new file mode 100644 index 0000000..b38778a --- /dev/null +++ b/spec/django/signup.js @@ -0,0 +1,59 @@ +describe("Signup", function() { + + beforeEach(function() { + this.srp = new SRP(); + specHelper.setupFakeXHR.apply(this); + }); + + afterEach(function() { + this.xhr.restore(); + }); + + it("has a register function", function() { + expect(typeof this.srp.register).toBe('function'); + }); + + it("fetches a salt from /register/salt", function(){ + var callback = sinon.spy(); + this.srp.register_receive_salt = callback; + this.srp.register(); + this.expectRequest('register/salt/', "I=user") + this.respondXML("<salt>5d3055e0acd3ddcfc15</salt>"); + expect(callback.called).toBeTruthy(); + }); + + it("receives the salt from /register/salt", function(){ + var callback = sinon.spy(); + this.srp.remote.register_send_verifier = callback; + this.srp.register(); + this.expectRequest('register/salt/', "I=user") + this.respondXML("<salt>5d3055e0acd3ddcfc15</salt>"); + expect(callback).toHaveBeenCalledWith("adcd57b4a4a05c2e205b0b7b30014d9ff635d8d8db2f502f08e9b9c132800c44", this.srp.registered_user); + }); + + it("identifies after successful registration (INTEGRATION)", function(){ + var callback = sinon.spy(); + this.srp.identify = callback; + this.srp.register(); + this.expectRequest('register/salt/', "I=user") + this.respondXML("<salt>5d3055e0acd3ddcfc15</salt>"); + this.expectRequest('register/user/', "v=adcd57b4a4a05c2e205b0b7b30014d9ff635d8d8db2f502f08e9b9c132800c44"); + this.respondXML("<ok />"); + expect(callback).toHaveBeenCalled(); + }); + + it("identifies after successful registration with JSON (INTEGRATION)", function(){ + var callback = sinon.spy(); + this.srp.identify = callback; + this.srp.register(); + this.expectRequest('register/salt/', "I=user") + this.respondJSON({salt: "5d3055e0acd3ddcfc15"}); + this.expectRequest('register/user/', "v=adcd57b4a4a05c2e205b0b7b30014d9ff635d8d8db2f502f08e9b9c132800c44"); + this.respondJSON({ok: true}); + expect(callback).toHaveBeenCalled(); + }); + + +}); + + |