blob: 574a3fbbcd11f34cffd0f721b24dd1b509975a49 [file] [log] [blame]
require 'test_helper'
class EpfcLibraryTest < ActiveSupport::TestCase
def setup
teardown
end
def teardown
[ENV['EPFWIKI_SITES_PATH'], ENV['EPFWIKI_WIKIS_PATH']].each do |p|
FileUtils.rm_r(p) if File.exists?(p)
FileUtils.makedirs(p)
end
end
# Shows:
# 1. To create a new BaselineProcess we have to specifiy: title, folder, baseline, user
# 2. We cannot create a BaselineProcess from non-existing folder
# 3. We can create a BaselineProcess
# 4. We cannot use a folder twice (create two or more sites from the same folder)
# 5. We can scan the content
test "New baseline process" do
@george = Factory(:user, :name => 'George Shapiro', :password => 'secret', :admin => 'C')
create_oup_20060721
BaselineProcess.destroy_all
# 1.
site = BaselineProcess.new
assert !site.save
assert_equal "Folder can't be blank, Folder does not seem to contain a valid site, no index.htm was found, Title can't be blank, User can't be blank", site.errors.full_messages.sort.join(", ")
# 2.
site_count = Site.count
site = BaselineProcess.new(:folder => 'nonexistingfolder', :title => 'OUP_20060721', :user_id => @george.id)
assert !site.save
assert_equal 'Folder doesn\'t exist, Folder does not seem to contain a valid site, no index.htm was found', site.errors.full_messages.join(', ')
assert_equal site_count, Site.count
# 3.
site = BaselineProcess.new(:folder => 'oup_20060721', :title => 'oup_20060721', :user_id => @george.id)
#assert
site.save
assert_equal '', site.errors.full_messages.join(', ')
assert_equal site_count + 1, Site.count
site = Site.find(site.id)
# 4.
site = BaselineProcess.new(:folder => 'oup_20060721', :title => 'oup_20060721', :user_id => @george.id)
assert !site.save
assert_equal 'Folder was already used to create a baseline process', site.errors.full_messages.join(', ')
assert_equal site_count + 1, Site.count
# 5.
sites = BaselineProcess.find_2scan
assert_equal 1, sites.size
site = sites[0]
assert_equal ['oup_20060721', 'oup_20060721'], [site.title, site.folder]
assert site.content_scanned_on.nil?
site.scan4content
assert_not_nil site.content_scanned_on
assert_equal 617, site.pages.size
#site.versions[0..3].each do |v|
# assert_equal [true, 0, false, false, false, false], [v.base_version?, v.version, v.rel_path.nil?, v.wiki_id.nil?, v.user_id.nil?, v.page_id.nil?]
#end
site.pages[0..3].each do |p|
assert_equal [false, false, 'BaselineProcessPage', 'EPFC', 'N.A.', false, false, false, false,false,false], [p.rel_path.nil?, p.presentation_name.nil?, p.type, p.tool,
p.status, p.uma_type.nil?, p.filename.nil?, p.uma_name.nil?, p.body_tag.nil?, p.treebrowser_tag.nil?, p.copyright_tag.nil?]
end
end
# Shows:
# 1. we cannot unzip same content twice
test "Upload" do
@george = Factory(:user, :name => 'George Shapiro', :password => 'secret', :admin => 'C')
@oup_20060721 = create_oup_20060721
# 1
assert_raise(RuntimeError){@oup_20060721.unzip_upload}
names = ['OpenUP_Basic_published-0.9-W-20070316']
assert_equal 'openup_basic_published09w20070316', Utils.valid_filename(names[0])
end
# Shows:
# 1. To create a Wiki we need to specifiy a folder, title and user
# 2. We create a Wiki
# 3. We try to schedule an Update of the Wiki but we mix things up
# 4. We schedule an Update of the Wiki with a BaselineProcess
# 5. The Wiki folder should be unique
# 6. We cannot wikify a BaselineProcess
# 7. We can Wikify a Wiki
test "New wiki" do
@emails = ActionMailer::Base::deliveries
@emails.clear
@george = Factory(:user, :name => 'George Shapiro', :password => 'secret', :admin => 'C')
@oup_20060721 = create_oup_20060721
# 1.
sites_count, update_count = Site.count, Update.count
wiki = Wiki.new#(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => @george.id)
assert !wiki.save
assert_equal "Folder can't be blank, Title can't be blank, User can't be blank", wiki.errors.full_messages.sort.join(', ')
assert_equal [sites_count, update_count], [Site.count, Update.count]
# 2.
wiki = Wiki.new(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => @george.id)
FileUtils.remove_dir(wiki.path) if File.exists?(wiki.path)
assert wiki.save
assert_equal "", wiki.errors.full_messages.join(', ')
wiki.reload
assert_equal sites_count+1, Site.count
# 3
update = Update.new(:baseline_process_id => wiki.id, :wiki_id => @oup_20060721.id, :user_id => @george.id)
assert !update.save
assert_equal "Baseline process is not a BaselineProcess, Wiki is not a Wiki", update.errors.full_messages.join(', ')
assert_equal 'Pending', wiki.status
# 4
update = Update.new(:baseline_process_id => @oup_20060721.id, :wiki_id => wiki.id, :user_id => @george.id)
assert update.save
assert_equal 'Scheduled', wiki.status
assert_equal 4, @emails.size # TODO changed from 1 to 3
r = ["[EPF Wiki - Test Enviroment] SCHEDULED creation new Wiki Templates using Baseline Process templates_20080828",
"[EPF Wiki - Test Enviroment] STARTED creating New Wiki Templates using Baseline Process templates_20080828",
"[EPF Wiki - Test Enviroment] FINISHED creating new Wiki Templates using Baseline Process templates_20080828",
"[EPF Wiki - Test Enviroment] SCHEDULED creation new Wiki OpenUP Wiki using Baseline Process oup_20060721"]
assert_equal r, @emails.collect{|e|e.subject}
#assert_equal @emails[0].subject.include? "SCHEDULED creation new Wiki #{update.wiki.title} using Baseline Process #{update.baseline_process.title}"
@emails.clear
# 5.
wiki = Wiki.new(:folder => 'openup', :title => 'OpenUP Wiki', :user_id => @george.id)
assert !wiki.save
assert_equal 'Folder already exists', wiki.errors.full_messages.join(', ')
# 6
assert_raise(NoMethodError) {@oup_20060721.wikify}
# 7
assert_equal 1, Update.find_todo.size
update = Update.find_todo[0]
w, bp = update.wiki, update.baseline_process
bp.reload
Rails.logger.info("bp: #{bp.inspect}, pages #{bp.pages.size}")
assert_equal 617, bp.pages.size
assert !bp.content_scanned_on.nil?
update.baseline_process.scan4content # TODO fails after upgrade
assert_equal ['Scheduled', 0], [w.status, w.pages.size]
cnt1 = Page.count
Rails.logger.info("site_test.rb: doing update that just update but then doesn't")
update.do_update
Rails.logger.info("site_test.rb: after update that doensn't do much")
cnt2 = Page.count
assert_equal 0, Update.find_todo.size
bp.reload
w.reload
assert_equal 617, bp.pages.count
Rails.logger.info("site_test.rb: testing number of pages")
assert_equal ['Ready', 617, 669, 669+617], [w.status, w.pages.size, cnt1, cnt2]
assert_equal w.pages.size + bp.pages.size + 2*26, Page.count
assert_equal 2, @emails.size
assert_equal "[EPF Wiki - Test Enviroment] STARTED creating New Wiki #{update.wiki.title} using Baseline Process #{update.baseline_process.title}", @emails[0].subject
assert_equal "[EPF Wiki - Test Enviroment] FINISHED creating new Wiki #{update.wiki.title} using Baseline Process #{update.baseline_process.title}", @emails[1].subject
assert_equal [update.user.email], @emails[0].to
assert_equal [User.find_central_admin.email], @emails[0].cc
end
# Shows:
# 1. We cannot Wikify a BaselineProcess TODO?
# 2. We can update content in a Wiki site
# 3. The Wikify operation will cause content of baseline process to be scanned (because it was not scanned yet)
# 4.
# 5. TODO: test if content was wikified correctly
test "New wiki 2" do
@george = Factory(:user, :name => 'George Shapiro', :password => 'secret', :admin => 'C')
@oup_20060721 = create_oup_20060721
@oup_20060728 = create_oup_20060728
@oup_wiki = create_oup_wiki(@oup_20060721)
@oup_wiki.reload # TODO is necessary or not?
assert_equal @oup_20060721, @oup_wiki.baseline_process
# 1
#assert_raise(RuntimeError) {@oup_20060721.wikify}
# 2
#@oup_wiki.baseline_process = @oup_20060728
assert_equal 'Ready', @oup_wiki.status
cnt = Update.count
update = Update.create(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_wiki.id, :user_id => @george.id )
assert_equal cnt+1, Update.count
#assert @oup_wiki.save
@oup_wiki.reload # NOTE: @oup_wiki.updates is cached so status will wrong without reload
assert_equal 'Scheduled', @oup_wiki.status
updates = Update.find_todo
assert_equal 1, updates.size
assert_equal @oup_wiki, updates[0].wiki
update.do_update
update.reload
assert_equal 'Ready', update.wiki.status
@oup_wiki.reload
assert_equal [], Update.find_todo
assert_equal 2, Wiki.find(:all).size
@oup_20060721.reload
assert_not_nil @oup_20060721
assert_equal 'oup_20060721',@oup_20060721.title
#assert_equal @oup_wiki.baseline, @oup_20060728.baseline
assert_equal 617, @oup_wiki.pages.size
# 3
assert_equal @oup_wiki.pages.size, @oup_20060728.pages.size
# 4
assert_equal [1234, {"New" => 26, "Updated" => 617}, {"N.A." => 1260}],[@oup_wiki.versions.size, WikiPage.count(:group => 'status'), BaselineProcessPage.count(:group => 'status')]
status = WikiPage.count(:group => 'status')
types = WikiPage.count(:group => 'uma_type')
assert_equal [26,617], [status['New'], status['Updated']], "Different status: #{status.inspect}"
r = {"Activity" => 140,
"Artifact" => 23+1,
"CapabilityPattern" => 35,
"Checklist" => 10+1,
"Concept" => 48+1,
"CustomCategory" => 4+1,
"Deliverable" => 1,
"DeliveryProcess" => 5,
"Discipline" => 6+1,
"DisciplineGrouping" => 1,
"Domain" => 6+1,
"EstimationConsiderations"=>1,
"Example"=>1,
"Guideline" => 45+2,
"Milestone" => 4,
"Outcome" => 1,
"Practice" => 1,
"Report"=>1,
"ReusableAsset"=>1,
"Roadmap" => 1+1,
"Role" => 7+1,
"RoleDescriptor" => 33,
"RoleSet" => 1+1,
"RoleSetGrouping"=>1,
"Summary" => 114,
"SupportingMaterial" => 4+1,
"Task" => 23+1,
"TaskDescriptor" => 25,
"Template" => 8+1,
"TermDefinition" => 7+1,
"ToolMentor"=>1,
"Whitepaper"=>1,
"WorkProductDescriptor" => 59,
"WorkProductType" => 8+1}
assert_equal r, types
end
# Shows:
# 2. Can't update a BaselineProcess (site_type != 'W')
# 3. Can update a wiki with a current or previous BaselineProcess
# 4. Can update or cancel a pending wiki
# 5. We can do the actual update
# 6. Update with Templates baseline
# 7. We can also update with a previous baseline process
test "Update Wiki" do
@george = Factory(:user, :name => 'George Shapiro', :password => 'secret', :admin => 'C')
@oup_20060721 = create_oup_20060721
@oup_20060728 = create_oup_20060728
@oup_20060825 = create_oup_20060825
@oup_wiki = create_oup_wiki(@oup_20060721)
# 2
update = Update.new(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_20060721.id, :user_id => @george.id)
assert !update.save
assert_equal 'Wiki is not a Wiki', update.errors.full_messages.join(', ')
@oup_wiki.reload
assert_equal 'Ready', @oup_wiki.status
# 3
@oup_20060721.reload
#@oup_wiki = create_oup_wiki(@oup_20060721)
update = Update.new(:baseline_process_id => @oup_20060721.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
assert update.save
@oup_wiki.reload
assert_equal 'Scheduled', @oup_wiki.status
# 4
update.baseline_process = @oup_20060825
assert update.save
@oup_wiki.reload
assert_equal 'Scheduled', @oup_wiki.status
assert_equal @oup_20060721, @oup_wiki.baseline_process
assert_equal 'Scheduled', @oup_wiki.status
update.destroy
#assert @oup_wiki.save
@oup_wiki.reload
assert_equal 'Ready', @oup_wiki.status
# 5
update = Update.new(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
assert update.save
@oup_wiki.reload
assert_equal 'Scheduled', @oup_wiki.status
assert_equal 617, @oup_20060728.pages.size
update.do_update
@oup_wiki.reload
@oup_20060728.reload
assert_equal @oup_wiki.baseline_process,@oup_20060728
assert_equal 617, @oup_wiki.pages.size
@oup_20060728.reload
assert_equal 617, @oup_20060728.pages.size # content scan triggered by update
status = WikiPage.count(:group => 'status')
assert_equal 26, status['New']
assert_equal 617, status['Updated']
# 6
#tpb_bl = create_templates_baseline # TODO obsolete after upgrade
@templates = Wiki.find_by_title('Templates') # TODO added for upgrade
tpb_bl = @templates.baseline_process # TODO added for upgrade
assert_equal 'Ready', @oup_wiki.status
update = Update.new(:baseline_process_id => tpb_bl.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
assert update.save
@oup_wiki.reload
assert_equal 'Scheduled', @oup_wiki.status
status = WikiPage.count(:group => 'status')
r = {"New"=>26, "Updated"=>617}
assert_equal r, status
update.do_update
@oup_wiki.reload
assert_equal 'Ready', @oup_wiki.status
assert_equal tpb_bl, @oup_wiki.baseline_process
r = {"New"=>26, "RemovedOrMoved"=>617}
assert_equal r, WikiPage.count(:group => 'status', :conditions => ['site_id=?',@oup_wiki.id])
# 7
update = Update.new(:baseline_process_id => @oup_20060728.id, :wiki_id => @oup_wiki.id, :user_id => @george.id)
assert update.save
@oup_wiki.reload
assert_equal 'Scheduled', @oup_wiki.status
update.do_update
@oup_wiki.reload
assert_equal 'Ready', @oup_wiki.status
assert_equal @oup_wiki.baseline_process, @oup_20060728
r = {"RemovedOrMoved"=>26, "Updated"=>617}
assert_equal r, WikiPage.count(:group => 'status', :conditions => ['site_id=?',@oup_wiki.id])
end
test "Wikifiable files" do
@george = Factory(:user, :name => 'George Shapiro', :password => 'secret', :admin => 'C')
@oup_20060721 = create_oup_20060721
wikifiable_files = @oup_20060721.files_wikifiable
assert_equal 617, wikifiable_files.size
assert_equal 617, wikifiable_files.size
end
end