require 'rails_helper'
require 'webmock/rspec'

RSpec.describe XmppExchangeContactsJob, type: :job do
  let(:user)  { create :user, cn: "willherschel", ou: "kosmos.org" }
  let(:guest) { create :user, cn: "isaacnewton", ou: "kosmos.org",
                              id: 2, email: "hotapple42@eol.com" }

  subject(:job) {
    described_class.perform_later(user, guest)
  }

  before do
    stub_request(:post, "http://xmpp.example.com/api/add_rosteritem")
      .to_return(status: 200, body: "", headers: {})
    allow_any_instance_of(User).to receive(:services_enabled).and_return(["xmpp"])
  end

  it "posts add_rosteritem commands to the ejabberd API" do
    perform_enqueued_jobs { job }

    expect(WebMock).to have_requested(:post, "http://xmpp.example.com/api/add_rosteritem")
      .with { |req| req.body == '{"localuser":"isaacnewton","localhost":"kosmos.org","user":"willherschel","host":"kosmos.org","nick":"willherschel","group":"Buddies","subs":"both"}' }
    expect(WebMock).to have_requested(:post, "http://xmpp.example.com/api/add_rosteritem")
      .with { |req| req.body == '{"localuser":"willherschel","localhost":"kosmos.org","user":"isaacnewton","host":"kosmos.org","nick":"isaacnewton","group":"Buddies","subs":"both"}' }
  end

  after do
    clear_enqueued_jobs
    clear_performed_jobs
  end
end
