Sha256: 90d8aa78be30daa833a55f06ea1732123676e4897f6449b8a3a68a1d7d8fddd0

Contents?: true

Size: 1.72 KB

Versions: 8

Compression:

Stored size: 1.72 KB

Contents

require "ar_helper"
require "study_engine/study_id/sync"
require "study_engine/study_id/bank"
require "webmock/rspec"

module StudyEngine
  describe StudyID::Sync do
    let(:csv) { <<-CSV }
study_id,stream_api_complete
FIX-AAA-1000,0
FIX-AAA-1001,0
FIX-BBB-1001,0
OUT-AAA-1000,0
CSV

    before do
      StudyEngine.redcap_token = "omgwtfbbq"
      stub_request(:post, "https://metrcdata.org/redcap/api/").
        with(body: { "content"=>"record", "format"=>"csv", "token"=>"omgwtfbbq" }).
        to_return(body: csv)
    end

    describe ".call" do
      it "adds new study ids" do
        expect {
          described_class.call
        }.to change { StudyID::Bank.count }.by(4)
      end

      it "deletes old nonexistent study ids" do
        attributes = { study_id_study: "OMG", study_id_site: "WTF", study_id_id: "1234" }
        StudyID::Bank.create(attributes.merge(updated_at: 1.hour.ago))
        expect {
          described_class.call
        }.to change { StudyID::Bank.where(attributes).count }.by(-1)
      end

      it "raises an error when redcap token is not configured" do
        StudyEngine.redcap_token = ""
        expect { described_class.call }.to raise_exception("Cannot sync with REDCap without setting StudyEngine.redcap_token")
      end

      it "retries request on network timeout" do
        call_count = 0
        allow(Faraday).to receive(:new).and_wrap_original do |original, *args|
          call_count += 1
          if call_count == 1
            raise Faraday::TimeoutError
          else
            original.call(*args)
          end
        end
        expect {
          described_class.call
        }.to change { StudyID::Bank.count }.by(4)
        expect(call_count).to eq(2)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
study_engine-0.3.1 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.3.0 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.2.2 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.2.1 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.2.0 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.1.1 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.1.0 spec/models/study_engine/study_id/sync_spec.rb
study_engine-0.0.2 spec/models/study_engine/study_id/sync_spec.rb