Commit 996e4d6f6d75a20d09a5d8bff3493f5f29a015e4
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Merge branch 'virtuoso_integration' into stable
Showing
5 changed files
with
44 additions
and
16 deletions
Show diff stats
plugins/virtuoso/lib/virtuoso_plugin.rb
... | ... | @@ -17,15 +17,25 @@ class VirtuosoPlugin < Noosfero::Plugin |
17 | 17 | end |
18 | 18 | |
19 | 19 | def virtuoso_client |
20 | - @virtuoso_client ||= RDF::Virtuoso::Repository.new("#{settings.virtuoso_uri}/sparql", :update_uri => "#{settings.virtuoso_uri}/sparql-auth", :username => settings.virtuoso_username, :password => settings.virtuoso_password, :auth_method => 'digest', :timeout => 30) | |
20 | + @virtuoso_client ||= virtuoso_client_builder(settings.virtuoso_uri, settings.virtuoso_username, settings.virtuoso_password) | |
21 | 21 | end |
22 | - | |
22 | + | |
23 | + def virtuoso_readonly_client | |
24 | + @virtuoso_readonly_client ||= virtuoso_client_builder(settings.virtuoso_uri, settings.virtuoso_readonly_username, settings.virtuoso_readonly_password) | |
25 | + end | |
26 | + | |
23 | 27 | def js_files |
24 | 28 | ['edit-server-list'] |
25 | - end | |
29 | + end | |
26 | 30 | |
27 | 31 | def stylesheet? |
28 | 32 | true |
29 | 33 | end |
30 | 34 | |
35 | + protected | |
36 | + | |
37 | + def virtuoso_client_builder(uri, username, password) | |
38 | + RDF::Virtuoso::Repository.new("#{uri}/sparql", :update_uri => "#{uri}/sparql-auth", :username => username, :password => password, :auth_method => 'digest', :timeout => 30) | |
39 | + end | |
40 | + | |
31 | 41 | end | ... | ... |
plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb
... | ... | @@ -37,7 +37,7 @@ class VirtuosoPlugin::TriplesTemplate < Article |
37 | 37 | |
38 | 38 | def template_content |
39 | 39 | begin |
40 | - results = plugin.virtuoso_client.query(query) | |
40 | + results = plugin.virtuoso_readonly_client.query(query) | |
41 | 41 | liquid_template = Liquid::Template.parse(template) |
42 | 42 | page = liquid_template.render('results' => results) |
43 | 43 | transform_html(page) | ... | ... |
plugins/virtuoso/test/unit/triples_template_test.rb
... | ... | @@ -10,8 +10,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase |
10 | 10 | |
11 | 11 | should 'evaluate template using query results' do |
12 | 12 | article.stubs(:plugin).returns(mock) |
13 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | |
14 | - article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | |
13 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) | |
14 | + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | |
15 | 15 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" |
16 | 16 | |
17 | 17 | assert_match /Hello World/, article.template_content |
... | ... | @@ -19,8 +19,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase |
19 | 19 | |
20 | 20 | should 'display error message when failed to execute the query' do |
21 | 21 | article.stubs(:plugin).returns(mock) |
22 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | |
23 | - article.plugin.virtuoso_client.expects(:query).raises(RuntimeError.new) | |
22 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) | |
23 | + article.plugin.virtuoso_readonly_client.expects(:query).raises(RuntimeError.new) | |
24 | 24 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" |
25 | 25 | |
26 | 26 | assert_equal "Failed to process the template", article.template_content |
... | ... | @@ -28,8 +28,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase |
28 | 28 | |
29 | 29 | should 'transform css into inline stylesheet' do |
30 | 30 | article.stubs(:plugin).returns(mock) |
31 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | |
32 | - article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | |
31 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) | |
32 | + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | |
33 | 33 | article.template = "{% for row in results %}<p>{{row.var}}</p>{% endfor %}" |
34 | 34 | article.stylesheet = "p {color: red}" |
35 | 35 | |
... | ... | @@ -40,8 +40,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase |
40 | 40 | |
41 | 41 | should 'do not allow js injection' do |
42 | 42 | article.stubs(:plugin).returns(mock) |
43 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | |
44 | - article.plugin.virtuoso_client.expects(:query).returns([{'var' => RDF::Literal.new('<script>alert("hello");</script>')}]) | |
43 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) | |
44 | + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => RDF::Literal.new('<script>alert("hello");</script>')}]) | |
45 | 45 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" |
46 | 46 | |
47 | 47 | assert_no_match /<script>/, article.template_content | ... | ... |
plugins/virtuoso/test/unit/virtuoso_plugin_test.rb
... | ... | @@ -4,13 +4,29 @@ class VirtuosoPluginTest < ActiveSupport::TestCase |
4 | 4 | |
5 | 5 | def setup |
6 | 6 | @environment = Environment.default |
7 | - @plugin = VirtuosoPlugin.new | |
7 | + @plugin = VirtuosoPlugin.new(self) | |
8 | 8 | end |
9 | 9 | |
10 | - attr_reader :plugin | |
10 | + attr_reader :plugin, :environment | |
11 | 11 | |
12 | 12 | should 'define a new content' do |
13 | 13 | assert_equal [VirtuosoPlugin::TriplesTemplate], plugin.content_types |
14 | 14 | end |
15 | 15 | |
16 | + should 'create a client for virtuoso using admin account' do | |
17 | + plugin.stubs(:settings).returns(mock) | |
18 | + plugin.settings.expects(:virtuoso_uri) | |
19 | + plugin.settings.expects(:virtuoso_username) | |
20 | + plugin.settings.expects(:virtuoso_password) | |
21 | + plugin.virtuoso_client | |
22 | + end | |
23 | + | |
24 | + should 'create a client for virtuoso using a read-only account' do | |
25 | + plugin.stubs(:settings).returns(mock) | |
26 | + plugin.settings.expects(:virtuoso_uri) | |
27 | + plugin.settings.expects(:virtuoso_readonly_username) | |
28 | + plugin.settings.expects(:virtuoso_readonly_password) | |
29 | + plugin.virtuoso_readonly_client | |
30 | + end | |
31 | + | |
16 | 32 | end | ... | ... |
plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb
... | ... | @@ -6,8 +6,10 @@ |
6 | 6 | |
7 | 7 | <strong> |
8 | 8 | <%= labelled_form_field _('Virtuoso URL:'), f.text_field(:virtuoso_uri) %> |
9 | - <%= labelled_form_field _('Virtuoso Username:'), f.text_field(:virtuoso_username) %> | |
10 | - <%= labelled_form_field _('Virtuoso Password:'), f.password_field(:virtuoso_password) %> | |
9 | + <%= labelled_form_field _('Virtuoso Admin Username:'), f.text_field(:virtuoso_username) %> | |
10 | + <%= labelled_form_field _('Virtuoso Admin Password:'), f.password_field(:virtuoso_password) %> | |
11 | + <%= labelled_form_field _('Virtuoso Read-Only Username:'), f.text_field(:virtuoso_readonly_username) %> | |
12 | + <%= labelled_form_field _('Virtuoso Read-Only Password:'), f.password_field(:virtuoso_readonly_password) %> | |
11 | 13 | <%= labelled_form_field _('DSpace URL:'), f.text_field(:dspace_uri) %> |
12 | 14 | </strong> |
13 | 15 | ... | ... |