UNPKG

dl

Version:

DreamLab Libs

1,005 lines (942 loc) 103 kB
describe('NsessManager', function () { var NsessManager, Request, Response, OpalLoader, Event, ErrorEvent, OpalResponse, JsonRpcResponse, Loader, OPAL_PROTO = 'http:', OPAL_HOST = 'application.sessions.onetapi.pl'; it(jasmine.getEnv().currentSuite.description + ' require', function () { expect(function () { NsessManager = require('../../lib/nsess/NsessManager.js').NsessManager, Request = require('core').http.Request, Response = require('core').http.Response, OpalLoader = require('../../lib/opal/OpalLoader.js').OpalLoader, Event = require('core').event.Event, ErrorEvent = require('core').event.ErrorEvent, OpalResponse = require('../../lib/opal/OpalResponse.js').OpalResponse, JsonRpcResponse = require('core').jsonrpc.JsonRpcResponse, Loader = require('core').http.Loader; }).not.toThrow(); }); describe(jasmine.getEnv().currentSuite.description, function () { it(jasmine.getEnv().currentSuite.description + ' - default', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = new NsessManager(request, response); spyOn(instance, 'write').andCallFake(function () { this._setCookie(); }); instance.write(); expect(response.getHeader('set-cookie')).toEqual('onet_nsess=test; path=/; httponly'); }); it(jasmine.getEnv().currentSuite.description + ' - lifetime > 0', function () { var request = new Request({ headers: { cookie: 'onet_test=test' } }), response = new Response(), instance = new NsessManager(request, response, { name: 'onet_test', lifetime: 86400, path: '/test', domain: 'example.com', secure: true, httponly: false }), time = new Date(); spyOn(instance, 'write').andCallFake(function () { this._setCookie(); }); instance.write(); expect(response.getHeader('set-cookie')).toMatch(/^onet_test=test; expires=[^;]+; path=\/test; domain=example\.com; secure$/); expect(new Date(response.getHeader('set-cookie').match(/\sexpires=([^;]+)/)[1])).toBeGreaterThan(time); }); it(jasmine.getEnv().currentSuite.description + ' - lifetime < 0', function () { var request = new Request({ headers: { host: 'example.com', cookie: 'onet_nsess=test' } }), response = new Response(), instance = new NsessManager(request, response, { lifetime: -86400 }), time = new Date(); spyOn(instance, 'write').andCallFake(function () { this._sessionId = null; this._setCookie(); }); instance.write(); expect(response.getHeader('set-cookie')).toMatch(/^onet_nsess=; expires=[^;]+; path=\/; domain=example\.com; httponly$/); expect(new Date(response.getHeader('set-cookie').match(/\sexpires=([^;]+)/)[1])).toBeLessThan(time); }); }); it(jasmine.getEnv().currentSuite.description + '.set', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = new NsessManager(request, response), callback = jasmine.createSpy('callback'); spyOn(instance, 'read').andCallFake(function () { process.nextTick((function () { this._opened = true; this._data = {test: 1}; this._execute(null); }).bind(this)); }); expect(instance.get(callback)).toBe(instance); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 1}); expect(instance.read.callCount).toEqual(1); instance.get(callback); expect(callback.callCount).toEqual(2); expect(callback).toHaveBeenCalledWith(null, {test: 1}); expect(instance.read.callCount).toEqual(1); }); }); it(jasmine.getEnv().currentSuite.description + '.set', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = new NsessManager(request, response), callback = jasmine.createSpy('callback'), callback2 = jasmine.createSpy('callback2'); spyOn(OpalLoader.prototype, 'load'); instance.get(callback); expect(instance.set({test: 1})).toBe(instance); instance.get(callback2); waitsFor(function () { return callback2.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 1}); expect(callback2).toHaveBeenCalledWith(null, {test: 1}); expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(function () { instance.read(); }).toThrow(new Error(NsessManager.Exception.OPENED)); instance.write(); waitsFor(function () { return OpalLoader.prototype.load.callCount > 1; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(2); expect(function () { instance.set({test: 2}); }).toThrow(new Error(NsessManager.Exception.CLOSED)); }); }); }); describe(jasmine.getEnv().currentSuite.description + '.read', function () { var event, listener, readEvent, readListener, errorEvent, errorListener, readErrorEvent, readErrorListener, callback; function addEventListeners(instance) { instance.addEventListener(NsessManager.Event.OK, listener); instance.addEventListener(NsessManager.Event.READ_OK, readListener); instance.addEventListener(NsessManager.Event.ERROR, errorListener); instance.addEventListener(NsessManager.Event.READ_ERROR, readErrorListener); return instance; } beforeEach(function () { event = undefined; listener = jasmine.createSpy('listener').andCallFake(function (e) { event = e; }); readEvent = undefined; readListener = jasmine.createSpy('readListener').andCallFake(function (e) { readEvent = e; }); errorEvent = undefined; errorListener = jasmine.createSpy('errorListener').andCallFake(function (e) { errorEvent = e; }); readErrorEvent = undefined; readErrorListener = jasmine.createSpy('readErrorListener').andCallFake(function (e) { readErrorEvent = e; }); callback = jasmine.createSpy('callback'); }); describe(jasmine.getEnv().currentSuite.description + ' - OK', function () { it(jasmine.getEnv().currentSuite.description + ': no sessionId', function () { var request = new Request(), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load'); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).toThrow(new Error(NsessManager.Exception.OPENED)); instance.get(callback); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, null); expect(OpalLoader.prototype.load).not.toHaveBeenCalled(); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toBeNull(); expect(readEvent.data).toBeNull(); expect(response.getHeader('set-cookie')).toBeNull(); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, null); }); }); it(jasmine.getEnv().currentSuite.description + ': JSON_RESPONSE', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', result: { value: { test: 1 } } }) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); instance.get(callback); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 1}); expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toEqual({test: 1}); expect(readEvent.data).toEqual({test: 1}); expect(response.getHeader('set-cookie')).toBeNull(); }); }); it(jasmine.getEnv().currentSuite.description + ': HTTP_RESPONSE', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.HTTP_RESPONSE, new OpalResponse({ body: new Response(new Buffer('HTTP/1.1 200 OK\r\nContent-Type: text/javascript; charset=utf-8\r\n\r\n{"id": "test", "result": {"value": {"test": 2}}}')) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toEqual({test: 2}); expect(readEvent.data).toEqual({test: 2}); expect(response.getHeader('set-cookie')).toBeNull(); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 2}); }); }); it(jasmine.getEnv().currentSuite.description + ': set-cookie', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', result: { key: 'test2', value: { test: 3 } } }) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toEqual({test: 3}); expect(readEvent.data).toEqual({test: 3}); expect(response.getHeader('set-cookie')).toEqual('onet_nsess=test2; path=/; httponly'); expect(response.getHeader('p3p')).toEqual('CP="ALL DSP COR IVD IVA PSD PSA TEL TAI CUS ADM CUR CON SAM OUR IND"'); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 3}); }); }); it(jasmine.getEnv().currentSuite.description + ': modified', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', result: { value: { test: 4 } } }) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); expect(function () { instance.set({test: 5}); }).not.toThrow(); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toEqual({test: 4}); expect(readEvent.data).toEqual({test: 4}); expect(response.getHeader('set-cookie')).toBeNull(); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 5}); }); }); it(jasmine.getEnv().currentSuite.description + ': NO_DATA_FOUND', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)), time = new Date(); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', error: { code: NsessManager.Error.NO_DATA_FOUND, message: 'No data found' } }) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); instance.get(callback); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, null); expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toBeNull() expect(readEvent.data).toBeNull() expect(response.getHeader('set-cookie')).toMatch(/^onet_nsess=; expires=[^;]+; path=\/; httponly$/); expect(new Date(response.getHeader('set-cookie').match(/\sexpires=([^;]+)/)[1])).toBeLessThan(time); expect(response.getHeader('p3p')).toEqual('CP="ALL DSP COR IVD IVA PSD PSA TEL TAI CUS ADM CUR CON SAM OUR IND"'); }); }); }); describe(jasmine.getEnv().currentSuite.description + ' - ERROR', function () { it(jasmine.getEnv().currentSuite.description + ': Loader', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new ErrorEvent(Loader.Event.ERROR, {test: 1}, -1, 'Test')); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); instance.get(callback); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(callback).toHaveBeenCalledWith(readErrorEvent, null); expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener).not.toHaveBeenCalled(); expect(readListener).not.toHaveBeenCalled(); expect(errorListener.callCount).toEqual(1); expect(readErrorListener.callCount).toEqual(1); [errorEvent, readErrorEvent].forEach(function (e) { expect(e.code).toEqual(-1); expect(e.message).toEqual('Test'); expect(e.data).toEqual({test: 1}); }); expect(response.getHeader('set-cookie')).toBeNull(); OpalLoader.prototype.load.andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.HTTP_RESPONSE, new OpalResponse({ body: new Response(new Buffer('HTTP/1.1 200 OK\r\nContent-Type: text/javascript; charset=utf-8\r\n\r\n{')) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); }); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 4; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(2); expect(listener).not.toHaveBeenCalled(); expect(readListener).not.toHaveBeenCalled(); expect(errorListener.callCount).toEqual(2); expect(readErrorListener.callCount).toEqual(2); [errorEvent, readErrorEvent].forEach(function (e) { expect(e.code).toEqual(-4); expect(e.message).toEqual('JSON parse error'); expect(e.data).toEqual({json: '{', error: jasmine.any(String)}); }); expect(response.getHeader('set-cookie')).toBeNull(); OpalLoader.prototype.load.andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', result: { value: { test: 6 } } }) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); }); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 6; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(3); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener.callCount).toEqual(2); expect(readErrorListener.callCount).toEqual(2); expect(event.data).toEqual({test: 6}); expect(readEvent.data).toEqual({test: 6}); expect(response.getHeader('set-cookie')).toBeNull(); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 6}); }); }); it(jasmine.getEnv().currentSuite.description + ': JsonRpcResponse', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', error: { code: -2, message: 'Test2', data: { test: 2 } } }) }))); }).bind(this)); }); instance.get(callback); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); instance.get(callback); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(callback).toHaveBeenCalledWith(readErrorEvent, null); expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener).not.toHaveBeenCalled(); expect(readListener).not.toHaveBeenCalled(); expect(errorListener.callCount).toEqual(1); expect(readErrorListener.callCount).toEqual(1); [errorEvent, readErrorEvent].forEach(function (e) { expect(e.code).toEqual(-2); expect(e.message).toEqual('Test2'); expect(e.data).toEqual({test: 2}); }); expect(response.getHeader('set-cookie')).toBeNull(); expect(callback).toHaveBeenCalledWith(readErrorEvent, null); OpalLoader.prototype.load.andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('get'); expect(body.params).toEqual({key: 'test'}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', result: { value: { test: 7 } } }) }))); }).bind(this)); }); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).not.toThrow(); }); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 4; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(2); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener.callCount).toEqual(1); expect(readErrorListener.callCount).toEqual(1); expect(event.data).toEqual({test: 7}); expect(readEvent.data).toEqual({test: 7}); expect(response.getHeader('set-cookie')).toBeNull(); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, {test: 7}); }); }); }); describe(jasmine.getEnv().currentSuite.description + ' - Exception', function () { it(jasmine.getEnv().currentSuite.description + ': OPENED', function () { var request = new Request(), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load'); expect(instance.read()).toBe(instance); expect(function () { instance.read(); }).toThrow(new Error(NsessManager.Exception.OPENED)); waitsFor(function () { return listener.callCount + readListener.callCount + errorListener.callCount + readErrorListener.callCount >= 2; }); runs(function () { expect(OpalLoader.prototype.load).not.toHaveBeenCalled(); expect(listener.callCount).toEqual(1); expect(readListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(readErrorListener).not.toHaveBeenCalled(); expect(event.data).toBeNull(); expect(readEvent.data).toBeNull(); expect(response.getHeader('set-cookie')).toBeNull(); instance.get(callback); }); waitsFor(function () { return callback.callCount > 0; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, null); expect(function () { instance.read(); }).toThrow(new Error(NsessManager.Exception.OPENED)); }); }); it(jasmine.getEnv().currentSuite.description + ': CLOSED', function () { var request = new Request(), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load'); instance.write(); waitsFor(function () { return listener.callCount; }); runs(function () { expect(OpalLoader.prototype.load).not.toHaveBeenCalled(); expect(function () { instance.read(); }).toThrow(new Error(NsessManager.Exception.CLOSED)); }); }); }); }); describe(jasmine.getEnv().currentSuite.description + '.write', function () { var event, listener, writeEvent, writeListener, errorEvent, errorListener, writeErrorEvent, writeErrorListener, callback; function addEventListeners(instance) { instance.addEventListener(NsessManager.Event.OK, listener); instance.addEventListener(NsessManager.Event.WRITE_OK, writeListener); instance.addEventListener(NsessManager.Event.ERROR, errorListener); instance.addEventListener(NsessManager.Event.WRITE_ERROR, writeErrorListener); return instance; } beforeEach(function () { event = undefined; listener = jasmine.createSpy('listener').andCallFake(function (e) { event = e; }); writeEvent = undefined; writeListener = jasmine.createSpy('writeListener').andCallFake(function (e) { writeEvent = e; }); errorEvent = undefined; errorListener = jasmine.createSpy('errorListener').andCallFake(function (e) { errorEvent = e; }); writeErrorEvent = undefined; writeErrorListener = jasmine.createSpy('writeErrorListener').andCallFake(function (e) { writeErrorEvent = e; }); callback = jasmine.createSpy('callback'); }); describe(jasmine.getEnv().currentSuite.description + ' - OK', function () { describe(jasmine.getEnv().currentSuite.description + ': no sessionId', function () { it(jasmine.getEnv().currentSuite.description + ', default lifetime', function () { var request = new Request(), response = new Response(), instance = addEventListeners(new NsessManager(request, response)), callback2 = jasmine.createSpy('callback2'); spyOn(OpalLoader.prototype, 'load'); instance.get(callback); expect(instance.write()).toBe(instance); expect(function () { instance.write(); }).toThrow(new Error(NsessManager.Exception.CLOSED)); instance.get(callback2); waitsFor(function () { return listener.callCount + writeListener.callCount + errorListener.callCount + writeErrorListener.callCount >= 3; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, null); expect(callback2).toHaveBeenCalledWith(null, null); expect(OpalLoader.prototype.load).not.toHaveBeenCalled(); expect(listener.callCount).toEqual(2); expect(writeListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(writeErrorListener).not.toHaveBeenCalled(); expect(event.data).toBeNull(); expect(writeEvent.data).toBeNull(); expect(response.getHeader('set-cookie')).toBeNull(); }); }); it(jasmine.getEnv().currentSuite.description + ', lifetime < 0', function () { var request = new Request(), response = new Response(), instance = addEventListeners(new NsessManager(request, response, {lifetime: -1})); spyOn(OpalLoader.prototype, 'load'); expect(instance.write()).toBe(instance); expect(function () { instance.write(); }).toThrow(new Error(NsessManager.Exception.CLOSED)); waitsFor(function () { return listener.callCount + writeListener.callCount + errorListener.callCount + writeErrorListener.callCount >= 2; }); runs(function () { expect(OpalLoader.prototype.load).not.toHaveBeenCalled(); expect(listener.callCount).toEqual(1); expect(writeListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(writeErrorListener).not.toHaveBeenCalled(); expect(event.data).toBeNull(); expect(writeEvent.data).toBeNull(); expect(response.getHeader('set-cookie')).toBeNull(); }); }); }); it(jasmine.getEnv().currentSuite.description + ': JSON_RESPONSE', function () { var request = new Request(), response = new Response(), instance = addEventListeners(new NsessManager(request, response)), callback2 = jasmine.createSpy('callback2'); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('replace'); expect(body.params).toEqual({value: {test: 1}}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', result: { key: 'test' } }) }))); }).bind(this)); }); instance.get(callback); instance.set({test: 1}); expect(instance.write()).toBe(instance); expect(function () { instance.write(); }).not.toThrow(); instance.get(callback2); waitsFor(function () { return listener.callCount + writeListener.callCount + errorListener.callCount + writeErrorListener.callCount >= 3; }); runs(function () { expect(callback).toHaveBeenCalledWith(null, null); expect(callback2).toHaveBeenCalledWith(null, {test: 1}); expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(2); expect(writeListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(writeErrorListener).not.toHaveBeenCalled(); expect(event.data).toEqual({test: 1}); expect(writeEvent.data).toEqual({test: 1}); expect(response.getHeader('set-cookie')).toEqual('onet_nsess=test; path=/; httponly'); expect(response.getHeader('p3p')).toEqual('CP="ALL DSP COR IVD IVA PSD PSA TEL TAI CUS ADM CUR CON SAM OUR IND"'); }); }); it(jasmine.getEnv().currentSuite.description + ': HTTP_RESPONSE', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('replace'); expect(body.params).toEqual({key: 'test', value: {test: 2}}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.HTTP_RESPONSE, new OpalResponse({ body: new Response(new Buffer('HTTP/1.1 200 OK\r\nContent-Type: text/javascript; charset=utf-8\r\n\r\n{"id": "test", "result": {"key": "test2"}}')) }))); }).bind(this)); }); instance.set({test: 2}); expect(instance.write()).toBe(instance); expect(function () { instance.write(); }).not.toThrow(); waitsFor(function () { return listener.callCount + writeListener.callCount + errorListener.callCount + writeErrorListener.callCount >= 2; }); runs(function () { expect(OpalLoader.prototype.load.callCount).toEqual(1); expect(listener.callCount).toEqual(1); expect(writeListener.callCount).toEqual(1); expect(errorListener).not.toHaveBeenCalled(); expect(writeErrorListener).not.toHaveBeenCalled(); expect(event.data).toEqual({test: 2}); expect(writeEvent.data).toEqual({test: 2}); expect(response.getHeader('set-cookie')).toEqual('onet_nsess=test2; path=/; httponly'); expect(response.getHeader('p3p')).toEqual('CP="ALL DSP COR IVD IVA PSD PSA TEL TAI CUS ADM CUR CON SAM OUR IND"'); }); }); it(jasmine.getEnv().currentSuite.description + ': NO_DATA_FOUND', function () { var request = new Request({ headers: { cookie: 'onet_nsess=test' } }), response = new Response(), instance = addEventListeners(new NsessManager(request, response)), time = new Date(); spyOn(OpalLoader.prototype, 'load').andCallFake(function () { var body = JSON.parse(this._request.getBody().toString()); expect(this._request.getProto()).toEqual(OPAL_PROTO); expect(this._request.getHost()).toEqual(OPAL_HOST); expect(body.method).toEqual('replace'); expect(body.params).toEqual({key: 'test', value: {test: 1}}); process.nextTick((function () { this.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, new OpalResponse({ body: new JsonRpcResponse({ id: 'test', error: { code: NsessManager.Error.NO_DATA_FOUND, message: 'No data found' } }) }))); }).bind(this)); }); instance.set({test: 1}); expect(instance.write()).toBe(instance); expect(function (