@leansdk/leanrc
Version:
LeanRC is a MVC framework for creating graceful applications
392 lines (389 loc) • 14.7 kB
text/coffeescript
{ expect, assert } = require 'chai'
sinon = require 'sinon'
_ = require 'lodash'
RC = require '@leansdk/rc/lib'
LeanRC = require.main.require 'lib'
{ co } = RC::Utils
describe 'MemoryResqueMixin', ->
describe '.new', ->
it 'should create resque instance', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
assert.instanceOf resque, Test::Resque
yield return
describe '#onRegister', ->
it 'should register resque instance', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
assert.deepEqual resque[Symbol.for '~jobs'], {}
assert.deepEqual resque[Symbol.for '~queues'],
'Test|>default': concurrency: 1, name: 'default'
yield return
describe '#onRemove', ->
it 'should unregister resque instance', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
assert.deepEqual resque[Symbol.for '~jobs'], {}
assert.deepEqual resque[Symbol.for '~queues'],
'Test|>default': concurrency: 1, name: 'default'
resque.onRemove()
assert.deepEqual resque.tmpJobs, []
assert.deepEqual resque[Symbol.for '~queues'], {}
# assert.isUndefined resque[Symbol.for '~jobs']
# assert.isUndefined resque[Symbol.for '~queues']
yield return
describe '#ensureQueue', ->
it 'should create queue config', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE', 5
queue = resque[Symbol.for '~queues']['Test|>TEST_QUEUE']
assert.propertyVal queue, 'name', 'TEST_QUEUE'
assert.propertyVal queue, 'concurrency', 5
yield return
describe '#getQueue', ->
it 'should get queue', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE', 5
queue = yield resque.getQueue 'TEST_QUEUE'
assert.propertyVal queue, 'name', 'TEST_QUEUE'
assert.propertyVal queue, 'concurrency', 5
yield return
describe '#removeQueue', ->
it 'should remove queue', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE', 5
queue = yield resque.getQueue 'TEST_QUEUE'
assert.isDefined queue
yield resque.removeQueue 'TEST_QUEUE'
queue = yield resque.getQueue 'TEST_QUEUE'
assert.isUndefined queue
yield return
describe '#allQueues', ->
it 'should get all queues', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
resque.ensureQueue 'TEST_QUEUE_2', 2
resque.ensureQueue 'TEST_QUEUE_3', 3
resque.ensureQueue 'TEST_QUEUE_4', 4
resque.ensureQueue 'TEST_QUEUE_5', 5
resque.ensureQueue 'TEST_QUEUE_6', 6
queues = yield resque.allQueues()
assert.lengthOf queues, 7
assert.includeDeepMembers queues, [
name: 'default', concurrency: 1
,
name: 'TEST_QUEUE_1', concurrency: 1
,
name: 'TEST_QUEUE_2', concurrency: 2
,
name: 'TEST_QUEUE_3', concurrency: 3
,
name: 'TEST_QUEUE_4', concurrency: 4
,
name: 'TEST_QUEUE_5', concurrency: 5
,
name: 'TEST_QUEUE_6', concurrency: 6
]
yield return
describe '#pushJob', ->
it 'should save new job', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
DATA = data: 'data'
DATE = Date.now()
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT', DATA, DATE
job = resque[Symbol.for '~jobs']['Test|>TEST_QUEUE_1'][jobId]
assert.deepEqual job,
queueName: 'Test|>TEST_QUEUE_1'
data: scriptName: 'TEST_SCRIPT', data: DATA
delayUntil: DATE
status: 'scheduled'
lockLifetime: 5000
lockLimit: 2
yield return
describe '#getJob', ->
it 'should get saved job', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
DATA = data: 'data'
DATE = Date.now()
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT', DATA, DATE
job = yield resque.getJob 'TEST_QUEUE_1', jobId
assert.deepEqual job,
queueName: 'Test|>TEST_QUEUE_1'
data: scriptName: 'TEST_SCRIPT', data: DATA
delayUntil: DATE
status: 'scheduled'
lockLifetime: 5000
lockLimit: 2
yield return
describe '#deleteJob', ->
it 'should remove saved job', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
DATA = data: 'data'
DATE = Date.now()
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT', DATA, DATE
job = yield resque.getJob 'TEST_QUEUE_1', jobId
assert.deepEqual job,
queueName: 'Test|>TEST_QUEUE_1'
data: scriptName: 'TEST_SCRIPT', data: DATA
delayUntil: DATE
status: 'scheduled'
lockLifetime: 5000
lockLimit: 2
assert.isTrue yield resque.deleteJob 'TEST_QUEUE_1', jobId
assert.isNull yield resque.getJob 'TEST_QUEUE_1', jobId
yield return
describe '#allJobs', ->
it 'should list all jobs', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
resque.ensureQueue 'TEST_QUEUE_2', 1
DATA = data: 'data'
DATE = Date.now()
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_2', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_2', 'TEST_SCRIPT_1', DATA, DATE
yield resque.deleteJob 'TEST_QUEUE_1', jobId
jobs = yield resque.allJobs 'TEST_QUEUE_1'
assert.lengthOf jobs, 3
jobs = yield resque.allJobs 'TEST_QUEUE_1', 'TEST_SCRIPT_2'
assert.lengthOf jobs, 2
yield return
describe '#pendingJobs', ->
it 'should list pending jobs', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
resque.ensureQueue 'TEST_QUEUE_2', 1
DATA = data: 'data'
DATE = Date.now()
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_2', 'TEST_SCRIPT_1', DATA, DATE
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
job = yield resque.getJob 'TEST_QUEUE_1', jobId
job.status = 'running'
jobs = yield resque.pendingJobs 'TEST_QUEUE_1'
assert.lengthOf jobs, 2
jobs = yield resque.pendingJobs 'TEST_QUEUE_1', 'TEST_SCRIPT_2'
assert.lengthOf jobs, 1
yield return
describe '#progressJobs', ->
it 'should list runnning jobs', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
resque.ensureQueue 'TEST_QUEUE_2', 1
DATA = data: 'data'
DATE = Date.now()
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_2', 'TEST_SCRIPT_1', DATA, DATE
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
job = yield resque.getJob 'TEST_QUEUE_1', jobId
job.status = 'running'
jobs = yield resque.progressJobs 'TEST_QUEUE_1'
assert.lengthOf jobs, 1
jobs = yield resque.progressJobs 'TEST_QUEUE_1', 'TEST_SCRIPT_2'
assert.lengthOf jobs, 0
yield return
describe '#completedJobs', ->
it 'should list complete jobs', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
resque.ensureQueue 'TEST_QUEUE_2', 1
DATA = data: 'data'
DATE = Date.now()
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_2', 'TEST_SCRIPT_1', DATA, DATE
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
job = yield resque.getJob 'TEST_QUEUE_1', jobId
job.status = 'completed'
jobs = yield resque.completedJobs 'TEST_QUEUE_1'
assert.lengthOf jobs, 1
jobs = yield resque.completedJobs 'TEST_QUEUE_1', 'TEST_SCRIPT_2'
assert.lengthOf jobs, 0
yield return
describe '#failedJobs', ->
it 'should list failed jobs', ->
co ->
class Test extends LeanRC
"#{__dirname}/config/root"
class Test::Resque extends LeanRC::Resque
LeanRC::MemoryResqueMixin
Test
resque = Test::Resque.new 'TEST_RESQUE'
resque.onRegister()
resque.ensureQueue 'TEST_QUEUE_1', 1
resque.ensureQueue 'TEST_QUEUE_2', 1
DATA = data: 'data'
DATE = Date.now()
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_2', 'TEST_SCRIPT_1', DATA, DATE
jobId = yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_1', DATA, DATE
yield resque.pushJob 'TEST_QUEUE_1', 'TEST_SCRIPT_2', DATA, DATE
job = yield resque.getJob 'TEST_QUEUE_1', jobId
job.status = 'failed'
jobs = yield resque.failedJobs 'TEST_QUEUE_1'
assert.lengthOf jobs, 1
jobs = yield resque.failedJobs 'TEST_QUEUE_1', 'TEST_SCRIPT_2'
assert.lengthOf jobs, 0
yield return