-
Notifications
You must be signed in to change notification settings - Fork 92
/
repository_spec.rb
81 lines (65 loc) · 2.54 KB
/
repository_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
require_relative 'spec_helper'
require 'rdf/spec/repository'
describe RDF::Repository do
# @see lib/rdf/spec/repository.rb in rdf-spec
it_behaves_like 'an RDF::Repository' do
let(:repository) { RDF::Repository.new }
end
it { is_expected.not_to be_durable }
it "maintains arbitrary options" do
repository = RDF::Repository.new(foo: :bar)
expect(repository.options).to have_key(:foo)
expect(repository.options[:foo]).to eq :bar
end
context "A non-validatable repository" do
# @see lib/rdf/spec/repository.rb in rdf-spec
it_behaves_like 'an RDF::Repository' do
let(:repository) { RDF::Repository.new(with_validity: false) }
end
end
describe '#apply_changeset' do
let(:changeset) { double('changeset', deletes: dels, inserts: ins) }
let(:dels) { [] }
let(:ins) { [] }
it 'applies atomically' do
subject << existing_statement = RDF::Statement(:s, RDF.type, :o)
dels << existing_statement
ins << RDF::Statement(nil, nil, nil)
expect do
begin; subject.apply_changeset(changeset) rescue ArgumentError; end;
end.not_to change { subject.statements }
end
end
describe '#query_pattern' do
before { subject.insert(*RDF::Spec.quads) }
let(:graph_name) { subject.singleton_class::DEFAULT_GRAPH }
it "returns statements from unnamed graphs with default graph_name" do
pattern = RDF::Query::Pattern.new(nil, nil, nil, graph_name: graph_name)
solutions = []
subject.send(:query_pattern, pattern) {|s| solutions << s}
unnamed_statements = subject.statements
unnamed_statements.reject! {|st| st.name?}
expect(solutions.size).to eq unnamed_statements.size
end
end
it "remembers statement options" do
subject << existing_statement = RDF::Statement(:s, RDF.type, :o, inferred: true)
expect(subject).to have_statement(existing_statement)
expect(subject.statements.first).to eq existing_statement
expect(subject.statements.first).to be_inferred
end
it "performs coherent list updates" do
# List updates require reading from the repository mid-transaction, which requires a SerializedTransaction
repo = RDF::Repository.new
lh = RDF::Node.new("o")
repo << RDF::Statement.new(RDF::URI('s'), RDF::URI('p'), lh)
expect(repo.count).to eq 1
repo.transaction(mutable: true) do |tx|
list = RDF::List.new(subject: lh, graph: tx, values: %w(a b c))
expect(tx.count).to eq 7
list[0, 2] = %(d)
expect(tx.count).to eq 5
end
expect(repo.count).to eq 5
end
end