dl
Version:
DreamLab Libs
1,005 lines (942 loc) • 103 kB
JavaScript
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 (