lportal 1.0.9 → 1.0.17
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +71 -0
- data/MIT-LICENSE +20 -0
- data/README +6 -5
- data/Rakefile +23 -0
- data/init.rb +1 -1
- data/lib/acts/resourceful.rb +104 -0
- data/lib/company.rb +25 -0
- data/lib/group.rb +83 -29
- data/lib/journal/article.rb +8 -4
- data/lib/mb/category.rb +30 -59
- data/lib/mb/message.rb +24 -67
- data/lib/permission.rb +16 -0
- data/lib/release.rb +9 -0
- data/lib/resource.rb +19 -0
- data/lib/resource_code.rb +21 -1
- data/lib/role.rb +7 -27
- data/lib/tag/asset.rb +26 -4
- data/lib/user.rb +20 -23
- data/lib/web/layout.rb +134 -39
- data/lib/web/layout_set.rb +8 -4
- data/lib/web/portlet.rb +92 -20
- data/lib/web/portlet_preferences.rb +176 -13
- data/lib/web/portlet_properties.rb +32 -0
- data/lib/web/typesettings.rb +32 -7
- data/lportal.rb +30 -3
- data/migrations/20090101000001_add_sequences.rb +64 -0
- data/migrations/20090309000001_portlet_properties.rb +19 -0
- data/portlets.rb +76 -0
- data/schema.rb +34 -0
- data/test/unit/company_test.rb +21 -9
- data/test/unit/dl_file_test.rb +2 -1
- data/test/unit/group_test.rb +74 -16
- data/test/unit/journal/article_test.rb +15 -1
- data/test/unit/mb/category_test.rb +12 -15
- data/test/unit/mb/message_test.rb +3 -2
- data/test/unit/mb/thread_test.rb +1 -1
- data/test/unit/organization_test.rb +7 -2
- data/test/unit/phone_test.rb +2 -0
- data/test/unit/release_test.rb +25 -0
- data/test/unit/role_test.rb +7 -7
- data/test/unit/tag/asset_test.rb +59 -2
- data/test/unit/user_test.rb +73 -77
- data/test/unit/web/layout_set_test.rb +18 -1
- data/test/unit/web/layout_test.rb +191 -5
- data/test/unit/web/portlet_preferences_test.rb +314 -17
- data/test/unit/web/portlet_properties_test.rb +36 -0
- data/test/unit/web/portlet_test.rb +121 -19
- data/test/unit/web/typesettings_test.rb +24 -11
- data/version.rb +1 -2
- metadata +20 -6
- data/install.rb +0 -1
data/lib/web/typesettings.rb
CHANGED
@@ -3,6 +3,9 @@ module Web
|
|
3
3
|
class Typesettings
|
4
4
|
|
5
5
|
attr_accessor :template_id
|
6
|
+
|
7
|
+
# accepts a Hash, where the key tells the column
|
8
|
+
# { 1 => [Web::PortletPreferences, ...], 2 => [...], ... }
|
6
9
|
attr_accessor :portlets
|
7
10
|
|
8
11
|
# Takes either existing raw typesettings string (to be parsed) or a Hash, when clean Typesettings is created.
|
@@ -15,7 +18,7 @@ module Web
|
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
18
|
-
# Parses raw typesettings String into
|
21
|
+
# Parses raw typesettings String into an object (self).
|
19
22
|
def read(raw)
|
20
23
|
_x = raw.split(/\n/)
|
21
24
|
#puts _x.inspect
|
@@ -53,11 +56,11 @@ module Web
|
|
53
56
|
return s
|
54
57
|
end
|
55
58
|
|
56
|
-
# Accepts a
|
59
|
+
# Accepts a PortletProperties as the first parameter,
|
57
60
|
# the second parameter acceps a Hash {:column => nr} where nr is the column to place the portlet.
|
58
61
|
def method_missing(method, *args, &block)
|
59
62
|
begin
|
60
|
-
portlet = Web::
|
63
|
+
portlet = Web::PortletProperties.find_by_name(method.to_s)
|
61
64
|
return nil unless portlet
|
62
65
|
|
63
66
|
column = 1
|
@@ -81,18 +84,40 @@ module Web
|
|
81
84
|
def parse
|
82
85
|
columns = []
|
83
86
|
@portlets.each_pair do |column,portlets|
|
84
|
-
|
87
|
+
# handle several portlet types
|
88
|
+
portletids = []
|
89
|
+
portlets.each do |p|
|
90
|
+
next if p.nil?
|
91
|
+
if p.is_a?(String)
|
92
|
+
portletids << p
|
93
|
+
elsif (p.is_a?(Web::Portlet) or p.is_a?(Web::PortletPreferences))
|
94
|
+
portletids << p.portletid
|
95
|
+
else
|
96
|
+
raise 'Unknown portlet type %s' % p.class
|
97
|
+
end
|
98
|
+
end
|
99
|
+
columns << "column-%i=%s," % [column, portletids.join(",")]
|
85
100
|
end
|
86
101
|
columns.join("\n")
|
87
102
|
end
|
88
103
|
|
89
104
|
# Does this Typesettings include this portlet?
|
105
|
+
#
|
106
|
+
# This does not separate instantiated or non-instantiated portlets.
|
107
|
+
# Instantiated portlets do not theoretically match (TODO: test),
|
108
|
+
# as the portletid in the layout's typesettings contains the _INSTANCE_xxxx suffix.
|
109
|
+
#
|
110
|
+
#
|
90
111
|
# Params:
|
91
|
-
# - portlet (either name as String, or Web::
|
112
|
+
# - portlet (either name as String, or Web::PortletProperties)
|
92
113
|
def include?(args)
|
93
114
|
if args.is_a?(String)
|
94
|
-
p = Web::
|
95
|
-
elsif args.is_a?(Web::
|
115
|
+
p = Web::PortletProperties.find_by_name args
|
116
|
+
elsif args.is_a?(Web::PortletProperties)
|
117
|
+
p = args
|
118
|
+
elsif args.is_a?(Web::PortletPreferences)
|
119
|
+
p = args
|
120
|
+
elsif args.is_a?(Web::Portlet)
|
96
121
|
p = args
|
97
122
|
else
|
98
123
|
raise 'Invalid input class: %s' % args.class
|
data/lportal.rb
CHANGED
@@ -4,10 +4,23 @@ require 'active_record'
|
|
4
4
|
file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
|
5
5
|
this_dir = File.dirname(File.expand_path(file))
|
6
6
|
|
7
|
-
require this_dir
|
7
|
+
require File.join(this_dir,'version')
|
8
8
|
|
9
|
-
#
|
10
|
-
|
9
|
+
# set the migrations directory for Caterpillar
|
10
|
+
LPORTAL_MIGRATIONS=File.expand_path(
|
11
|
+
File.join(this_dir,'migrations')
|
12
|
+
)
|
13
|
+
|
14
|
+
# make models able to act resourceful
|
15
|
+
require File.join(this_dir,'lib','acts','resourceful')
|
16
|
+
ActiveRecord::Base.class_eval { include Acts::Resourceful }
|
17
|
+
|
18
|
+
# Define Liferay (asset viewer) portlets.
|
19
|
+
# This class is for defining specific portlet functionality.
|
20
|
+
require File.join(this_dir,'portlets')
|
21
|
+
|
22
|
+
# include all models from lib
|
23
|
+
Find.find(File.join(this_dir,'lib')) do |file|
|
11
24
|
if FileTest.directory?(file)
|
12
25
|
if File.basename(file) == "deprecated"
|
13
26
|
Find.prune # Don't look any further into this directory.
|
@@ -18,3 +31,17 @@ Find.find(this_dir+'/lib') do |file|
|
|
18
31
|
require file if file[/.rb$/]
|
19
32
|
end
|
20
33
|
end
|
34
|
+
|
35
|
+
# define this database's schema version
|
36
|
+
require File.join(this_dir,'schema')
|
37
|
+
release = Release.current
|
38
|
+
last_supported_release = 5201
|
39
|
+
Lportal::Schema.buildnumber = (release ? release.buildnumber : last_supported_release)
|
40
|
+
|
41
|
+
msg = 'Using Liferay schema build %i, version %s' % [
|
42
|
+
Lportal::Schema.buildnumber, Lportal::Schema.version]
|
43
|
+
|
44
|
+
puts msg
|
45
|
+
|
46
|
+
defined?(RAILS_DEFAULT_LOGGER) ?
|
47
|
+
RAILS_DEFAULT_LOGGER.info(msg) : STDOUT.puts(msg)
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class AddSequences < ActiveRecord::Migration
|
2
|
+
@@tables = [
|
3
|
+
Account,
|
4
|
+
Address,
|
5
|
+
Announcement::Delivery,
|
6
|
+
Announcement::Entry,
|
7
|
+
Contact,
|
8
|
+
Group,
|
9
|
+
Permission,
|
10
|
+
Phone,
|
11
|
+
ResourceCode,
|
12
|
+
Resource,
|
13
|
+
Role,
|
14
|
+
User,
|
15
|
+
MB::Category,
|
16
|
+
MB::Discussion,
|
17
|
+
MB::Message,
|
18
|
+
MB::MessageFlag,
|
19
|
+
MB::StatsUser,
|
20
|
+
MB::Thread,
|
21
|
+
RatingsStats,
|
22
|
+
SocialActivity,
|
23
|
+
SocialRelation,
|
24
|
+
Tag::Asset,
|
25
|
+
Tag::Entry,
|
26
|
+
Tag::Property,
|
27
|
+
Web::Layout,
|
28
|
+
Web::LayoutSet,
|
29
|
+
Web::PortletPreferences,
|
30
|
+
Web::Portlet
|
31
|
+
]
|
32
|
+
|
33
|
+
def self.up
|
34
|
+
STDOUT.puts 'This migration does not do anything.'
|
35
|
+
STDOUT.puts 'The process is not refined properly yet, and could be quite disastrous if reverted unappropriately.'
|
36
|
+
STDOUT.puts 'If you are sure you need the sequences, copy this file to db/migrate and modify it.'
|
37
|
+
STDOUT.puts __FILE__
|
38
|
+
|
39
|
+
start = 8400000 # bigint = 8^8 bytes = 16 million bits, this is halfway up the possible range, rounded up
|
40
|
+
sql = ""
|
41
|
+
@@tables.each do |model|
|
42
|
+
table = model.table_name
|
43
|
+
primkey = model.primary_key
|
44
|
+
seq = table+'_'+primkey+'_seq'
|
45
|
+
sql += "CREATE SEQUENCE #{seq} START #{start}; ALTER TABLE #{table} ALTER #{primkey} SET default nextval('#{seq}');"
|
46
|
+
end
|
47
|
+
|
48
|
+
# To activate, uncomment this line.
|
49
|
+
#ActiveRecord::Base.connection.execute(sql)
|
50
|
+
end
|
51
|
+
|
52
|
+
# This is VERY DANGEROUS and may lead to breakage.
|
53
|
+
def self.down
|
54
|
+
STDOUT.puts 'Nothing will happen.'
|
55
|
+
# sql = ""
|
56
|
+
# @@tables.each do |model|
|
57
|
+
# table = model.table_name
|
58
|
+
# primkey = model.primary_key
|
59
|
+
# seq = table+'_'+primkey+'_seq'
|
60
|
+
# sql += "ALTER TABLE #{table} ALTER #{primkey} DROP default; DROP SEQUENCE #{seq};"
|
61
|
+
# end
|
62
|
+
# ActiveRecord::Base.connection.execute(sql)
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class PortletProperties < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
# dealing with tables that have no id is a pain with ActiveRecord,
|
4
|
+
# and using the 'id' column for portletid does not work either,
|
5
|
+
# ActiveRecord does not let that column to be set manually.
|
6
|
+
create_table :portletproperties do |t|
|
7
|
+
t.column :portletid, :string, :null => false
|
8
|
+
t.column :name, :string, :null => false
|
9
|
+
t.column :title, :string, :null => false
|
10
|
+
t.column :instanceable, :boolean, :null => false, :default => true
|
11
|
+
end
|
12
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS portlet_names")
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :portletproperties
|
17
|
+
#ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS portletproperties")
|
18
|
+
end
|
19
|
+
end
|
data/portlets.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Lportal # :nodoc:
|
2
|
+
# Liferay portlet functionalities.
|
3
|
+
# These are accessable in Web::PortletPreferences.
|
4
|
+
#
|
5
|
+
# Adds +path+, that is based on the name of the portlet.
|
6
|
+
module Portlets
|
7
|
+
def self.included(base)
|
8
|
+
#base.extend(ClassMethods)
|
9
|
+
end
|
10
|
+
|
11
|
+
include ERB::Util # for u()
|
12
|
+
|
13
|
+
def redirect
|
14
|
+
u('javascript: history.go(-1)')
|
15
|
+
end
|
16
|
+
|
17
|
+
# params:
|
18
|
+
# - content_id or asset
|
19
|
+
def asset_publisher_path(params)
|
20
|
+
asset = params[:asset]
|
21
|
+
raise 'No asset' unless asset
|
22
|
+
raise ('Asset %i has no resource' % asset.id) unless asset.resource
|
23
|
+
content_id = asset.resource.id
|
24
|
+
_path = [
|
25
|
+
'-',
|
26
|
+
'asset_publisher',
|
27
|
+
self.instance_id,
|
28
|
+
'content',
|
29
|
+
content_id
|
30
|
+
].join('/')
|
31
|
+
'%s/%s?redirect=%s' % [self.layout.path, _path, redirect]
|
32
|
+
end
|
33
|
+
|
34
|
+
# params:
|
35
|
+
# - asset_id
|
36
|
+
def tagged_content_path(params)
|
37
|
+
asset = params[:asset]
|
38
|
+
raise 'No asset' unless asset
|
39
|
+
|
40
|
+
params = "?p_p_id=#{portletid}"+\
|
41
|
+
"&p_p_lifecycle=0"+\
|
42
|
+
"&p_p_state=normal"+\
|
43
|
+
"&p_p_mode=view"+\
|
44
|
+
"&_#{portletid}_struts_action=%2Ftagged_content%2Fview_content"+\
|
45
|
+
"&_#{portletid}_assetId=#{asset.id}"+\
|
46
|
+
"&_#{portletid}_redirect=#{redirect}"
|
47
|
+
# &p_p_col_id=column-1&p_p_col_count=1
|
48
|
+
path = self.layout.path + params
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# Meta method that calls the actual method that yields the path to the portlet instance.
|
53
|
+
# In essence this is a singleton method based on the name of the portlet.
|
54
|
+
def path(args={})
|
55
|
+
unless self.name
|
56
|
+
logger.warn '%s has no name' % self.class
|
57
|
+
return ''
|
58
|
+
end
|
59
|
+
unless self.layout
|
60
|
+
logger.warn 'No layout given'
|
61
|
+
return ''
|
62
|
+
end
|
63
|
+
|
64
|
+
logger.debug 'Generating path for portlet %s' % self.name
|
65
|
+
method = self.name+'_path'
|
66
|
+
if self.respond_to?(method)
|
67
|
+
return self.send(method, args)
|
68
|
+
else
|
69
|
+
# unknown path
|
70
|
+
logger.warn 'Unknown path requested for portlet %s' % self.name
|
71
|
+
return ''
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
data/schema.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Lportal
|
2
|
+
# The schema version of the Liferay database.
|
3
|
+
# The +buildnumber+ class variable is set when lportal is loaded,
|
4
|
+
# and is a Fixnum of form 5201, for example.
|
5
|
+
# the +version+ method is a String of form '5.2.x'.
|
6
|
+
class Schema
|
7
|
+
@@BUILD = nil
|
8
|
+
@@VERSION = nil
|
9
|
+
|
10
|
+
def self.buildnumber
|
11
|
+
@@BUILD
|
12
|
+
end
|
13
|
+
|
14
|
+
# setter for buildnumber
|
15
|
+
def self.buildnumber=(val)
|
16
|
+
@@BUILD = val
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.version
|
20
|
+
unless @@VERSION
|
21
|
+
return nil if @@BUILD.nil?
|
22
|
+
@@VERSION = '%s.%s.%d' % @@BUILD.to_s.scan(/(.)(.)(..)/).flatten
|
23
|
+
end
|
24
|
+
return @@VERSION
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.version=(val)
|
28
|
+
@@VERSION = val
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
data/test/unit/company_test.rb
CHANGED
@@ -2,11 +2,17 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class CompanyTest < ActiveSupport::TestCase
|
4
4
|
fixtures [
|
5
|
+
:company,
|
6
|
+
:user_, :group_,
|
5
7
|
:account_, :organization_, :contact_,
|
6
8
|
:layout, :layoutset,
|
7
9
|
:resource_, :resourcecode
|
8
10
|
]
|
9
11
|
|
12
|
+
def setup
|
13
|
+
@companies = Company.all
|
14
|
+
flunk 'No companies in database!' unless @companies.any?
|
15
|
+
end
|
10
16
|
|
11
17
|
# each company must have an account
|
12
18
|
def test_account
|
@@ -50,24 +56,30 @@ class CompanyTest < ActiveSupport::TestCase
|
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
53
|
-
# each company must have organization(s)
|
54
59
|
def test_organizations
|
55
60
|
@companies.each do |c|
|
56
|
-
|
61
|
+
c.organizations.each do |o|
|
62
|
+
assert_not_nil o
|
63
|
+
end
|
57
64
|
end
|
58
65
|
end
|
59
66
|
|
60
67
|
def test_administrators
|
61
68
|
@companies.each do |c|
|
62
|
-
assert
|
69
|
+
assert c.administrators.size > 0, 'Company %s (%i) does not have administrators' % [c.webid, c.id]
|
63
70
|
end
|
64
71
|
end
|
65
72
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
73
|
+
def test_guest
|
74
|
+
@companies.each do |c|
|
75
|
+
assert_not_nil c.guest, 'Company %i does not have a guest account' % c.id
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_guest_group
|
80
|
+
@companies.each do |c|
|
81
|
+
assert_not_nil c.guest_group
|
82
|
+
end
|
83
|
+
end
|
72
84
|
|
73
85
|
end
|
data/test/unit/dl_file_test.rb
CHANGED
data/test/unit/group_test.rb
CHANGED
@@ -3,23 +3,37 @@ require 'test_helper'
|
|
3
3
|
class GroupTest < ActiveSupport::TestCase
|
4
4
|
fixtures [
|
5
5
|
:organization_,
|
6
|
+
:groups_orgs,
|
6
7
|
:users_orgs,
|
7
8
|
:usergroup,
|
8
9
|
:role_,
|
9
10
|
:classname_
|
10
11
|
]
|
12
|
+
# to test asset_viewer_portlet, these are required
|
13
|
+
fixtures << [
|
14
|
+
:portlet, :portletproperties, :portletpreferences,
|
15
|
+
:layout,
|
16
|
+
:tagsasset,
|
17
|
+
:igimage,
|
18
|
+
:mbmessage,
|
19
|
+
:blogsentry,
|
20
|
+
:wikipage,
|
21
|
+
:bookmarksentry,
|
22
|
+
:journalarticle,
|
23
|
+
:dlfileentry
|
24
|
+
]
|
11
25
|
|
12
26
|
def setup
|
13
|
-
@groups = Group.
|
14
|
-
|
27
|
+
@groups = Group.all
|
28
|
+
flunk 'No groups in database!' unless @groups.any?
|
15
29
|
|
16
30
|
@company = Company.first
|
17
|
-
flunk 'No
|
31
|
+
flunk 'No companies in database!' unless @company
|
18
32
|
end
|
19
33
|
|
20
34
|
def test_create_group
|
35
|
+
flunk ('No administrators in Company %i!' % @company.id) unless @company.administrators.any?
|
21
36
|
user = @company.administrators.first
|
22
|
-
flunk 'No user!' unless user
|
23
37
|
|
24
38
|
# Type Group
|
25
39
|
group = Group.create(
|
@@ -47,7 +61,7 @@ class GroupTest < ActiveSupport::TestCase
|
|
47
61
|
|
48
62
|
# Permissions to administrators
|
49
63
|
group.company.administrators.each do |user|
|
50
|
-
assert user.
|
64
|
+
assert user.permissions.include?(p)
|
51
65
|
end
|
52
66
|
end
|
53
67
|
end
|
@@ -92,14 +106,14 @@ class GroupTest < ActiveSupport::TestCase
|
|
92
106
|
# each group must belong to a company
|
93
107
|
def test_company
|
94
108
|
@groups.each do |x|
|
95
|
-
|
109
|
+
assert_not_nil x.company
|
96
110
|
end
|
97
111
|
end
|
98
112
|
|
99
113
|
def test_organizations
|
100
114
|
@groups.each do |x|
|
101
115
|
x.organizations.each do |org|
|
102
|
-
|
116
|
+
assert_not_nil org
|
103
117
|
end
|
104
118
|
end
|
105
119
|
end
|
@@ -107,7 +121,7 @@ class GroupTest < ActiveSupport::TestCase
|
|
107
121
|
def test_roles
|
108
122
|
@groups.each do |x|
|
109
123
|
x.roles.each do |role|
|
110
|
-
|
124
|
+
assert_not_nil role
|
111
125
|
end
|
112
126
|
end
|
113
127
|
end
|
@@ -115,7 +129,7 @@ class GroupTest < ActiveSupport::TestCase
|
|
115
129
|
def test_permissions
|
116
130
|
@groups.each do |x|
|
117
131
|
x.permissions.each do |permission|
|
118
|
-
|
132
|
+
assert_not_nil permission
|
119
133
|
end
|
120
134
|
end
|
121
135
|
end
|
@@ -123,22 +137,28 @@ class GroupTest < ActiveSupport::TestCase
|
|
123
137
|
def test_usergroups
|
124
138
|
@groups.each do |x|
|
125
139
|
x.usergroups.each do |usergroup|
|
126
|
-
|
140
|
+
assert_not_nil usergroup
|
127
141
|
end
|
128
142
|
end
|
129
143
|
end
|
130
144
|
|
131
|
-
|
132
|
-
|
145
|
+
# # each group must belong to a creator
|
146
|
+
# def test_creator
|
147
|
+
# @groups.each do |x|
|
148
|
+
# # assert !x.creator.nil?, "#{x.id} has no creator"
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
|
152
|
+
def test_mbcategories
|
133
153
|
@groups.each do |x|
|
134
|
-
|
154
|
+
assert_not_nil x.mbcategories
|
135
155
|
end
|
136
156
|
end
|
137
157
|
|
138
158
|
# each group must have a friendlyurl
|
139
159
|
def test_friendlyurl
|
140
160
|
@groups.each do |x|
|
141
|
-
|
161
|
+
assert_not_nil x.friendlyurl
|
142
162
|
end
|
143
163
|
end
|
144
164
|
|
@@ -152,6 +172,24 @@ class GroupTest < ActiveSupport::TestCase
|
|
152
172
|
end
|
153
173
|
end
|
154
174
|
|
175
|
+
def test_public_layouts
|
176
|
+
@groups.each do |g|
|
177
|
+
g.public_layouts.each do |l|
|
178
|
+
assert_equal g, l.group
|
179
|
+
assert l.is_public?
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_private_layouts
|
185
|
+
@groups.each do |g|
|
186
|
+
g.private_layouts.each do |l|
|
187
|
+
assert_equal g, l.group
|
188
|
+
assert l.is_private?
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
155
193
|
def test_members
|
156
194
|
@groups.each do |x|
|
157
195
|
if x.owner.kind_of?(Organization)
|
@@ -165,20 +203,40 @@ class GroupTest < ActiveSupport::TestCase
|
|
165
203
|
if x.private_layouts.any?
|
166
204
|
assert_not_nil x.path(:private)
|
167
205
|
else
|
168
|
-
|
206
|
+
assert_equal '', x.path(:private)
|
169
207
|
end
|
170
208
|
if x.public_layouts.any?
|
171
209
|
assert_not_nil x.path(:public)
|
172
210
|
else
|
173
|
-
|
211
|
+
assert_equal '', x.path(:public)
|
174
212
|
end
|
175
213
|
end
|
176
214
|
end
|
177
215
|
|
216
|
+
def test_asset_viewer_portlet
|
217
|
+
@groups.each do |group|
|
218
|
+
asset = Tag::Asset.first
|
219
|
+
flunk 'No asset to test on' unless asset
|
220
|
+
|
221
|
+
portletpreferences = group.asset_viewer_portlet
|
222
|
+
assert_equal Web::PortletPreferences, portletpreferences.class
|
223
|
+
assert_not_nil portletpreferences.path(:asset => asset)
|
224
|
+
|
225
|
+
assert_not_nil portletpreferences.layout
|
226
|
+
assert_equal group, portletpreferences.layout.group
|
227
|
+
assert_equal group.companyid, portletpreferences.layout.companyid
|
228
|
+
|
229
|
+
# 2nd time the portlet should be retrieved from DB
|
230
|
+
group.reload
|
231
|
+
assert_equal portletpreferences, group.asset_viewer_portlet
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
178
235
|
# def test_resource
|
179
236
|
# @groups.each do |x|
|
180
237
|
# # assert !x.resource.nil?, "#{x.id} has no resource"
|
181
238
|
# end
|
182
239
|
# end
|
183
240
|
|
241
|
+
|
184
242
|
end
|
@@ -4,7 +4,9 @@ class Journal::ArticleTest < ActiveSupport::TestCase
|
|
4
4
|
fixtures [
|
5
5
|
:journalarticle,
|
6
6
|
:journalarticleresource,
|
7
|
-
:tagsasset
|
7
|
+
:tagsasset,
|
8
|
+
:tagsproperty,
|
9
|
+
:portlet
|
8
10
|
]
|
9
11
|
|
10
12
|
def setup
|
@@ -48,5 +50,17 @@ class Journal::ArticleTest < ActiveSupport::TestCase
|
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
53
|
+
# def test_properties
|
54
|
+
# @articles.each do |x|
|
55
|
+
# assert_not_nil x.properties
|
56
|
+
# assert !x.properties.empty?
|
57
|
+
# end
|
58
|
+
# end
|
59
|
+
|
60
|
+
def test_path
|
61
|
+
@articles.each do |x|
|
62
|
+
assert_not_nil x.path
|
63
|
+
end
|
64
|
+
end
|
51
65
|
|
52
66
|
end
|
@@ -8,13 +8,13 @@ class MB::CategoryTest < ActiveSupport::TestCase
|
|
8
8
|
:mbthread,
|
9
9
|
:group_,
|
10
10
|
:layout,
|
11
|
-
:
|
11
|
+
:portletproperties
|
12
12
|
]
|
13
13
|
|
14
|
+
|
14
15
|
def setup
|
15
16
|
@categories = MB::Category.all
|
16
|
-
|
17
|
-
@categories.delete @rootcategory
|
17
|
+
flunk 'No categories to test' unless @categories.any?
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_create
|
@@ -62,46 +62,43 @@ class MB::CategoryTest < ActiveSupport::TestCase
|
|
62
62
|
p = Permission.find(:first,
|
63
63
|
:conditions => "companyid=#{category.companyid} AND actionid='#{actionid}' AND resourceid=#{resource.id}")
|
64
64
|
assert_not_nil p
|
65
|
-
assert user.
|
65
|
+
assert user.permissions.include?(p)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
69
|
# each article must belong to a company
|
70
70
|
def test_company
|
71
71
|
@categories.each do |x|
|
72
|
-
assert_not_nil x.company, "#{x.id} belongs to no company"
|
72
|
+
assert_not_nil x.company, "Category #{x.id} belongs to no company"
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
76
|
def test_group
|
77
77
|
@categories.each do |x|
|
78
|
-
assert_not_nil x.group, "#{x.id} belongs to no group!"
|
78
|
+
assert_not_nil x.group, "Category #{x.id} belongs to no group!"
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
def test_user
|
83
83
|
@categories.each do |x|
|
84
|
-
assert_not_nil x.user, "#{x.id} belongs to no user!"
|
84
|
+
assert_not_nil x.user, "Category #{x.id} belongs to no user!"
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
def test_parent
|
89
89
|
@categories.each do |x|
|
90
90
|
unless x.parentcategoryid == 0 then
|
91
|
-
assert_not_nil x.parent, "#{x.id} refers to parent category #{x.parentcategoryid} which does not exist"
|
91
|
+
assert_not_nil x.parent, "Category #{x.id} refers to parent category #{x.parentcategoryid} which does not exist"
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
def test_root
|
97
|
-
assert_equal 0, @rootcategory.companyid
|
98
|
-
assert_equal 0, @rootcategory.groupid
|
99
|
-
assert_equal 0, @rootcategory.userid
|
100
|
-
assert_equal 0, @rootcategory.parentcategoryid
|
101
|
-
end
|
102
|
-
|
103
96
|
def test_path
|
104
97
|
@categories.each do |x|
|
98
|
+
unless x.group
|
99
|
+
STDERR.puts 'WARN: message_boards category %i does not belong to a group' % x.id
|
100
|
+
next
|
101
|
+
end
|
105
102
|
if x.group.layouts_include?('message_boards')
|
106
103
|
assert_not_nil x.path
|
107
104
|
else
|