Commit 996e4d6f6d75a20d09a5d8bff3493f5f29a015e4

Authored by Victor Costa
2 parents fdb5634a c31de66e

Merge branch 'virtuoso_integration' into stable

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 &lt; 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 &lt; 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  
... ...