# frozen_string_literal: true

describe BlockService do
  describe "#block" do
    let(:service) { BlockService.new(alice) }

    it "calls disconnect if there is a contact for a given user" do
      contact = alice.contact_for(bob.person)
      expect(alice).to receive(:contact_for).and_return(contact)
      expect(alice).to receive(:disconnect).with(contact)
      expect(Diaspora::Federation::Dispatcher).not_to receive(:defer_dispatch)
      service.block(bob.person)
    end

    it "queues a message with the block if the person is remote and there is no contact for a given user" do
      expect(alice).not_to receive(:disconnect)
      expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch)
      service.block(remote_raphael)
    end

    it "does nothing if the person is local and there is no contact for a given user" do
      expect(alice).not_to receive(:disconnect)
      expect(Diaspora::Federation::Dispatcher).not_to receive(:defer_dispatch)
      service.block(eve.person)
    end

    it "marks the notifications of the person as read" do
      expect_any_instance_of(NotificationService).to receive(:read_all_only_involving).with(bob.person)
      service.block(bob.person)
    end
  end
end
