test/rails_app/test/test_helper.rb in milia-0.3.2 vs test/rails_app/test/test_helper.rb in milia-0.3.7

- old
+ new

@@ -1,16 +1,124 @@ ENV["RAILS_ENV"] = "test" require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' + # Shoulda looks for RAILS_ROOT before loading shoulda/rails, and Rails 3.1 + # doesn't have that anymore. + +require 'shoulda/rails' + class ActiveSupport::TestCase - # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. - # - # Note: You'll currently still have to declare fixtures explicitly in integration tests - # -- they do not yet inherit this setting - fixtures :all - # Add more helper methods to be used by all tests here... + class << self + + def set_tenant( tenant ) + Thread.current[:tenant_id] = tenant.id + end + + def current_tenant() + return Thread.current[:tenant_id] + end + + def reset_tenant() + Thread.current[:tenant_id] = nil # starting point; no tenant + end + + def void_tenant() + Thread.current[:tenant_id] = 0 # an impossible tenant + end + + end # anon class + +# ----------------------------------------------------------------------------- +# setup_world -- sets up test rig for three tenants, multiple users, authors, etc +# ----------------------------------------------------------------------------- + def setup_world() + @Q1 = DateTime.new(2011,1,1,0,0,0) + @Q1end = DateTime.new(2011,3,31,23,59,59) + + @Q2 = DateTime.new(2011,4,1,0,0,0) + @Q2end = DateTime.new(2011,6,30,23,59,59) + + @Q3 = DateTime.new(2011,7,1,0,0,0) + @Q3end = DateTime.new(2011,9,30,23,59,59) + + @Q4 = DateTime.new(2011,10,1,0,0,0) + @Q4end = DateTime.new(2011,12,31,23,59,59) + + @max_worlds = 3 + @max_teams = 2 + @max_users = 3 + + @dates = [ + [ @Q1, @Q1end], + [ @Q2, @Q2end], + [ @Q3, @Q3end], + [ @Q4, @Q4end], + ] + + + # we'll name objects for each of three worlds to be created + @worlds = [ ] + + @max_worlds.times do |w| + @teams = [] + @cals = [] + @zines = [] + + world = Factory(:tenant) + @worlds << world + ActiveSupport::TestCase.set_tenant( world ) # set the tenant + + @max_teams.times do |i| + team = Factory(:team) + @teams << team + + cal = Factory(:calendar, :team => team, :cal_start => @dates[i % @dates.size][0], :cal_end => @dates[i % @dates.size][1]) + @cals << cal + + @zines << Factory(:zine, :calendar => cal) - include Devise::TestHelpers + end # calendars, teams, zines + + + @max_users.times do |i| + user = Factory(:user) + + if (w.zero? && i == 2) # special case for multiple tenants + @jemell = user # jemell will be in two different tenants + setup_author_posts(@jemell,1,1) + end + + # create extra authors w/o associated user + @max_teams.times do |j| + setup_author_posts(user,i,j) + user = nil + end + + end # users, authors, posts + +# pick a user and put in multiple tenants + if (!@jemell.nil? && w == 2) # last world + world.users << @jemell # add to current tenant users + setup_author_posts(@jemell,0,0) + end + + end # setup each world + + @mangoland = @worlds[0] + @limesublime = @worlds[1] + @islesmile = @worlds[2] -end + end # setup world for testing +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + +protected + def setup_author_posts(user,i,j) + author = Factory(:author, :user => user) + Factory(:team_asset, :author => author, :team => @teams[i % @max_teams]) + Factory(:post, :zine => @zines[j], :author => author) + end + + +end # class ActiveSupport::TestCase