UNPKG

@leansdk/leanrc

Version:

LeanRC is a MVC framework for creating graceful applications

1,221 lines (1,219 loc) 61.1 kB
EventEmitter = require 'events' { Readable } = require 'stream' { expect, assert } = require 'chai' sinon = require 'sinon' _ = require 'lodash' accepts = require 'accepts' LeanRC = require.main.require 'lib' { co } = LeanRC::Utils describe 'Response', -> describe '.new', -> facade = null afterEach -> facade?.remove?() it 'should create Response instance', -> co -> KEY = 'TEST_RESPONSE_001' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.instanceOf response, TestResponse yield return describe '#ctx', -> facade = null afterEach -> facade?.remove?() it 'should get context object', -> co -> KEY = 'TEST_RESPONSE_002' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.ctx, context yield return describe '#res', -> facade = null afterEach -> facade?.remove?() it 'should get native resource object', -> co -> KEY = 'TEST_RESPONSE_003' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.res, res yield return describe '#switch', -> facade = null afterEach -> facade?.remove?() it 'should get switch object', -> co -> KEY = 'TEST_RESPONSE_004' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.switch, switchMediator yield return describe '#socket', -> facade = null afterEach -> facade?.remove?() it 'should get socket object', -> co -> KEY = 'TEST_RESPONSE_005' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} socket = {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' socket: socket context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.socket, socket yield return describe '#headerSent', -> facade = null afterEach -> facade?.remove?() it 'should get res.headersSent value', -> co -> KEY = 'TEST_RESPONSE_006' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} headersSent: yes getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.headerSent, res.headersSent yield return describe '#headers', -> facade = null afterEach -> facade?.remove?() it 'should get response headers', -> co -> KEY = 'TEST_RESPONSE_007' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.deepEqual response.headers, 'Foo': 'Bar' yield return describe '#header', -> facade = null afterEach -> facade?.remove?() it 'should get response headers', -> co -> KEY = 'TEST_RESPONSE_008' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'Foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.deepEqual response.header, 'Foo': 'Bar' yield return describe '#status', -> facade = null afterEach -> facade?.remove?() it 'should get and set response status', -> co -> KEY = 'TEST_RESPONSE_009' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} statusCode: 200 statusMessage: 'OK' getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.status, 200 response.status = 400 assert.equal response.status, 400 assert.equal res.statusCode, 400 assert.throws -> response.status = 'TEST' assert.throws -> response.status = 0 assert.doesNotThrow -> response.status = 200 res.headersSent = yes assert.throws -> response.status = 200 yield return describe '#message', -> facade = null afterEach -> facade?.remove?() it 'should get and set response message', -> co -> KEY = 'TEST_RESPONSE_010' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} statusCode: 200 statusMessage: 'OK' getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.message, 'OK' response.message = 'TEST' assert.equal response.message, 'TEST' assert.equal res.statusMessage, 'TEST' yield return describe '#get', -> facade = null afterEach -> facade?.remove?() it 'should get specified response header', -> co -> KEY = 'TEST_RESPONSE_011' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.deepEqual response.get('Foo'), 'Bar' yield return describe '#set', -> facade = null afterEach -> facade?.remove?() it 'should set specified response header', -> co -> KEY = 'TEST_RESPONSE_012' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context response.set 'Content-Type', 'text/plain' assert.equal res._headers['content-type'], 'text/plain' assert.equal response.get('Content-Type'), 'text/plain' now = new Date response.set 'Date', now assert.equal response.get('Date'), "#{now}" array = [ 1, now, 'TEST'] response.set 'Test', array assert.deepEqual response.get('Test'), [ '1', "#{now}", 'TEST'] response.set 'Abc': 123 'Last-Date': now 'New-Test': 'Test' assert.equal response.get('Abc'), '123' assert.equal response.get('Last-Date'), "#{now}" assert.equal response.get('New-Test'), 'Test' yield return describe '#append', -> facade = null afterEach -> facade?.remove?() it 'should add specified response header value', -> co -> KEY = 'TEST_RESPONSE_013' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context response.append 'Test', 'data' assert.equal response.get('Test'), 'data' response.append 'Test', 'Test' assert.deepEqual response.get('Test'), [ 'data', 'Test' ] response.append 'Test', 'Test' assert.deepEqual response.get('Test'), [ 'data', 'Test', 'Test' ] yield return describe '#remove', -> facade = null afterEach -> facade?.remove?() it 'should remove specified response header', -> co -> KEY = 'TEST_RESPONSE_014' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context response.set 'Test', 'data' assert.equal response.get('Test'), 'data' response.remove 'Test' assert.equal response.get('Test'), '' yield return describe '#vary', -> facade = null afterEach -> facade?.remove?() it 'should set `Vary` header', -> co -> KEY = 'TEST_RESPONSE_015' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context response.vary 'Origin' assert.equal response.get('Vary'), 'Origin' yield return describe '#lastModified', -> facade = null afterEach -> facade?.remove?() it 'should get and set `Last-Modified` header', -> co -> KEY = 'TEST_RESPONSE_016' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context now = new Date response.lastModified = now assert.equal res._headers['last-modified'], now.toUTCString() assert.deepEqual response.lastModified, new Date now.toUTCString() yield return describe '#etag', -> facade = null afterEach -> facade?.remove?() it 'should get and set `ETag` header', -> co -> KEY = 'TEST_RESPONSE_017' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context etag = '123456789' response.etag = etag assert.equal res._headers['etag'], "\"#{etag}\"" assert.deepEqual response.etag, "\"#{etag}\"" etag = 'W/"123456789"' response.etag = etag assert.equal res._headers['etag'], etag assert.deepEqual response.etag, etag yield return describe '#type', -> facade = null afterEach -> facade?.remove?() it 'should get, set and remove `Content-Type` header', -> co -> KEY = 'TEST_RESPONSE_018' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.equal response.type, '' response.type = 'markdown' assert.equal response.type, 'text/markdown' assert.equal res._headers['content-type'], 'text/markdown; charset=utf-8' response.type = 'file.json' assert.equal response.type, 'application/json' assert.equal res._headers['content-type'], 'application/json; charset=utf-8' response.type = 'text/html' assert.equal response.type, 'text/html' assert.equal res._headers['content-type'], 'text/html; charset=utf-8' response.type = null assert.equal response.type, '' assert.isUndefined res._headers['content-type'] yield return describe '#attachment', -> facade = null afterEach -> facade?.remove?() it 'should setup attachment', -> co -> KEY = 'TEST_RESPONSE_019' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context response.attachment "#{__dirname}/#{__filename}" assert.equal response.type, 'text/coffeescript' assert.equal response.get('Content-Disposition'), 'attachment; filename="Response-test.coffee"' response.attachment 'attachment.js' assert.equal response.type, 'application/javascript' assert.equal response.get('Content-Disposition'), 'attachment; filename="attachment.js"' yield return describe '#writable', -> facade = null afterEach -> facade?.remove?() it 'should check if response is writable', -> co -> KEY = 'TEST_RESPONSE_020' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {} res = new MyResponse res.finished = yes req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.isFalse response.writable res.finished = no context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.isTrue response.writable res = new MyResponse context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.isTrue response.writable res.socket = writable: yes context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.isTrue response.writable res.socket = writable: no context = Test::Context.new req, res, switchMediator response = TestResponse.new context assert.isFalse response.writable yield return describe '#is', -> facade = null afterEach -> facade?.remove?() it 'should check `Content-Type` header', -> co -> KEY = 'TEST_RESPONSE_021' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context response.type = 'data.json' assert.equal response.is('html' , 'application/*'), 'application/json' assert.isFalse response.is 'html' yield return describe '#body', -> facade = null afterEach -> facade?.remove?() it 'should get and set response body', -> co -> KEY = 'TEST_RESPONSE_022' facade = LeanRC::Facade.getInstance KEY class Test extends LeanRC @inheritProtected() @root "#{__dirname}/../command/config/root" @initialize() configs = LeanRC::Configuration.new LeanRC::CONFIGURATION, Test::ROOT facade.registerProxy configs class TestResponse extends LeanRC::Response @inheritProtected() @module Test @initialize() class TestSwitch extends LeanRC::Switch @inheritProtected() @module Test @public routerName: String, { default: 'TEST_SWITCH_ROUTER' } @initialize() class TestRouter extends LeanRC::Router @inheritProtected() @module Test @initialize() facade.registerProxy TestRouter.new 'TEST_SWITCH_ROUTER' facade.registerMediator TestSwitch.new 'TEST_SWITCH_MEDIATOR' switchMediator = facade.retrieveMediator 'TEST_SWITCH_MEDIATOR' class MyResponse extends EventEmitter _headers: {} getHeaders: -> LeanRC::Utils.copy @_headers getHeader: (field) -> @_headers[field.toLowerCase()] setHeader: (field, value) -> @_headers[field.toLowerCase()] = value removeHeader: (field) -> delete @_headers[field.toLowerCase()] end: (data, encoding = 'utf-8', callback = ->) -> @finished = yes @emit 'finish', data?.toString? encoding callback() constructor: (args...) -> super args... { @finished, @_headers } = finished: no, _headers: {'foo': 'Bar'} res = new MyResponse req = url: 'http://localhost:8888' headers: 'x-forwarded-for': '192.168.0.1' context = Test::Context.new req, res, switchMediator response = TestResponse.new context asse