require 'spec_helper'

describe Jamnagar::Storage::SourceStore do
  context 'Finding Contributors' do
    before do
      @adapter = double(Jamnagar::Adapters::MongoAdapter, :store => 123)
      @sut = Jamnagar::Storage::ContributorStore.new(@adapter)
    end
    context 'When the contributor exists' do
      before do
        @item = {"_id" => 2}
        @existing = {"_id" => 123, "contributions" => [1]}
        allow(@adapter).to receive(:find_first).and_return(@existing)
      end
      it 'should return the contributor' do
        expect(@sut.find_contributor({}, {"id" => 123})).to eq(@existing)
      end
      it 'should update contributions on the contributor' do
        expect(@adapter).to receive(:update).with({"_id" => 123}, {"$set" => {"contributions" => [1,2]}, "$inc" => {"contributions_count" => 1}})
        @sut.find_contributor(@item, {"id" => 123})
      end
    end
    context 'When the contributor does not exist' do
      it 'should insert and return the record' do
        allow(@adapter).to receive(:find_first).and_return(nil)
        expect(@adapter).to receive(:store).with(123, {"id" => 123, "_id" => 123, "contributions" => [42], "contributions_count" => 1})
        @sut.find_contributor({"_id" => 42}, {"id" => 123})
      end
    end
  end
end