Sha256: 4ca693a1510243dd46448a7cceb53ce1fc6ca65746eff95e881c7f27ed75a380

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

# encoding: utf-8
require "spec_helper"

module Uuids::Services
  describe Add do

    # Models dependency injection
    let(:uuids_class) { Uuids::Models::Uuid }

    # Parameters by default
    let!(:record) { create :record }
    let!(:params) do
      {
        "record" => record,
        "value"  => SecureRandom.uuid,
        "wrong"  => "wrong"
      }
    end

    # The service and its listener
    let(:listener) { spy "listener" }
    subject do
      service = described_class.new params
      service.subscribe listener
      service
    end

    describe ".new" do

      it "sets #record" do
        expect(subject.record).to eq params["record"]
      end

      it "sets #value" do
        expect(subject.value).to eq params["value"]
      end

      it "whitelists params" do
        expect(subject.params).to eq params.slice("record", "value")
      end
    end

    describe "#run" do

      context "with valid params" do

        it "adds a uuid to the record" do
          expect { subject.run }.to change { uuids_class.count }.by 1
          expect(uuids_class.last).to correspond_to subject.params
        end

        it "publishes :created" do
          subject.run
          expect(listener).to have_received(:created) do |uuid, messages|
            expect(uuid).to eq uuids_class.last
            expect(messages).to be_present
          end
        end
      end

      context "with a wrong value" do

        before { params.merge! "value" => "wrong" }

        it "doesn't create a uuid" do
          expect { subject.run }.not_to change { uuids_class.all }
        end

        it "publishes :error" do
          subject.run
          expect(listener).to have_received(:error) do |messages|
            expect(messages).to be_present
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
uuids-4.1.5 spec/uuids/services/add_spec.rb
uuids-4.1.4 spec/uuids/services/add_spec.rb