lportal 1.0.18 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. data/ChangeLog +5 -9
  2. data/Rakefile +12 -1
  3. data/db_connection.rb +9 -0
  4. data/lib/country.rb +5 -0
  5. data/lib/group.rb +2 -1
  6. data/lib/web/layout.rb +2 -3
  7. data/lportal.rb +8 -17
  8. data/rails_gem_chooser.rb +87 -0
  9. data/test/unit/account_test.rb +7 -4
  10. data/test/unit/address_test.rb +22 -1
  11. data/test/unit/announcement/delivery_test.rb +24 -0
  12. data/test/unit/announcement/entry_test.rb +4 -2
  13. data/test/unit/blog_post_test.rb +16 -4
  14. data/test/unit/bookmark/entry_test.rb +11 -2
  15. data/test/unit/bookmark/folder_test.rb +20 -2
  16. data/test/unit/calevent_test.rb +9 -2
  17. data/test/unit/company_test.rb +93 -29
  18. data/test/unit/contact_test.rb +12 -5
  19. data/test/unit/country_test.rb +25 -0
  20. data/test/unit/dl_file_test.rb +12 -6
  21. data/test/unit/dl_folder_test.rb +33 -4
  22. data/test/unit/emailaddress_test.rb +28 -0
  23. data/test/unit/group_test.rb +54 -27
  24. data/test/unit/ig/folder_test.rb +4 -2
  25. data/test/unit/ig/image_test.rb +10 -2
  26. data/test/unit/image_test.rb +12 -4
  27. data/test/unit/journal/article_image_test.rb +8 -6
  28. data/test/unit/journal/article_resource_test.rb +9 -5
  29. data/test/unit/journal/article_test.rb +24 -17
  30. data/test/unit/journal/feed_test.rb +31 -4
  31. data/test/unit/journal/structure_test.rb +31 -4
  32. data/test/unit/journal/template_test.rb +31 -4
  33. data/test/unit/mb/category_test.rb +44 -8
  34. data/test/unit/mb/discussion_test.rb +10 -5
  35. data/test/unit/mb/message_flag_test.rb +28 -0
  36. data/test/unit/mb/message_test.rb +22 -13
  37. data/test/unit/mb/stats_user_test.rb +28 -0
  38. data/test/unit/mb/thread_test.rb +10 -5
  39. data/test/unit/organization_test.rb +32 -8
  40. data/test/unit/permission_test.rb +45 -6
  41. data/test/unit/phone_test.rb +13 -7
  42. data/test/unit/poll/question_test.rb +30 -4
  43. data/test/unit/ratings_stats_test.rb +16 -0
  44. data/test/unit/release_test.rb +5 -3
  45. data/test/unit/resource_code_test.rb +5 -2
  46. data/test/unit/resource_test.rb +40 -19
  47. data/test/unit/role_test.rb +17 -9
  48. data/test/unit/social_activity_test.rb +35 -0
  49. data/test/unit/social_relation_test.rb +29 -0
  50. data/test/unit/tag/asset_test.rb +29 -15
  51. data/test/unit/tag/entry_test.rb +14 -4
  52. data/test/unit/tag/property_test.rb +14 -6
  53. data/test/unit/user_test.rb +86 -57
  54. data/test/unit/usergroup_test.rb +8 -5
  55. data/test/unit/web/layout_set_test.rb +21 -6
  56. data/test/unit/web/layout_test.rb +51 -20
  57. data/test/unit/web/portlet_preferences_test.rb +10 -2
  58. data/test/unit/web/portlet_properties_test.rb +10 -2
  59. data/test/unit/web/portlet_test.rb +12 -3
  60. data/test/unit/web/typesettings_test.rb +7 -3
  61. data/test/unit/wiki/node_test.rb +3 -2
  62. data/test/unit/wiki/page_test.rb +48 -2
  63. data/version.rb +1 -1
  64. metadata +186 -105
data/ChangeLog CHANGED
@@ -1,13 +1,9 @@
1
- = 1.0.18
2
- - backported features from master:
3
- - fixed layout resources relation
4
- - comment on running tests from master branch
5
- - print lportal version on init
6
- - import fixture name postgresql hack to run master tests on 1.0
7
- - fix journal article links
8
- - using user.full as message.username if message has user
9
- - creation of MB::Thread
1
+ = 1.0.19
2
+ - Contry model
3
+ - backports from master branch
10
4
 
5
+ = 1.0.18
6
+ - backports from master branch
11
7
 
12
8
  = 1.0.17
13
9
  - introduced schema versions, automatic detection from the release_ table
data/Rakefile CHANGED
@@ -2,10 +2,21 @@ require 'rake'
2
2
  require 'rake/testtask'
3
3
  require 'rake/rdoctask'
4
4
 
5
+ ENV['RAILS_GEM_VERSION'] ||= '2.3.8' # FIXME: test suite does not work on older versions!
6
+
7
+ def info(msg)
8
+ STDOUT.puts msg
9
+ end
10
+
11
+ load 'tasks/env.rake'
12
+ load 'tasks/fixtures.rake'
13
+ load 'tasks/migrate.rake'
14
+ load 'tasks/database.rake'
15
+
5
16
  desc 'Default: run unit tests.'
6
17
  task :default => :test
7
18
 
8
- desc 'Test the liferay plugin.'
19
+ desc 'Test the lportal gem.'
9
20
  Rake::TestTask.new(:test) do |t|
10
21
  t.libs << 'lib'
11
22
  t.pattern = 'test/**/*_test.rb'
data/db_connection.rb ADDED
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ # Database
4
+ env = ENV['LPORTAL_ENV'] # 'test' or 'production' are valid
5
+
6
+ # Open database connection
7
+ database_configuration = YAML.load_file('config/database.yml')
8
+ ActiveRecord::Base.configurations = database_configuration
9
+ ActiveRecord::Base.establish_connection(database_configuration[env])
data/lib/country.rb ADDED
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ class Country < ActiveRecord::Base
3
+ set_table_name :country
4
+ set_primary_key :countryid
5
+ end
data/lib/group.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  # This model represents the user groups (communities) in the lportal database.
2
3
  class Group < ActiveRecord::Base
3
4
  set_table_name :group_
@@ -421,4 +422,4 @@ class Group < ActiveRecord::Base
421
422
  return portlet.preferences
422
423
  end
423
424
 
424
- end
425
+ end
data/lib/web/layout.rb CHANGED
@@ -168,9 +168,8 @@ module Web
168
168
  belongs_to :company,
169
169
  :foreign_key => 'companyid'
170
170
 
171
- def resources
172
- Resource.find(:all, :conditions => "primkey like '#{self.plid}'")
173
- end
171
+ has_many :resources,
172
+ :foreign_key => 'primkey'
174
173
 
175
174
  def layoutset
176
175
  Web::LayoutSet.find(:first, :conditions => "groupid=#{self.groupid} AND privatelayout=#{self.privatelayout}" )
data/lportal.rb CHANGED
@@ -5,18 +5,6 @@ file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
5
5
  this_dir = File.dirname(File.expand_path(file))
6
6
 
7
7
  require File.join(this_dir,'version')
8
- def info(msg)
9
- msg = 'lportal: %s' % msg
10
- STDOUT.puts(msg)
11
- end
12
-
13
- info 'version ' + Lportal::VERSION
14
-
15
- # this would be the proper place to load PostgreSQL hacks from 1.2 branch.
16
- # fixture hack imported from master branch would be useful while running tests,
17
- # however the test framework needs to be loaded before loading the fixture hack.
18
- #require File.join(this_dir,'active_record','fixtures.rb')
19
- # workaround: load that (^^) in RAILS_ROOT/test/test_helper.rb
20
8
 
21
9
  # set the migrations directory for Caterpillar
22
10
  LPORTAL_MIGRATIONS=File.expand_path(
@@ -46,14 +34,17 @@ end
46
34
 
47
35
  # define this database's schema version
48
36
  require File.join(this_dir,'schema')
49
- release = Release.current
50
- last_supported_release = 5201
51
- Lportal::Schema.buildnumber = (release ? release.buildnumber : last_supported_release)
37
+ Lportal::Schema.buildnumber =
38
+ begin
39
+ Release.current.buildnumber
40
+ rescue
41
+ nil
42
+ end
52
43
 
53
44
  msg = 'Using Liferay schema build %i, version %s' % [
54
45
  Lportal::Schema.buildnumber, Lportal::Schema.version]
55
46
 
56
- puts msg
57
-
58
47
  defined?(RAILS_DEFAULT_LOGGER) ?
59
48
  RAILS_DEFAULT_LOGGER.info(msg) : STDOUT.puts(msg)
49
+
50
+ puts 'ActiveRecord v.%s' % ActiveRecord::VERSION::STRING
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ #--
3
+ # (c) Copyright 2009,2010 Mikael Lammentausta
4
+ #
5
+ # See the file MIT-LICENSE included with the distribution for
6
+ # software license details.
7
+ #++
8
+
9
+ require 'rubygems'
10
+
11
+ # Rails gem chooser.
12
+ #
13
+ # Selects RAILS_GEM_VERSION from ENV, or from RAILS_ROOT/config/environment.rb.
14
+ # Returns nil otherwise.
15
+ class RailsGemChooser
16
+ class << self
17
+
18
+ def version(config_file=nil)
19
+ # detect from ENV
20
+ if ENV['RAILS_GEM_VERSION']
21
+ return ENV['RAILS_GEM_VERSION']
22
+ elsif not config_file
23
+ # load Rails config file
24
+ if RAILS_ROOT
25
+ config_file = File.join(
26
+ File.expand_path(RAILS_ROOT),
27
+ 'config',
28
+ 'environment.rb'
29
+ )
30
+ else
31
+ STDERR.puts 'Could not detect Rails version'
32
+ return nil
33
+ end
34
+ end
35
+ # don't attempt to load Rails if building a Rubygem..!
36
+ if $0[/gem$/] or !File.exist?(config_file)
37
+ return nil
38
+ else
39
+ # read from Rails config file
40
+ f=File.open(config_file)
41
+ config = f.read
42
+ f.close
43
+ rails_gem_version = config[/^RAILS_GEM_VERSION.*(\d\.\d\.\d)/,1]
44
+ #STDOUT.puts 'Detected Rails version %s from the config file %s' % [rails_gem_version,config_file]
45
+ return rails_gem_version
46
+ end
47
+ end
48
+
49
+ # Load a specific GEM
50
+ def __load_gem(require_name, gem_name, version)
51
+ version ? gem(gem_name, '= '+version) : gem(gem_name)
52
+ begin
53
+ require require_name
54
+ rescue LoadError
55
+ require gem_name
56
+ end
57
+ end
58
+
59
+ # Either define +rails_gem_version+ or +config_file+
60
+ def __load(rails_gem_version=nil,config_file=nil)
61
+ raise 'oops' if config_file and rails_gem_version
62
+
63
+ rails_gem_version ||= version(config_file) # also detects ENV['RAILS_GEM_VERSION']
64
+
65
+ #STDOUT.puts 'Loading Rails version %s' % rails_gem_version
66
+ # the gem without underline will be removed in Rails3..
67
+ #rails_gems = %w{ active_support action_pack active_record }
68
+ # except that with the underline divider the gem is not found ..
69
+ #rails_gems = %w{ activesupport actionpack activerecord }
70
+
71
+ rails_gems = {
72
+ # require name gem name
73
+ "active_support" => "activesupport",
74
+ "action_pack" => "actionpack",
75
+ "active_record" => "activerecord"
76
+ }
77
+
78
+ rails_gems.keys.each do |rg_key|
79
+ __load_gem(rg_key, rails_gems[rg_key], rails_gem_version)
80
+ end
81
+ require 'action_controller'
82
+
83
+ #STDOUT.puts 'Loaded Rails version %s' % Rails::VERSION::STRING
84
+ end
85
+
86
+ end
87
+ end
@@ -1,11 +1,13 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class AccountTest < ActiveSupport::TestCase
4
- fixtures :account_
6
+ fixtures [:Account_, :Company, :User_]
5
7
 
6
8
  def setup
7
9
  @accounts = Account.find :all
8
- assert !@accounts.empty?, "No accounts found"
10
+ flunk 'No accounts found' unless @accounts.any?
9
11
  end
10
12
 
11
13
  def test_company
@@ -16,7 +18,8 @@ class AccountTest < ActiveSupport::TestCase
16
18
 
17
19
  def test_user
18
20
  @accounts.each do |x|
19
- #assert_not_nil x.user
21
+ next if x.send(User.primary_key)==0
22
+ assert_not_nil x.user, 'Account %i belongs to no user' % x.id
20
23
  end
21
24
  end
22
25
 
@@ -1,4 +1,25 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class AddressTest < ActiveSupport::TestCase
6
+ fixtures [:Address, :Company, :User_]
7
+
8
+ def setup
9
+ @addresses = Address.all
10
+ flunk 'No addresses found' unless @addresses.any?
11
+ end
12
+
13
+ def test_company
14
+ @addresses.each do |x|
15
+ assert_not_nil x.company
16
+ end
17
+ end
18
+
19
+ def test_user
20
+ @addresses.each do |x|
21
+ next if x.send(User.primary_key)==0
22
+ assert_not_nil x.user
23
+ end
24
+ end
4
25
  end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
4
+
5
+ class Announcement::DeliveryTest < ActiveSupport::TestCase
6
+ fixtures :Company, :User_, :AnnouncementsDelivery
7
+
8
+ def setup
9
+ @deliveries = Announcement::Delivery.all
10
+ end
11
+
12
+ def test_company
13
+ @deliveries.each do |x|
14
+ assert_not_nil x.company, "#{x.id} belongs to no company"
15
+ end
16
+ end
17
+
18
+ def test_user
19
+ @deliveries.each do |x|
20
+ assert_not_nil x.user, "#{x.id} belongs to no user!"
21
+ end
22
+ end
23
+
24
+ end
@@ -1,7 +1,9 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class Announcement::EntryTest < ActiveSupport::TestCase
4
- fixtures :announcementsentry
6
+ fixtures :Company, :User_, :AnnouncementsEntry
5
7
 
6
8
  def setup
7
9
  @announcements = Announcement::Entry.all
@@ -1,14 +1,26 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class AssetTest < ActiveSupport::TestCase
4
6
  fixtures [
5
- :tagsasset,
6
- :resource_, :resourcecode,
7
- :blogsentry
7
+ :Company,
8
+ :TagsAsset,
9
+ :Resource_, :ResourceCode,
10
+ :BlogsEntry,
11
+ :User_,
12
+ :Group_
8
13
  ]
9
14
 
10
15
  def setup
11
16
  @posts = BlogPost.all
17
+ flunk 'No posts to test' unless @posts.any?
18
+ end
19
+
20
+ def test_company
21
+ @posts.each do |p|
22
+ assert_not_nil p.company
23
+ end
12
24
  end
13
25
 
14
26
  def test_user
@@ -1,10 +1,13 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class Bookmark::EntryTest < ActiveSupport::TestCase
4
- fixtures :bookmarksentry, :bookmarksfolder
6
+ fixtures :Company, :User_, :BookmarksEntry, :BookmarksFolder, :TagsAsset
5
7
 
6
8
  def setup
7
9
  @bookmarks = Bookmark::Entry.all
10
+ flunk 'No bookmark entries to test' unless @bookmarks.any?
8
11
  end
9
12
 
10
13
  def test_company
@@ -25,4 +28,10 @@ class Bookmark::EntryTest < ActiveSupport::TestCase
25
28
  end
26
29
  end
27
30
 
31
+ def test_asset
32
+ @bookmarks.each do |x|
33
+ assert_not_nil x.asset
34
+ end
35
+ end
36
+
28
37
  end
@@ -1,10 +1,13 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class Bookmark::FolderTest < ActiveSupport::TestCase
4
- fixtures :bookmarksentry, :bookmarksfolder
6
+ fixtures :Company, :Group_, :User_, :BookmarksEntry, :BookmarksFolder
5
7
 
6
8
  def setup
7
9
  @folders = Bookmark::Folder.all
10
+ flunk 'No bookmark folders to test' unless @folders.any?
8
11
  end
9
12
 
10
13
  def test_company
@@ -13,10 +16,25 @@ class Bookmark::FolderTest < ActiveSupport::TestCase
13
16
  end
14
17
  end
15
18
 
19
+ def test_group
20
+ @folders.each do |x|
21
+ assert_not_nil x.group
22
+ end
23
+ end
24
+
16
25
  def test_user
17
26
  @folders.each do |x|
18
27
  assert_not_nil x.user, "#{x.id} belongs to no user!"
19
28
  end
20
29
  end
21
30
 
31
+ def test_entries
32
+ @folders.each do |x|
33
+ assert_not_nil x.entries
34
+ x.entries.each do |e|
35
+ assert_equal x, e.folder
36
+ end
37
+ end
38
+ end
39
+
22
40
  end
@@ -1,7 +1,14 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class CaleventTest < ActiveSupport::TestCase
4
- fixtures :calevent
6
+ fixtures [
7
+ :Company,
8
+ :User_,
9
+ :Group_,
10
+ :CalEvent
11
+ ]
5
12
 
6
13
  def setup
7
14
  @events = Calevent.all
@@ -1,12 +1,15 @@
1
- require 'test_helper'
1
+ # encoding: utf-8
2
+
3
+ require 'test/test_helper'
2
4
 
3
5
  class CompanyTest < ActiveSupport::TestCase
4
6
  fixtures [
5
- :company,
6
- :user_, :group_,
7
- :account_, :organization_, :contact_,
8
- :layout, :layoutset,
9
- :resource_, :resourcecode
7
+ :Company,
8
+ :User_, :Group_,
9
+ :Account_, :Organization_, :Contact_,
10
+ :Layout, :LayoutSet,
11
+ :Resource_, :ResourceCode,
12
+ :Role_, :Users_Roles
10
13
  ]
11
14
 
12
15
  def setup
@@ -17,42 +20,37 @@ class CompanyTest < ActiveSupport::TestCase
17
20
  # each company must have an account
18
21
  def test_account
19
22
  @companies.each do |c|
20
- assert !c.account.nil?, "#{c.id} has no account"
23
+ assert_not_nil c.account, "#{c.id} has no account"
24
+ #assert_equal 0, c.account.send(User.primary_key) #?
21
25
  end
22
26
  end
23
27
 
24
- # each company must have contacts
28
+ # address is not required, not included in Liferay 5.2.3 dataset
29
+ # def test_address
30
+ # @companies.each do |c|
31
+ # #assert_not_nil c.address, "#{c.id} has no address"
32
+ # end
33
+ # end
34
+
25
35
  def test_contacts
26
36
  @companies.each do |c|
27
37
  assert !c.contacts.empty?, "#{c.id} has no contacts"
28
38
  end
29
39
  end
30
40
 
31
- # hmm?
32
- # def test_defaultuser
33
- # @companies.each do |c|
34
- # assert c.account.user.is_default?, "No default user for #{c.id}"
35
- # assert c.account.user.is_active?, "Default user account for #{c.id} is not active"
36
- # assert c.account.user.company == c, "Default user for #{c.id} has wrong company"
37
- # assert !c.account.user.account.nil?, "Default user for #{c.id} has no account"
38
- # end
39
- # end
40
-
41
- # each company must have a webid
42
- def test_webid
41
+ def test_users
43
42
  @companies.each do |c|
44
- assert_not_nil c.webid, "#{c.id} has no webid"
43
+ c.users.each do |u|
44
+ assert_not_nil u
45
+ end
45
46
  end
46
47
  end
47
48
 
48
- # each company must have a virtualhost
49
- def test_virtualhost
50
- layoutsets_virtualhosts=Web::LayoutSet.find(:all).map{|s| s.virtualhost }
49
+ def test_groups
51
50
  @companies.each do |c|
52
- assert_not_nil c.virtualhost, "#{c.id} has no virtualhost"
53
-
54
- # check that the virtualhost isn't duplicated in any layoutsets
55
- assert !layoutsets_virtualhosts.include?(c.virtualhost), "Duplicate virtualhost #{c.virtualhost} in layoutsets"
51
+ c.groups.each do |g|
52
+ assert_not_nil g
53
+ end
56
54
  end
57
55
  end
58
56
 
@@ -64,15 +62,37 @@ class CompanyTest < ActiveSupport::TestCase
64
62
  end
65
63
  end
66
64
 
65
+ def test_layoutsets
66
+ @companies.each do |c|
67
+ assert c.layoutsets.any?, 'Company %i has no layoutsets' % c.id
68
+ c.layoutsets.each do |ls|
69
+ assert_equal c, ls.company
70
+ end
71
+ end
72
+ end
73
+
74
+ # def test_resources
75
+ # @companies.each do |c|
76
+ # assert c.resources.any?, 'Company %i has no resources' % c.id
77
+ # end
78
+ # end
79
+
67
80
  def test_administrators
68
81
  @companies.each do |c|
82
+ adminrole = Role.find(:first, :conditions => "companyid=#{c.id} AND name='Administrator'")
83
+ assert_not_nil adminrole, 'No admin role found'
69
84
  assert c.administrators.size > 0, 'Company %s (%i) does not have administrators' % [c.webid, c.id]
70
85
  end
71
86
  end
72
87
 
73
88
  def test_guest
74
89
  @companies.each do |c|
75
- assert_not_nil c.guest, 'Company %i does not have a guest account' % c.id
90
+ assert_not_nil c.guest, 'Company %s does not have a guest account' % c.webid
91
+ assert c.guest.is_default?, "No default user for #{c.webid}"
92
+ assert c.guest.is_active?, "Default user account for #{c.webid} is not active"
93
+ assert c.guest.company == c, "Default user for #{c.webid} has wrong company"
94
+ # Liferay 5.2.3 has an account for Guest
95
+ #assert_nil c.guest.account, "Default user for #{c.webid} has an account"
76
96
  end
77
97
  end
78
98
 
@@ -82,4 +102,48 @@ class CompanyTest < ActiveSupport::TestCase
82
102
  end
83
103
  end
84
104
 
105
+
106
+ def test_personal_groups
107
+ @companies.each do |c|
108
+ assert_nothing_raised { c.personal_groups }
109
+ end
110
+ end
111
+
112
+ def test_public_groups
113
+ @companies.each do |c|
114
+ assert_nothing_raised { c.public_groups }
115
+ end
116
+ end
117
+
118
+ def test_open_groups
119
+ @companies.each do |c|
120
+ assert_nothing_raised { c.open_groups }
121
+ end
122
+ end
123
+
124
+ def test_private_groups
125
+ @companies.each do |c|
126
+ assert_nothing_raised { c.private_groups }
127
+ end
128
+ end
129
+
130
+
131
+ # each company must have a webid
132
+ def test_webid
133
+ @companies.each do |c|
134
+ assert_not_nil c.webid, "#{c.id} has no webid"
135
+ end
136
+ end
137
+
138
+ # each company must have a virtualhost
139
+ def test_virtualhost
140
+ layoutsets_virtualhosts=Web::LayoutSet.find(:all).map{|s| s.virtualhost }
141
+ @companies.each do |c|
142
+ assert_not_nil c.virtualhost, "#{c.id} has no virtualhost"
143
+
144
+ # check that the virtualhost isn't duplicated in any layoutsets
145
+ assert !layoutsets_virtualhosts.include?(c.virtualhost), "Duplicate virtualhost #{c.virtualhost} in layoutsets"
146
+ end
147
+ end
148
+
85
149
  end