Skip to content

Commit

Permalink
Extract Transactable behavior to module
Browse files Browse the repository at this point in the history
  • Loading branch information
Tom Johnson committed Feb 13, 2016
1 parent cc0c7da commit 1201f12
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/rdf/spec/repository.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
require 'rdf/spec/dataset'
it_behaves_like 'an RDF::Dataset'
end

context 'as transactable' do
require 'rdf/spec/transactable'
let(:transactable) { repository }
it_behaves_like 'an RDF::Transactable'
end

context "when updating" do
require 'rdf/spec/mutable'
Expand Down
48 changes: 48 additions & 0 deletions lib/rdf/spec/transactable.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
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



it '' do
end
end

0 comments on commit 1201f12

Please sign in to comment.