spec/process/life_cycle_examples.rb in asynchronic-0.1.0 vs spec/process/life_cycle_examples.rb in asynchronic-0.2.0
- old
+ new
@@ -2,328 +2,342 @@
let(:env) { Asynchronic::Environment.new queue_engine, data_store }
let(:queue) { env.default_queue }
- def execute_work(queue)
- env.load_process(queue.pop).execute
+ def create(type, params={})
+ env.create_process type, params
end
- def enqueue(process, data={})
- process.enqueue(data).must_equal process.job.lookup.id
+ def execute(queue)
+ env.load_process(queue.pop).execute
end
it 'Basic' do
- process = env.build_process BasicJob
+ process = create BasicJob, input: 1
process.must_be_initialized
+ process.must_have_params input: 1
queue.must_be_empty
- enqueue process, input: 1
+ process.enqueue
process.must_be_queued
- process.must_have input: 1
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_completed
- process.must_have input: 1, output: 2
+ process.result.must_equal 2
queue.must_be_empty
end
it 'Sequential' do
- process = env.build_process SequentialJob
+ process = create SequentialJob, input: 50
process.must_be_initialized
+ process.must_have_params input: 50
queue.must_be_empty
- enqueue process, input: 50
+ process.enqueue
process.must_be_queued
- process.processes.must_be_empty
- process.must_have input: 50
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(SequentialJob::Step1).must_be_queued
- process.processes(SequentialJob::Step2).must_be_pending
- process.must_have input: 50
- queue.must_enqueued process.processes(SequentialJob::Step1)
+ process[SequentialJob::Step1].must_be_queued
+ process[SequentialJob::Step1].must_have_params input: 50
+ process[SequentialJob::Step2].must_be_pending
+ process[SequentialJob::Step2].must_have_params input: 50
+ queue.must_enqueued process[SequentialJob::Step1]
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(SequentialJob::Step1).must_be_completed
- process.processes(SequentialJob::Step2).must_be_queued
- process.must_have input: 50, partial: 500
- queue.must_enqueued process.processes(SequentialJob::Step2)
+ process[SequentialJob::Step1].must_be_completed
+ process[SequentialJob::Step1].result.must_equal 500
+ process[SequentialJob::Step2].must_be_queued
+ queue.must_enqueued process[SequentialJob::Step2]
- execute_work queue
+ execute queue
process.must_be_completed
- process.processes(SequentialJob::Step1).must_be_completed
- process.processes(SequentialJob::Step2).must_be_completed
- process.must_have input: 50, partial: 500, output: 5
+ process.result.must_be_nil
+ process[SequentialJob::Step2].must_be_completed
+ process[SequentialJob::Step2].result.must_equal 5
queue.must_be_empty
end
it 'Graph' do
- process = env.build_process GraphJob
+ process = create GraphJob, input: 100
process.must_be_initialized
+ process.must_have_params input: 100
queue.must_be_empty
- enqueue process, input: 100
+ process.enqueue
process.must_be_queued
- process.processes.must_be_empty
- process.must_have input: 100
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(GraphJob::Sum).must_be_queued
- process.processes(GraphJob::TenPercent).must_be_pending
- process.processes(GraphJob::TwentyPercent).must_be_pending
- process.processes(GraphJob::Total).must_be_pending
- process.must_have input: 100
- queue.must_enqueued process.processes(GraphJob::Sum)
+ process[GraphJob::Sum].must_be_queued
+ process[GraphJob::Sum].must_have_params input: 100
+ process[GraphJob::TenPercent].must_be_pending
+ process[GraphJob::TenPercent].must_have_params input: nil
+ process[GraphJob::TwentyPercent].must_be_pending
+ process[GraphJob::TwentyPercent].must_have_params input: nil
+ process[GraphJob::Total].must_be_pending
+ process[GraphJob::Total].must_have_params '10%' => nil, '20%' => nil
+ queue.must_enqueued process[GraphJob::Sum]
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(GraphJob::Sum).must_be_completed
- process.processes(GraphJob::TenPercent).must_be_queued
- process.processes(GraphJob::TwentyPercent).must_be_queued
- process.processes(GraphJob::Total).must_be_pending
- process.must_have input: 100, sum: 200
- queue.must_enqueued [process.processes(GraphJob::TenPercent), process.processes(GraphJob::TwentyPercent)]
+ process[GraphJob::Sum].must_be_completed
+ process[GraphJob::Sum].result.must_equal 200
+ process[GraphJob::TenPercent].must_be_queued
+ process[GraphJob::TenPercent].must_have_params input: 200
+ process[GraphJob::TwentyPercent].must_be_queued
+ process[GraphJob::TwentyPercent].must_have_params input: 200
+ process[GraphJob::Total].must_be_pending
+ queue.must_enqueued [process[GraphJob::TenPercent], process[GraphJob::TwentyPercent]]
- 2.times { execute_work queue }
+ 2.times { execute queue }
process.must_be_waiting
- process.processes(GraphJob::Sum).must_be_completed
- process.processes(GraphJob::TenPercent).must_be_completed
- process.processes(GraphJob::TwentyPercent).must_be_completed
- process.processes(GraphJob::Total).must_be_queued
- process.must_have input: 100, sum: 200, '10%' => 20, '20%' => 40
- queue.must_enqueued process.processes(GraphJob::Total)
+ process[GraphJob::TenPercent].must_be_completed
+ process[GraphJob::TenPercent].result.must_equal 20
+ process[GraphJob::TwentyPercent].must_be_completed
+ process[GraphJob::TwentyPercent].result.must_equal 40
+ process[GraphJob::Total].must_be_queued
+ queue.must_enqueued process[GraphJob::Total]
- execute_work queue
+ execute queue
process.must_be_completed
- process.processes(GraphJob::Sum).must_be_completed
- process.processes(GraphJob::TenPercent).must_be_completed
- process.processes(GraphJob::TwentyPercent).must_be_completed
- process.processes(GraphJob::Total).must_be_completed
- process.must_have input: 100, sum: 200, '10%' => 20, '20%' => 40, output: {'10%' => 20, '20%' => 40}
+ process.result.must_equal '10%' => 20, '20%' => 40
+ process[GraphJob::Total].must_be_completed
+ process[GraphJob::Total].result.must_equal '10%' => 20, '20%' => 40
queue.must_be_empty
end
it 'Parallel' do
- process = env.build_process ParallelJob
+ process = create ParallelJob, input: 10, times: 3
process.must_be_initialized
+ process.must_have_params input: 10, times: 3
queue.must_be_empty
- enqueue process, input: 10, times: 3
+ process.enqueue
process.must_be_queued
process.processes.must_be_empty
- process.must_have input: 10, times: 3
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes.each { |p| p.must_be_queued }
- process.must_have input: 10, times: 3
+ process.processes.count.must_equal 3
+ process.processes.each_with_index do |p,i|
+ p.must_be_queued
+ p.must_have_params input: 10, index: i
+ end
queue.must_enqueued process.processes
- 3.times { execute_work queue }
+ 3.times { execute queue }
process.must_be_completed
- process.processes.each { |p| p.must_be_completed }
- hash = Hash[3.times.map { |i| ["key_#{i}", 10 * i] }]
- process.must_have hash.merge(input: 10, times: 3)
+ process.result.must_equal 3
+ process.processes.each_with_index do |p,i|
+ p.must_be_completed
+ p.result.must_equal 10 * i
+ end
queue.must_be_empty
end
it 'Nested' do
- process = env.build_process NestedJob
+ process = create NestedJob, input: 4
process.must_be_initialized
+ process.must_have_params input: 4
queue.must_be_empty
- enqueue process, input: 4
+ process.enqueue
process.must_be_queued
process.processes.must_be_empty
- process.must_have input: 4
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(NestedJob::Level1).must_be_queued
- process.processes(NestedJob::Level1).processes.must_be_empty
- process.must_have input: 4
- queue.must_enqueued process.processes(NestedJob::Level1)
+ process[NestedJob::Level1].must_be_queued
+ process[NestedJob::Level1].must_have_params input: 4
+ process[NestedJob::Level1].processes.must_be_empty
+ queue.must_enqueued process[NestedJob::Level1]
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(NestedJob::Level1).must_be_waiting
- process.processes(NestedJob::Level1).processes(NestedJob::Level1::Level2).must_be_queued
- process.must_have input: 5
- queue.must_enqueued process.processes(NestedJob::Level1).processes(NestedJob::Level1::Level2)
+ process[NestedJob::Level1].must_be_waiting
+ process[NestedJob::Level1][NestedJob::Level1::Level2].must_be_queued
+ process[NestedJob::Level1][NestedJob::Level1::Level2].must_have_params input: 5
+ queue.must_enqueued process[NestedJob::Level1][NestedJob::Level1::Level2]
- execute_work queue
+ execute queue
process.must_be_completed
- process.processes(NestedJob::Level1).must_be_completed
- process.processes(NestedJob::Level1).processes(NestedJob::Level1::Level2).must_be_completed
- process.must_have input: 5, output: 25
+ process.result.must_equal 25
+ process[NestedJob::Level1].must_be_completed
+ process[NestedJob::Level1].result.must_equal 25
+ process[NestedJob::Level1][NestedJob::Level1::Level2].must_be_completed
+ process[NestedJob::Level1][NestedJob::Level1::Level2].result.must_equal 25
queue.must_be_empty
end
- it 'Dependency alias' do
- process = env.build_process DependencyAliasJob
+ it 'Alias' do
+ process = create AliasJob
process.must_be_initialized
queue.must_be_empty
- enqueue process
+ process.enqueue
process.must_be_queued
process.processes.must_be_empty
- process.data.must_be_empty
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(:word_1).must_be_queued
- process.processes(:word_2).must_be_pending
- process.processes(:word_3).must_be_pending
- process.data.must_be_empty
- queue.must_enqueued process.processes(:word_1)
+ process[:word_1].must_be_queued
+ process[:word_1].must_have_params text: 'Take'
+ process[:word_2].must_be_pending
+ process[:word_2].must_have_params text: 'it', prefix: nil
+ process[:word_3].must_be_pending
+ process[:word_3].must_have_params text: 'easy', prefix: nil
+ queue.must_enqueued process[:word_1]
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(:word_1).must_be_completed
- process.processes(:word_2).must_be_queued
- process.processes(:word_3).must_be_pending
- process.must_have text: 'Take'
- queue.must_enqueued process.processes(:word_2)
+ process[:word_1].must_be_completed
+ process[:word_1].result.must_equal 'Take'
+ process[:word_2].must_be_queued
+ process[:word_2].must_have_params text: 'it', prefix: 'Take'
+ process[:word_3].must_be_pending
+ queue.must_enqueued process[:word_2]
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(:word_1).must_be_completed
- process.processes(:word_2).must_be_completed
- process.processes(:word_3).must_be_queued
- process.must_have text: 'Take it'
- queue.must_enqueued process.processes(:word_3)
+ process[:word_1].must_be_completed
+ process[:word_2].must_be_completed
+ process[:word_2].result.must_equal 'Take it'
+ process[:word_3].must_be_queued
+ process[:word_3].must_have_params text: 'easy', prefix: 'Take it'
+ queue.must_enqueued process[:word_3]
- execute_work queue
+ execute queue
process.must_be_completed
- process.processes(:word_1).must_be_completed
- process.processes(:word_2).must_be_completed
- process.processes(:word_3).must_be_completed
- process.must_have text: 'Take it easy'
+ process.result.must_equal 'Take it easy'
+ process[:word_1].must_be_completed
+ process[:word_2].must_be_completed
+ process[:word_3].must_be_completed
+ process[:word_3].result.must_equal 'Take it easy'
queue.must_be_empty
end
it 'Custom queue' do
- process = env.build_process CustomQueueJob
+ process = create CustomQueueJob, input: 'hello'
process.must_be_initialized
-
+ process.must_have_params input: 'hello'
+
env.queue(:queue_1).must_be_empty
env.queue(:queue_2).must_be_empty
env.queue(:queue_3).must_be_empty
- enqueue process, input: 'hello'
+ process.enqueue
process.must_be_queued
process.processes.must_be_empty
- process.must_have input: 'hello'
env.queue(:queue_1).must_enqueued process
env.queue(:queue_2).must_be_empty
env.queue(:queue_3).must_be_empty
- execute_work env.queue(:queue_1)
+ execute env.queue(:queue_1)
process.must_be_waiting
- process.processes(CustomQueueJob::Reverse).must_be_queued
- process.must_have input: 'hello'
+ process[CustomQueueJob::Reverse].must_be_queued
+ process[CustomQueueJob::Reverse].must_have_params input: 'hello'
env.queue(:queue_1).must_be_empty
- env.queue(:queue_2).must_enqueued process.processes(CustomQueueJob::Reverse)
+ env.queue(:queue_2).must_enqueued process[CustomQueueJob::Reverse]
env.queue(:queue_3).must_be_empty
- execute_work env.queue(:queue_2)
+ execute env.queue(:queue_2)
process.must_be_completed
- process.processes(CustomQueueJob::Reverse).must_be_completed
- process.must_have input: 'hello', output: 'olleh'
+ process.result.must_equal 'olleh'
+ process[CustomQueueJob::Reverse].must_be_completed
+ process[CustomQueueJob::Reverse].result.must_equal 'olleh'
env.queue(:queue_1).must_be_empty
env.queue(:queue_2).must_be_empty
env.queue(:queue_3).must_be_empty
end
it 'Exception' do
- process = env.build_process ExceptionJob
+ process = create ExceptionJob
process.must_be_initialized
queue.must_be_empty
- enqueue process
+ process.enqueue
process.must_be_queued
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_aborted
process.error.must_be_instance_of Asynchronic::Error
process.error.message.must_equal 'Error for test'
end
it 'Inner exception' do
- process = env.build_process InnerExceptionJob
+ process = create InnerExceptionJob
process.must_be_initialized
queue.must_be_empty
- enqueue process
+ process.enqueue
process.must_be_queued
queue.must_enqueued process
- execute_work queue
+ execute queue
process.must_be_waiting
- process.processes(ExceptionJob).must_be_queued
- queue.must_enqueued process.processes(ExceptionJob)
+ process[ExceptionJob].must_be_queued
+ queue.must_enqueued process[ExceptionJob]
- execute_work queue
+ execute queue
process.must_be_aborted
process.error.must_be_instance_of Asynchronic::Error
process.error.message.must_equal 'Error caused by ExceptionJob'
- process.processes(ExceptionJob).must_be_aborted
- process.processes(ExceptionJob).error.must_be_instance_of Asynchronic::Error
- process.processes(ExceptionJob).error.message.must_equal 'Error for test'
+ process[ExceptionJob].must_be_aborted
+ process[ExceptionJob].error.must_be_instance_of Asynchronic::Error
+ process[ExceptionJob].error.message.must_equal 'Error for test'
end
end
\ No newline at end of file