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