Sha256: 21e970f1a79ece8d75690ff156b8cd30ab605c0a61abf94dae26b260e5e8ce37

Contents?: true

Size: 1.98 KB

Versions: 7

Compression:

Stored size: 1.98 KB

Contents

RSpec.describe Mutest::Parallel::Worker do
  let(:actor_env) do
    FakeActor::Env.new(message_sequence, actor_names)
  end

  let(:message_sequence) { FakeActor::MessageSequence.new    }
  let(:processor)        { instance_double(Proc)             }
  let(:mailbox)          { actor_env.mailbox(:worker)        }
  let(:parent)           { actor_env.mailbox(:parent).sender }
  let(:payload)          { instance_double(Object)           }
  let(:result_payload)   { instance_double(Object)           }

  let(:attributes) do
    {
      processor: processor,
      parent:    parent,
      mailbox:   mailbox
    }
  end

  before do
    message_sequence.add(:parent, :ready, mailbox.sender)
  end

  describe '.run' do
    subject { described_class.run(attributes) }

    let(:actor_names) { [:worker] }

    context 'when receiving :job command' do
      before do
        expect(processor).to receive(:call).with(payload).and_return(result_payload)

        message_sequence.add(:worker, :job, job)
        message_sequence.add(:parent, :result, job_result)
        message_sequence.add(:parent, :ready, mailbox.sender)
        message_sequence.add(:worker, :stop)
      end

      let(:index)           { instance_double(Fixnum)                                             }
      let(:job_result)      { Mutest::Parallel::JobResult.new(job: job, payload: result_payload)  }
      let(:job)             { Mutest::Parallel::Job.new(index: index, payload: payload)           }

      it 'signals ready and status to parent' do
        subject
      end

      it { is_expected.to be(described_class) }

      it 'consumes all messages' do
        expect { subject }.to change(&message_sequence.method(:consumed?)).from(false).to(true)
      end
    end

    context 'when receiving unknown command' do
      before do
        message_sequence.add(:worker, :other)
      end

      it 'raises error' do
        expect { subject }.to raise_error(Mutest::Actor::ProtocolError, 'Unknown command: :other')
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mutest-0.0.8 spec/unit/mutest/parallel/worker_spec.rb
mutest-0.0.7 spec/unit/mutest/parallel/worker_spec.rb
mutest-0.0.6 spec/unit/mutest/parallel/worker_spec.rb
mutest-0.0.5 spec/unit/mutest/parallel/worker_spec.rb
mutest-0.0.4 spec/unit/mutest/parallel/worker_spec.rb
mutest-0.0.3 spec/unit/mutest/parallel/worker_spec.rb
mutest-0.0.2 spec/unit/mutest/parallel/worker_spec.rb