Sha256: caac1898fb9479a4d64581d883ff73417af12485c56427a131186abd5b568729

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require 'rdf/spec'

RSpec.shared_examples 'an RDF::Transactable' do
  include RDF::Spec::Matchers

  let(:statements) { RDF::Spec.quads }

  before do
    raise '`transactable` must be set with `let(:transactable)`' unless
      defined? transactable
  end

  subject { transactable }

  describe "#transaction" do
    it 'gives an immutable transaction' do
      expect { subject.transaction { insert([]) } }.to raise_error TypeError
    end

    it 'commits a successful transaction' do
      statement = RDF::Statement(:s, RDF.type, :o)
      expect(subject).to receive(:commit_transaction).and_call_original
      
      expect do
        subject.transaction(mutable: true) { insert(statement) }
      end.to change { subject.statements }.to include(statement)
    end

    it 'rolls back a failed transaction' do
      original_contents = subject.statements
      expect(subject).to receive(:rollback_transaction).and_call_original

      expect do
        subject.transaction(mutable: true) do
          delete(*@statements)
          raise 'my error'
        end
      end.to raise_error RuntimeError

      expect(subject.statements).to contain_exactly(*original_contents)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rdf-spec-2.0.0.beta1 lib/rdf/spec/transactable.rb