@leansdk/leanrc
Version:
LeanRC is a MVC framework for creating graceful applications
379 lines (377 loc) • 13.1 kB
text/coffeescript
{ expect, assert } = require 'chai'
sinon = require 'sinon'
LeanRC = require.main.require 'lib'
{
AnyT, NilT
FuncG, MaybeG, ListG, UnionG
Utils: { co }
}= LeanRC::
describe 'Queue', ->
describe '.new', ->
it 'should create delayed queue instance', ->
co ->
RESQUE = 'RESQUE'
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new RESQUE
assert.property queue, 'name', 'TEST_QUEUE', 'No correct `id` property'
assert.property queue, 'concurrency', 4, 'No correct `rev` property'
assert.instanceOf queue.resque, TestResque, '`resque` is not a Resque instance'
yield return
describe '#push', ->
it 'should push job into queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return 42
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
pushJob: FuncG([String, String, AnyT, MaybeG Number], UnionG String, Number),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
job = yield queue.push 'TEST_SCRIPT', { data: 'data' }, UNTIL_DATE
assert.equal job, 42
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], 'TEST_SCRIPT'
assert.deepEqual spyMethod.args[0][2], data: 'data'
assert.equal spyMethod.args[0][3], UNTIL_DATE
yield return
describe '#get', ->
it 'should get job from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return JOB
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
getJob: FuncG([String, UnionG String, Number], MaybeG Object),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
job = yield queue.get '42'
assert.equal job, JOB
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], '42'
yield return
describe '#delete', ->
it 'should remove job from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return yes
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
deleteJob: FuncG([String, UnionG String, Number], Boolean),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
job = yield queue.delete '42'
assert.equal job, yes
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], '42'
yield return
describe '#abort', ->
it 'should stop job from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
abortJob: FuncG([String, UnionG String, Number], NilT),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
job = yield queue.abort '42'
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], '42'
yield return
describe '#all', ->
it 'should get all jobs from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return [ JOB ]
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
allJobs: FuncG([String, MaybeG String], ListG Object),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
jobs = yield queue.all 'TEST_SCRIPT'
assert.deepEqual jobs, [ JOB ]
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], 'TEST_SCRIPT'
yield return
describe '#pending', ->
it 'should get pending jobs from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return [ JOB ]
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
pendingJobs: FuncG([String, MaybeG String], ListG Object),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
jobs = yield queue.pending 'TEST_SCRIPT'
assert.deepEqual jobs, [ JOB ]
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], 'TEST_SCRIPT'
yield return
describe '#progress', ->
it 'should get processing jobs from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return [ JOB ]
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
progressJobs: FuncG([String, MaybeG String], ListG Object),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
jobs = yield queue.progress 'TEST_SCRIPT'
assert.deepEqual jobs, [ JOB ]
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], 'TEST_SCRIPT'
yield return
describe '#completed', ->
it 'should get completed jobs from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return [ JOB ]
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
completedJobs: FuncG([String, MaybeG String], ListG Object),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
jobs = yield queue.completed 'TEST_SCRIPT'
assert.deepEqual jobs, [ JOB ]
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], 'TEST_SCRIPT'
yield return
describe '#failed', ->
it 'should get failed jobs from queue', ->
co ->
RESQUE = 'RESQUE'
JOB = id: '42', job: 'job'
spyMethod = sinon.spy -> yield return [ JOB ]
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
failedJobs: FuncG([String, MaybeG String], ListG Object),
default: spyMethod
class MyQueue extends LeanRC::Queue
Test
queue = MyQueue.new
name: 'TEST_QUEUE'
concurrency: 4
, TestResque.new(RESQUE)
UNTIL_DATE = new Date()
jobs = yield queue.failed 'TEST_SCRIPT'
assert.deepEqual jobs, [ JOB ]
assert.isTrue spyMethod.called
assert.equal spyMethod.args[0][0], 'TEST_QUEUE'
assert.equal spyMethod.args[0][1], 'TEST_SCRIPT'
yield return
describe '.replicateObject', ->
facade = null
KEY = 'TEST_DELAYED_QUEUE_001'
after -> facade?.remove?()
it 'should create replica for delayed queue', ->
co ->
RESQUE = 'RESQUE'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
class MyQueue extends LeanRC::Queue
Test
facade.registerProxy TestResque.new RESQUE
resque = facade.retrieveProxy RESQUE
NAME = 'TEST_QUEUE'
queue = yield resque.create NAME, 4
replica = yield MyQueue.replicateObject queue
assert.deepEqual replica,
type: 'instance'
class: 'Queue'
multitonKey: KEY
resqueName: RESQUE
name: NAME
yield return
describe '.restoreObject', ->
facade = null
KEY = 'TEST_DELAYED_QUEUE_002'
after -> facade?.remove?()
it 'should restore delayed queue from replica', ->
co ->
RESQUE = 'RESQUE'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestResque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
TestResque.initialize()
class MyQueue extends LeanRC::Queue
Test
facade.registerProxy TestResque.new RESQUE
resque = facade.retrieveProxy RESQUE
NAME = 'TEST_QUEUE'
queue = yield resque.create NAME, 4
restoredQueue = yield MyQueue.restoreObject Test,
type: 'instance'
class: 'Queue'
multitonKey: KEY
resqueName: RESQUE
name: NAME
assert.deepEqual queue, restoredQueue
yield return