link_list_block_test.rb
4.82 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
require_relative "../test_helper"
class LinkListBlockTest < ActiveSupport::TestCase
should 'default describe' do
assert_not_equal Block.description, LinkListBlock.description
end
should 'have field links' do
l = LinkListBlock.new
assert_respond_to l, :links
end
should 'default value of links' do
l = LinkListBlock.new
assert_equal [], l.links
end
should 'is editable' do
l = LinkListBlock.new
assert l.editable?
end
should 'list links' do
l = LinkListBlock.new(:links => [{:name => 'products', :address => '/cat/products'}])
assert_match /products/, l.content
end
should 'remove links with blank fields' do
l = LinkListBlock.new(:links => [{:name => 'categ', :address => '/address'}, {:name => '', :address => ''}])
l.save!
assert_equal [{:name => 'categ', :address => '/address'}], l.links
end
should 'replace {profile} with profile identifier' do
profile = Profile.new(:identifier => 'test_profile')
l = LinkListBlock.new(:links => [{:name => 'categ', :address => '/{profile}/address'}])
l.stubs(:owner).returns(profile)
assert_tag_in_string l.content, :tag => 'a', :attributes => {:href => '/test_profile/address'}
end
should 'replace {portal} with environment portal identifier' do
env = Environment.default
env.enable('use_portal_community')
portal = fast_create(Community, :identifier => 'portal-community', :environment_id => env.id)
env.portal_community = portal
env.save
stubs(:environment).returns(env)
l = LinkListBlock.new(:links => [{:name => 'categ', :address => '/{portal}/address'}])
l.stubs(:owner).returns(env)
assert_tag_in_string l.content, :tag => 'a', :attributes => {:href => '/portal-community/address'}
end
should 'not change address if no {portal} there' do
env = Environment.default
env.enable('use_portal_community')
portal = fast_create(Community, :identifier => 'portal-community', :environment_id => env.id)
env.portal_community = portal
env.save
stubs(:environment).returns(env)
l = LinkListBlock.new(:links => [{:name => 'categ', :address => '/address'}])
l.stubs(:owner).returns(env)
assert_tag_in_string l.content, :tag => 'a', :attributes => {:href => '/address'}
end
should 'handle /prefix if not already added' do
Noosfero.stubs(:root).returns('/prefix')
l = LinkListBlock.new(:links => [{:name => "foo", :address => '/bar'}] )
assert_tag_in_string l.content, :tag => 'a', :attributes => { :href => '/prefix/bar' }
end
should 'not add /prefix if already there' do
Noosfero.stubs(:root).returns('/prefix')
l = LinkListBlock.new(:links => [{:name => "foo", :address => '/prefix/bar'}] )
assert_tag_in_string l.content, :tag => 'a', :attributes => { :href => '/prefix/bar' }
end
should 'display options for icons' do
l = LinkListBlock.new
l.icons_options.each do |option|
assert_match(/<span title=\".+\" class=\"icon-.+\" onclick=\"changeIcon\(this, '.+'\)\"><\/span>/, option)
end
end
should 'link with icon' do
l = LinkListBlock.new
assert_match /class="icon-save"/, l.link_html({:icon => 'save', :name => 'test', :address => 'test.com'})
end
should 'no class without icon' do
l = LinkListBlock.new
assert_no_match /class="/, l.link_html({:icon => nil, :name => 'test', :address => 'test.com'})
end
should 'not add link to javascript' do
l = LinkListBlock.new(:links => [{:name => 'link', :address => "javascript:alert('Message test')"}])
assert_no_match /href="javascript/, l.link_html(l.links.first)
end
should 'not add link to onclick' do
l = LinkListBlock.new(:links => [{:name => 'link', :address => "#\" onclick=\"alert(123456)"}])
assert_no_tag_in_string l.link_html(l.links.first), :attributes => { :onclick => /.*/ }
end
should 'add protocol in front of incomplete external links' do
{'/local/link' => '/local/link', 'http://example.org' => 'http://example.org', 'example.org' => '//example.org'}.each do |input, output|
l = LinkListBlock.new(:links => [{:name => 'categ', :address => input}])
assert_tag_in_string l.content, :tag => 'a', :attributes => {:href => output}
end
end
should 'be able to update display setting' do
user = create_user('testinguser').person
box = fast_create(Box, :owner_id => user.id)
block = LinkListBlock.new(:display => 'never').tap do |b|
b.box = box
end
assert block.update_attributes!(:display => 'always')
block.reload
assert_equal 'always', block.display
end
should 'have options for links target' do
assert_equivalent LinkListBlock::TARGET_OPTIONS.map {|t|t[1]}, ['_self', '_blank', '_new']
end
should 'link with title' do
l = LinkListBlock.new
assert_match /title="mytitle"/, l.link_html({:name => 'mylink', :address => '/myaddress', :title => 'mytitle'})
end
end