publish_my_data 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +37 -0
- data/Rakefile +41 -0
- data/app/assets/javascripts/publish_my_data/application.js +15 -0
- data/app/assets/javascripts/publish_my_data/resources.js +2 -0
- data/app/assets/stylesheets/publish_my_data/application.css +13 -0
- data/app/assets/stylesheets/publish_my_data/resources.css +4 -0
- data/app/controllers/publish_my_data/application_controller.rb +49 -0
- data/app/controllers/publish_my_data/datasets_controller.rb +48 -0
- data/app/controllers/publish_my_data/errors_controller.rb +9 -0
- data/app/controllers/publish_my_data/home_controller.rb +4 -0
- data/app/controllers/publish_my_data/resources_controller.rb +103 -0
- data/app/controllers/publish_my_data/sparql_controller.rb +50 -0
- data/app/helpers/publish_my_data/application_helper.rb +4 -0
- data/app/helpers/publish_my_data/resources_helper.rb +28 -0
- data/app/helpers/publish_my_data/sparql_helper.rb +7 -0
- data/app/models/publish_my_data/concept_scheme.rb +5 -0
- data/app/models/publish_my_data/dataset.rb +61 -0
- data/app/models/publish_my_data/ontology.rb +5 -0
- data/app/models/publish_my_data/rdf_type.rb +6 -0
- data/app/models/publish_my_data/resource.rb +21 -0
- data/app/views/layouts/publish_my_data/application.html.erb +14 -0
- data/app/views/layouts/publish_my_data/error.html.erb +3 -0
- data/app/views/publish_my_data/datasets/index.html.erb +20 -0
- data/app/views/publish_my_data/datasets/show.html.erb +18 -0
- data/app/views/publish_my_data/datasets/themes.html.erb +3 -0
- data/app/views/publish_my_data/errors/not_found.html.erb +1 -0
- data/app/views/publish_my_data/resources/_predicates_table.html.erb +22 -0
- data/app/views/publish_my_data/resources/_predicates_table_head.html.erb +6 -0
- data/app/views/publish_my_data/resources/_resource_formats.html.erb +11 -0
- data/app/views/publish_my_data/resources/_uri_and_label.html.erb +3 -0
- data/app/views/publish_my_data/resources/index.html.erb +39 -0
- data/app/views/publish_my_data/resources/show.html.erb +3 -0
- data/app/views/publish_my_data/sparql/_ask_formats.html.erb +3 -0
- data/app/views/publish_my_data/sparql/_construct_formats.html.erb +3 -0
- data/app/views/publish_my_data/sparql/_describe_formats.html.erb +1 -0
- data/app/views/publish_my_data/sparql/_error_message.html.erb +3 -0
- data/app/views/publish_my_data/sparql/_form.html.erb +4 -0
- data/app/views/publish_my_data/sparql/_formats.html.erb +6 -0
- data/app/views/publish_my_data/sparql/_pagination.html.erb +6 -0
- data/app/views/publish_my_data/sparql/_results.html.erb +5 -0
- data/app/views/publish_my_data/sparql/_results_data.html.erb +4 -0
- data/app/views/publish_my_data/sparql/_select_formats.html.erb +3 -0
- data/app/views/publish_my_data/sparql/endpoint.html.erb +10 -0
- data/config/initializers/tripod.rb +5 -0
- data/config/initializers/vocabularies.rb +1 -0
- data/config/routes.rb +33 -0
- data/lib/publish_my_data.rb +43 -0
- data/lib/publish_my_data/engine.rb +9 -0
- data/lib/publish_my_data/renderers.rb +44 -0
- data/lib/publish_my_data/sparql_query.rb +117 -0
- data/lib/publish_my_data/sparql_query_result.rb +49 -0
- data/lib/publish_my_data/version.rb +3 -0
- data/lib/tasks/publish_my_data_tasks.rake +4 -0
- data/spec/controllers/publish_my_data/datasets_controller_spec.rb +190 -0
- data/spec/controllers/publish_my_data/resources_controller_spec.rb +399 -0
- data/spec/controllers/publish_my_data/sparql_controller_spec.rb +172 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +68 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +38 -0
- data/spec/dummy/config/environments/production.rb +65 -0
- data/spec/dummy/config/environments/test.rb +41 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +10 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/log/development.log +211 -0
- data/spec/dummy/log/test.log +105012 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories/dataset_factories.rb +12 -0
- data/spec/factories/property_factories.rb +13 -0
- data/spec/factories/resource_factories.rb +37 -0
- data/spec/features/running_a_sparql_query_spec.rb +324 -0
- data/spec/features/uri_dereferencing_flow_spec.rb +61 -0
- data/spec/features/uri_dereferencing_spec.rb +89 -0
- data/spec/features/viewing_a_def_spec.rb +45 -0
- data/spec/features/viewing_a_doc_spec.rb +124 -0
- data/spec/features/viewing_resource_not_in_our_domain_spec.rb +31 -0
- data/spec/lib/publish_my_data/sparql_query_spec.rb +495 -0
- data/spec/models/publish_my_data/dataset_spec.rb +29 -0
- data/spec/models/publish_my_data/resource_spec.rb +23 -0
- data/spec/renderers/publish_my_data/renderers_spec.rb +79 -0
- data/spec/spec_helper.rb +53 -0
- metadata +242 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/404.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
23
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/422.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>The change you wanted was rejected.</h1>
|
23
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
24
|
+
</div>
|
25
|
+
</body>
|
26
|
+
</html>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<style type="text/css">
|
6
|
+
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
+
div.dialog {
|
8
|
+
width: 25em;
|
9
|
+
padding: 0 4em;
|
10
|
+
margin: 4em auto 0 auto;
|
11
|
+
border: 1px solid #ccc;
|
12
|
+
border-right-color: #999;
|
13
|
+
border-bottom-color: #999;
|
14
|
+
}
|
15
|
+
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
+
</style>
|
17
|
+
</head>
|
18
|
+
|
19
|
+
<body>
|
20
|
+
<!-- This file lives in public/500.html -->
|
21
|
+
<div class="dialog">
|
22
|
+
<h1>We're sorry, but something went wrong.</h1>
|
23
|
+
</div>
|
24
|
+
</body>
|
25
|
+
</html>
|
File without changes
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :my_dataset, class: PublishMyData::Dataset do
|
3
|
+
initialize_with { new(uri, graph_uri) }
|
4
|
+
title 'My Dataset'
|
5
|
+
description 'A test dataset'
|
6
|
+
|
7
|
+
ignore do
|
8
|
+
uri { PublishMyData::Dataset.uri_from_slug("my-dataset") }
|
9
|
+
graph_uri { PublishMyData::Dataset.metadata_graph_uri("my-dataset") }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :mean_result, class: PublishMyData::Resource do
|
3
|
+
initialize_with { new(uri, graph_uri) }
|
4
|
+
ignore do
|
5
|
+
uri { "http://pmdtest.dev/def/statistics/meanResult" }
|
6
|
+
graph_uri { "http://pmdtest.dev/ontology/statistics" }
|
7
|
+
end
|
8
|
+
after(:build) do |res|
|
9
|
+
res.write_predicate(RDF::RDFS.label, 'Mean Result')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :yuri_unicorn_resource, class: PublishMyData::Resource do
|
3
|
+
initialize_with { new(uri, graph_uri) }
|
4
|
+
ignore do
|
5
|
+
uri { "http://pmdtest.dev/id/unicorns/yuri" }
|
6
|
+
graph_uri { "http://pmdtest.dev/graph/unicorns" }
|
7
|
+
end
|
8
|
+
after(:build) do |res|
|
9
|
+
res.write_predicate(RDF::RDFS.label, 'Yuri The Unicorn')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
factory :boris_unicorn_resource, class: PublishMyData::Resource do
|
14
|
+
initialize_with { new(uri, graph_uri) }
|
15
|
+
ignore do
|
16
|
+
uri { "http://pmdtest.dev/id/unicorns/boris" }
|
17
|
+
graph_uri { "http://pmdtest.dev/graph/unicorns" }
|
18
|
+
end
|
19
|
+
after(:build) do |res|
|
20
|
+
res.write_predicate(RDF::RDFS.label, 'Boris The Unicorn')
|
21
|
+
res.write_predicate('http://example.com/knows', RDF::URI("http://pmdtest.dev/id/unicorns/yuri")) # knows yuri
|
22
|
+
res.write_predicate('http://example.com/resides-in', RDF::URI("http://locations.example.com/foo")) # resides in foo county
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
factory :foreign_resource, class: PublishMyData::Resource do
|
27
|
+
initialize_with { new(uri, graph_uri) }
|
28
|
+
ignore do
|
29
|
+
uri { "http://locations.example.com/foo" }
|
30
|
+
graph_uri { "http://pmdtest.dev/geo" }
|
31
|
+
end
|
32
|
+
after(:build) do |res|
|
33
|
+
res.write_predicate(RDF::RDFS.label, 'Foo County')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,324 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'visiting the sparql endpoint' do
|
4
|
+
|
5
|
+
## shared examples
|
6
|
+
|
7
|
+
shared_examples_for 'a non-html error' do
|
8
|
+
it "should 400 with a blank response" do
|
9
|
+
page.source.should be_blank
|
10
|
+
page.status_code.should == 400
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
shared_examples_for 'a sparql query' do
|
15
|
+
it "should show the results in the page" do
|
16
|
+
page.should have_content PublishMyData::SparqlQuery.new(@query).execute.to_s
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
shared_examples_for "a json response" do
|
21
|
+
it 'should render json' do
|
22
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :json).execute.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
shared_examples_for "an xml response" do
|
27
|
+
it 'should render xml' do
|
28
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :xml).execute.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
shared_examples_for "an rdf response" do
|
33
|
+
it 'should render rdf' do
|
34
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :rdf).execute.to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
shared_examples_for "a csv response" do
|
39
|
+
it 'should render csv' do
|
40
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :csv).execute.to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
shared_examples_for "a text response" do
|
45
|
+
it 'should render text' do
|
46
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :text).execute.to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
shared_examples_for "an n-triples response" do
|
51
|
+
it 'should render ntriples' do
|
52
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :nt).execute.to_s
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
shared_examples_for "a turtle response" do
|
57
|
+
it 'should render turtle' do
|
58
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :ttl).execute.to_s
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
shared_examples_for 'a construct query' do
|
63
|
+
describe 'and clicks N-triples format' do
|
64
|
+
before { page.click_link "N-triples" }
|
65
|
+
|
66
|
+
it_should_behave_like "an n-triples response"
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'and clicks Turtle format' do
|
70
|
+
before { page.click_link "Turtle" }
|
71
|
+
|
72
|
+
it_should_behave_like "a turtle response"
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'and clicks rdf/xml format' do
|
76
|
+
before { page.click_link "RDF/XML" }
|
77
|
+
|
78
|
+
it_should_behave_like "an rdf response"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
######################
|
83
|
+
## end of shared examples (start of tests!)
|
84
|
+
|
85
|
+
before do
|
86
|
+
@yuri = FactoryGirl.create(:yuri_unicorn_resource)
|
87
|
+
@boris = FactoryGirl.create(:boris_unicorn_resource)
|
88
|
+
visit '/sparql'
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "and running a sparql construct" do
|
92
|
+
before do
|
93
|
+
@query = 'construct {?s ?p ?o} where {?s ?p ?o}'
|
94
|
+
page.fill_in 'query', with: @query
|
95
|
+
find('form input[type="submit"]').click
|
96
|
+
end
|
97
|
+
|
98
|
+
it_should_behave_like 'a sparql query'
|
99
|
+
|
100
|
+
it_should_behave_like 'a construct query'
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "and runnning a sparql describe" do
|
104
|
+
before do
|
105
|
+
@query = "Describe <#{@yuri.uri.to_s}>"
|
106
|
+
page.fill_in 'query', with: @query
|
107
|
+
find('form input[type="submit"]').click
|
108
|
+
end
|
109
|
+
|
110
|
+
it_should_behave_like 'a sparql query'
|
111
|
+
|
112
|
+
it_should_behave_like 'a construct query'
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "and runnning a sparql ask" do
|
116
|
+
before do
|
117
|
+
@query = "ASK where {?s ?p ?o}"
|
118
|
+
page.fill_in 'query', with: @query
|
119
|
+
find('form input[type="submit"]').click
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'and clicking JSON format' do
|
123
|
+
before { page.click_link "JSON" }
|
124
|
+
|
125
|
+
it_should_behave_like 'a json response'
|
126
|
+
end
|
127
|
+
|
128
|
+
describe 'and clicking XML format' do
|
129
|
+
before { page.click_link "XML" }
|
130
|
+
|
131
|
+
it_should_behave_like 'an xml response'
|
132
|
+
end
|
133
|
+
|
134
|
+
describe 'and clicking Text format' do
|
135
|
+
before { page.click_link "Text" }
|
136
|
+
|
137
|
+
it_should_behave_like 'a text response'
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
describe "and running a sparql select" do
|
143
|
+
|
144
|
+
context 'which returns a single page of results' do
|
145
|
+
|
146
|
+
before do
|
147
|
+
@query = 'select * where {?s ?p ?o}'
|
148
|
+
page.fill_in 'query', with: @query
|
149
|
+
find('form input[type="submit"]').click
|
150
|
+
end
|
151
|
+
|
152
|
+
it_should_behave_like 'a sparql query'
|
153
|
+
|
154
|
+
describe 'and clicking XML format' do
|
155
|
+
before { page.click_link "XML" }
|
156
|
+
|
157
|
+
it_should_behave_like 'an xml response'
|
158
|
+
end
|
159
|
+
|
160
|
+
describe 'and clicking CSV format' do
|
161
|
+
before { page.click_link "CSV" }
|
162
|
+
|
163
|
+
it_should_behave_like 'a csv response'
|
164
|
+
end
|
165
|
+
|
166
|
+
describe 'and clicking JSON format' do
|
167
|
+
before { page.click_link "JSON" }
|
168
|
+
|
169
|
+
it_should_behave_like 'a json response'
|
170
|
+
end
|
171
|
+
|
172
|
+
describe 'and clicking Text format' do
|
173
|
+
before { page.click_link "Text" }
|
174
|
+
|
175
|
+
it_should_behave_like 'a text response'
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'which returns multiple pages' do
|
181
|
+
before do
|
182
|
+
|
183
|
+
# make some stuff (more results than the page size.
|
184
|
+
(1..30).each do |t|
|
185
|
+
uri = "http://resource#{t.to_s}"
|
186
|
+
r = PublishMyData::Resource.new(uri, "http://graph")
|
187
|
+
r.label = t.to_s
|
188
|
+
r.save
|
189
|
+
end
|
190
|
+
|
191
|
+
@query = 'select * where {?s ?p ?o}'
|
192
|
+
page.fill_in 'query', with: @query
|
193
|
+
find('form input[type="submit"]').click
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should show the next page link" do
|
197
|
+
page.should have_link("Next 20 results")
|
198
|
+
end
|
199
|
+
|
200
|
+
context 'and clicking the next page link' do
|
201
|
+
|
202
|
+
before { page.click_link("Next 20 results") }
|
203
|
+
|
204
|
+
it "should go to the next page" do
|
205
|
+
page.current_url.should include('page=2')
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'should show the previous page link' do
|
209
|
+
page.should have_link("Previous 20 results")
|
210
|
+
end
|
211
|
+
|
212
|
+
context 'where there are no more pages' do
|
213
|
+
it "should not show the next page link" do
|
214
|
+
page.should_not have_link("Next 20 results")
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
context 'and clicking the previous page link' do
|
219
|
+
before { page.click_link("Previous 20 results") }
|
220
|
+
|
221
|
+
it "should go back to the previous page" do
|
222
|
+
page.current_url.should include('page=1')
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
end
|
231
|
+
|
232
|
+
describe "and runs an unknown query type" do
|
233
|
+
|
234
|
+
before do
|
235
|
+
@query = 'MUNGE * where {?s ?p ?o}'
|
236
|
+
page.fill_in 'query', with: @query
|
237
|
+
find('form input[type="submit"]').click
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should show a message" do
|
241
|
+
page.should have_content "Unsupported Query Type."
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
describe "and runs a query with a large response" do
|
246
|
+
before do
|
247
|
+
PublishMyData::SparqlQueryResult.any_instance.should_receive(:length).at_least(:once).and_return(10.megabytes)
|
248
|
+
@query = 'CONSTRUCT {?s ?p ?o} where {?s ?p ?o}'
|
249
|
+
page.fill_in 'query', with: @query
|
250
|
+
find('form input[type="submit"]').click
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should show a message" do
|
254
|
+
page.should have_content "The results for this query are too large to return."
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe "and running a query with a syntax error" do
|
259
|
+
before do
|
260
|
+
@query = 'SELECT * where ?s ?p ?o}'
|
261
|
+
page.fill_in 'query', with: @query
|
262
|
+
find('form input[type="submit"]').click
|
263
|
+
end
|
264
|
+
|
265
|
+
it "should show a synatax error message" do
|
266
|
+
page.should have_content(/There was a syntax error in your query/)
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
end
|
271
|
+
|
272
|
+
describe "calling a sparql query programmatically (non-html)" do
|
273
|
+
|
274
|
+
context "with a valid query" do
|
275
|
+
before do
|
276
|
+
@query = 'select * where {?s ?p ?o}'
|
277
|
+
end
|
278
|
+
|
279
|
+
context "for a relevant format" do
|
280
|
+
before do
|
281
|
+
page.driver.header 'Accept','application/json'
|
282
|
+
visit "/sparql?query=#{URI.encode(@query)}"
|
283
|
+
end
|
284
|
+
|
285
|
+
it_should_behave_like "a json response"
|
286
|
+
end
|
287
|
+
|
288
|
+
context "for an invalid format for this query type" do
|
289
|
+
before do
|
290
|
+
page.driver.header 'Accept','application/n-triples'
|
291
|
+
visit "/sparql?query=#{URI.encode(@query)}"
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'should render the default (in this case "text")' do
|
295
|
+
page.source.should == PublishMyData::SparqlQuery.new(@query, :text).execute.to_s
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
context "with an unknown query type" do
|
302
|
+
before do
|
303
|
+
@query = 'MUNGE * where {?s ?p ?o}'
|
304
|
+
page.driver.header 'Accept','text/plain'
|
305
|
+
visit "/sparql?query=#{URI.encode(@query)}"
|
306
|
+
end
|
307
|
+
|
308
|
+
it_should_behave_like 'a non-html error'
|
309
|
+
end
|
310
|
+
|
311
|
+
describe "and runs a query with a syntax error" do
|
312
|
+
before do
|
313
|
+
@query = 'SELECT * where ?s ?p ?o}'
|
314
|
+
page.driver.header 'Accept','text/plain'
|
315
|
+
visit "/sparql?query=#{URI.encode(@query)}"
|
316
|
+
end
|
317
|
+
|
318
|
+
it_should_behave_like 'a non-html error'
|
319
|
+
|
320
|
+
end
|
321
|
+
|
322
|
+
|
323
|
+
|
324
|
+
end
|