blob: d911da796672ad69185e2d1af16bf1da8472efb8 [file] [log] [blame]
require File.dirname(__FILE__) + '/../test_helper'
require 'sites_controller'
require 'generic'
#--######################################################################
# Copyright (c) 2006 LogicaCMG
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#
# Onno van der Straaten:: initial implementation
#++######################################################################
# {Copyright (c) 2006 LogicaCMG}[link:files/COPYRIGHT.html]
# Re-raise errors caught by the controller.
class SitesController; def rescue_action(e) raise e end; end
class SitesControllerTest < Test::Unit::TestCase
#fixtures :users
def setup
@controller = SitesController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@cadmin = User.find_central_admin
@admin = User.find_all_by_admin('Y')[0]
@user = User.find_all_by_admin('N')[0]
@emails = ActionMailer::Base::deliveries
@emails.clear
get :list
end
def test01_index
get :index
assert_redirected_to :controller => 'login'
session['user'] = User.find(2)
assert_not_nil(session['user'])
end
def test02_list
get :list
assert_redirected_to :controller => 'login'
session['user'] = User.find(2)
get :list
assert_response :success
assert_template 'list'
assert_not_nil assigns(:baseline_processes)
assert_not_nil assigns(:wiki_sites)
end
# Shows:
# 1. need to be an admin to create a baseline process
# 2. admin get link to create baseline process
# 3. admin can upload baseline process (TODO)
# 4. link to start baseline process available at list for admin, not for user
# 5. test baseline needs to be unique
# FIXME ignoring attempt to close
def test03_new
admin = User.find_by_admin('Y')
user = User.find_by_admin('N')
assert_not_nil admin
assert_not_nil user
# 1
session['user'] = user
get :new
assert_unot_admin_message
# 2
session['user'] = admin
get :list
assert_response :success
assert_tag :tag => 'a', :attributes => {:href => "/sites/new"}
# 3
get :new
assert_response :success
assert assigns(:site)
assert assigns(:baseline)
assert assigns(:folders)
assert assigns(:folders).empty?
assert SitesController::FLASH_NEED_TO_UPLOAD, flash['notice']
assert_response :success
#post :upload, :site => nil TODO how to test this here
#assert_not_nil assigns(:site)
#assert_errors
#assert_equal "Folder can't be blank, File can't be blank", assigns(:site).errors.full_messages.join(", ")
# unzipping, we are not testing upload
Site.new(:folder => openup0721_folder, :site_type => 'S').unzip_upload
Site.new(:folder => openup0728_folder, :site_type => 'S').unzip_upload
Site.new(:folder => openup0825_folder, :site_type => 'S').unzip_upload
get :new
assert_equal ["OpenUP-Basic_published_20060721#{ENV['EPFWIKI_TESTDATA']}",
"OpenUP-Basic_published_20060728#{ENV['EPFWIKI_TESTDATA']}",
"OpenUP-Basic_published_20060825#{ENV['EPFWIKI_TESTDATA']}"], assigns(:folders)
assigns(:folders).each do |folder|
assert_tag :tag => 'option', :content => folder
end
# post :new, :site => {:title => '', :file => StringIO.new('')} # how to test this?
# assert_equal "Title can't be blank, Folder can't be blank, Baseline can't be blank, User can't be blank", assigns(:site).errors.full_messages.join(", ")
# assert_errors
# assigns(:site).errors.full_messages.each do |message|
# assert_tag :tag => 'test'
# end
post :new, :site => {:title => 'openup0721', :baseline_baseline => 'OUP_20060721', :folder => assigns(:folders)[0], :description => 'test03_new'}
site = assigns(:site)
assert_not_nil site
assert site.valid?
assert_redirected_to :action => 'list'
assert_equal ::FLASH_RECORD_CREATED, flash[:success]
# 4
get :list
assert_response :success
assert_tag :tag => 'a', :attributes => {:href=> '/' + assigns(:site).rel_path + '/', :title => "Activate site &quot;openup0721&quot;"}
# 5
post :new, :site => {:title => 'openup0725', :baseline_baseline => 'OUP_20060721', :folder => assigns(:folders)[1], :description => 'test03_new'}
assert_errors
assert_response :success
assert_equal 'Baseline has already been taken', assigns(:site).errors.full_messages.join(', ')
assert_errors(assigns(:site))
end
# Shows:
# 1. only admins can create wikis
# 2. admin can request form to create a new wiki
def test04_new_wiki
# 1
logonUser
get :new_wiki
assert_unot_admin_message
# 2
admin = User.find_by_admin('Y')
assert_not_nil admin
session['user'] = admin
get :new_wiki
assert_not_nil assigns(:site)
assert_not_nil assigns(:baseline_processes)
assert_field 'site_folder'
assert_tag :tag => 'textarea', :attributes => {:id => 'site_description', :name => 'site[description]'}
assert_field 'site_title'
assert_tag :tag => 'select', :attributes => {:id => 'site_site_id_baseline_process', :name => 'site[site_id_baseline_process]'}
Site.find_baseline_processes.each do |bl|
assert_tag :tag => 'option', :attributes => {:value => bl.id}, :content => bl.title
end
end
# Shows:
# 1. admin can request creation of Wiki (actual wikifying is performed directly for performance reasons)
# 2. a notification is sent to the central admin and the admin requesting the creation
def test05_new_wiki_post
@emails.clear
# 1
get :new_wiki
session['user'] = User.find_all_by_admin('Y')[0]
baseline_process = Site.find_by_title('openup0721')
assert_not_nil baseline_process
post :new_wiki, :site => {:folder => 'openup', :title => 'OpenUP Wiki', :description => 'Wiki for OpenUP created in test05_new_wiki_post', :baseline_process => baseline_process}
assert_redirected_to :action => 'list'
assert SitesController::FLASH_WIKI_SITE_SCHEDULED, flash['success']
site = assigns(:site)
assert_not_nil site
# 2
assert_equal(1, @emails.size)
email = @emails.first
assert_equal("[" + ENV['EPFWIKI_APP_NAME'] + "] Site " + site.title + " scheduled for creation!" , email.subject)
assert_equal [session['user'].email, User.find_central_admin.email], email.to
assert_equal site.site_type, 'W'
assert_equal 'P', site.status # pending
assert_equal session['user'], site.user
assert_equal baseline_process, site.baseline_process
end
# Shows
# 1. central admin can wikify content directly
def test06_wikify_now
@emails.clear
get 'list'
session['user'] = User.find_all_by_admin('Y')[0]
openupwiki = Site.find_by_title('OpenUP Wiki')
assert_not_nil openupwiki
baseline_process = openupwiki.baseline_process
assert_equal 0, openupwiki.pages.size
assert_equal 0, baseline_process.pages.size
assert_equal 'P', openupwiki.status
get :wikify_now, :id => openupwiki
assert_unot_cadmin_message
session['user'] = User.find_central_admin
get :wikify_now, :id => openupwiki.id # TODO
assert_not_nil assigns(:wiki)
assert_equal(1, @emails.size)
email = @emails.first
#assert_equal [session['user']], email.recipients.uniq
assert_equal "[" + ENV['EPFWIKI_APP_NAME'] + "] Site " + assigns(:wiki).title + " created!" , email.subject
assert_equal '', assigns(:wiki).errors.full_messages.join(', ')
openupwiki.reload
baseline_process = Site.find(baseline_process.id)
if ENV['EPFWIKI_TESTDATA'] == 'test'
assert_equal 8, openupwiki.pages.size
assert_equal 8, baseline_process.pages.size
else
assert_equal 617, openupwiki.pages.size
assert_equal 617, baseline_process.pages.size
end
assert_equal 'W', openupwiki.status
end
# Shows
# 1. admin requests creation of Wiki
# 2. Content is wikified using job_daily (an email is sent if the job fails)
def test07_new_wiki_job_daily
# 1
get :new_wiki
session['user'] = User.find_all_by_admin('Y')[0]
baseline_process = Site.find_by_title('openup0721')
assert_not_nil baseline_process
post :new_wiki, :site => {:folder => 'openup2', :title => 'OpenUP Wiki2', :description => 'Wiki for OpenUP created in tst06_new_wiki2', :baseline_process => baseline_process}
openupwiki2 = Site.find_by_folder('openup2')
assert_not_nil openupwiki2
assert_equal 'P', openupwiki2.status
# 2 email sent because job fails
session['user'] = nil
folder = baseline_process.folder
baseline_process.folder = 'doesnotexist'
assert baseline_process.save
assert_equal 1, Site.find_wikis_pending.size
@emails.clear
job_daily
assert_equal(1, @emails.size)
email = @emails.first
#assert_equal '', email.body
assert email.body.include?('unknown file type') && email.body.include?('doesnotexist')
assert_equal 1, Site.find_wikis_pending.size
# 2 success
openupwiki2.reload
baseline_process = openupwiki2.baseline_process
baseline_process.folder = folder
assert baseline_process.save
@emails.clear
job_daily
assert_equal(1, @emails.size)
email = @emails.first
assert_equal "[" + ENV['EPFWIKI_APP_NAME'] + "] Site " + openupwiki2.title + " created!" , email.subject
assert_equal 0, Site.find_wikis_pending.size
openupwiki2.reload
if ENV['EPFWIKI_TESTDATA'] == 'test'
assert_equal 8, openupwiki2.pages.size
else
assert_equal 617, openupwiki2.pages.size
end
assert_equal 'W', openupwiki2.status
end
# Shows
# 1. users cannot request a form to update a Wiki
# 2. a message is displayed if there are no candidate baseline processes
# 3. admin can select a candite baseline process
# 4. user cannot post the form
# 5. update is postponed if there are checkouts (checkin request email)
# 6. update job fails, notification sent
# 7. cannot do update_wiki_now
# 8. cadmin request immediate update of wiki
# 9. update wiki via job_daily
def test08_update_wiki
# 1
openupwiki2 = Site.find_by_folder('openup2')
assert_not_nil openupwiki2
get :update_wiki, :id => openupwiki2.id
assert_redirected_to :controller => 'login'
session['user'] = @user
assert_not_nil session['user']
get :update_wiki, :id => openupwiki2.id
assert_unot_admin_message
# 2
session['user'] = @admin
get :update_wiki, :id => openupwiki2.id
assert_response :success
assert_equal 0, openupwiki2.baseline_processes_candidate.size
assert_tag :content => SitesController::FLASH_NO_BL_CANDIDATE
assert_no_tag :tag => 'select', :attributes => {:id => 'site_baseline_process', :name => 'site[baseline_process]'}
assert_no_tag :tag => 'form'
# 3
post :new, :site => {:title => 'openup0728', :baseline_baseline => 'OUP_20060728', :folder => "OpenUP-Basic_published_20060728#{ENV['EPFWIKI_TESTDATA']}", :description => 'test08_update_wiki'}
openupwiki2.reload
assert_equal 1, openupwiki2.baseline_processes_candidate.size
get :update_wiki, :id => openupwiki2.id
assert_tag :tag => 'form'
assert_tag :tag => 'select', :attributes => {:id => 'site_baseline_process', :name => 'site[baseline_process]'}
openupwiki2.baseline_processes_candidate.each do |bl|
assert_tag :tag => 'option', :attributes => {:value => bl.id}, :content => bl.title
end
post :new, :site => {:title => 'openup0825', :baseline_baseline => 'OUP_20060825', :folder => "OpenUP-Basic_published_20060825#{ENV['EPFWIKI_TESTDATA']}", :description => 'test08_update_wiki'}
openupwiki2.reload
assert_equal 2, openupwiki2.baseline_processes_candidate.size
get :update_wiki, :id => openupwiki2.id
assert_tag :tag => 'form'
assert_tag :tag => 'select', :attributes => {:id => 'site_baseline_process', :name => 'site[baseline_process]'}
openupwiki2.baseline_processes_candidate.each do |bl|
assert_tag :tag => 'option', :attributes => {:value => bl.id}, :content => bl.title
end
# creating a checkout
page = Page.find_by_filename('artifact,_fdRfkBUJEdqrUt4zetC1gg.html')
assert_not_nil page
checkout = Checkout.new(:user => @user, :page => page, :site => openupwiki2, :note => 'test08_update_wiki')
assert checkout.save
checkout.reload
# 4
session['user'] = @user
post :update_wiki, :id => openupwiki2.id, :site => {:baseline_process => openupwiki2.baseline_processes_candidate[0]}
assert_unot_admin_message
# 5
session['user'] = @admin
@emails.clear
post :update_wiki, :id => openupwiki2.id, :site => {:baseline_process => openupwiki2.baseline_processes_candidate[0]}
assert_redirected_to :action => 'show', :id => openupwiki2.id
assert_equal SitesController::FLASH_WIKI_SITE_UPDATE_SCHEDULED, flash['success']
assert_equal(2, @emails.size)
email = @emails.first
assert email.to.include?(@user.email)
assert email.to.include?(@cadmin.email)
assert_equal "[" + ENV['EPFWIKI_APP_NAME'] + "] " + openupwiki2.title + " - Check-In Request", email.subject
email = @emails[1]
assert_equal "[" + ENV['EPFWIKI_APP_NAME'] + "] Site " + openupwiki2.title + " scheduled for update!", email.subject
#assert_equal '', email.inspect
assert email.to.include?(@admin.email)
assert email.to.include?(@cadmin.email)
# 6
@emails.clear
job_daily
assert_equal(1, @emails.size)
email = @emails.first
assert email.to.include?(@user.email)
assert email.to.include?(@cadmin.email)
assert_equal "[" + ENV['EPFWIKI_APP_NAME'] + "] " + openupwiki2.title + " - Check-In Request", email.subject
# extra checkout
page = Page.find_by_filename('determine_architectural_feasibility_0oreoclgEdmt3adZL5Dmdw_desc.html')
checkout = Checkout.new(:user => @admin, :page => page, :site => openupwiki2, :note => 'test08_update_wiki')
assert checkout.save
checkout.reload
@emails.clear
job_daily
assert_equal(1, @emails.size)
email = @emails.first
assert email.to.include?(@admin.email)
assert email.to.include?(@cadmin.email)
assert email.to.include?(@user.email)
assert_equal 3, email.to.size
assert_equal "[" + ENV['EPFWIKI_APP_NAME'] + "] " + openupwiki2.title + " - Check-In Request" , email.subject
# 7
session['user'] = @admin
post :update_wiki_now, :id => openupwiki2.id
assert_unot_cadmin_message
session['user'] = @cadmin
post :update_wiki_now, :id => openupwiki2.id
assert_equal SitesController::FLASH_CHECKOUTS_NO_UPDATE, flash['notice']
# checkin the two checkouts
Checkout.find_all[0].checkin(@user)
Checkout.find_all[0].checkin(@admin)
openupwiki2.reload
assert openupwiki2.checkouts.empty?
# 8
@emails.clear
assert_equal 1, Site.find_wikis_update.size
post :update_wiki_now, :id => openupwiki2.id
assert_equal SitesController::FLASH_WIKI_UPDATE_SUCCESS, flash['success']
assert_equal 0, Site.find_wikis_update.size
assert_equal(1, @emails.size)
assert email.to.include?(@user.email)
assert email.to.include?(@admin.email)
assert email.to.include?(@admin.email)
assert "[#{ENV['EPFWIKI_APP_NAME']}] Site #{openupwiki2.title} updated!", email.subject
# 9 update via job daily
openupwiki2.reload
assert_equal 1, openupwiki2.baseline_processes_candidate.size
openup0825 = openupwiki2.baseline_processes_candidate[0]
post :update_wiki, :id => openupwiki2.id, :site => {:baseline_process => openup0825}
assert_equal 1, Site.find_wikis_update.size
openupwiki2.reload
assert_equal 'U', openupwiki2.status
openupwiki2.reload
assert_equal openupwiki2.baseline_process, openup0825
@emails.clear
assert !openupwiki2.baselines.include?(openup0825.baseline)
job_daily # update wiki
assert_equal 0, Site.find_wikis_update.size
openupwiki2.reload
assert openupwiki2.baselines.include?(openup0825.baseline)
assert_equal 'W', openupwiki2.status
assert_equal 1, @emails.size
email = @emails.first
assert "[#{ENV['EPFWIKI_APP_NAME']}] Site #{openupwiki2.title} updated!", email.subject
# additional tests
openupwiki2.reload
pages = []
openupwiki2.baselines.each do |baseline|
baseline.pages.each do |page|
assert openupwiki2.pages.include?(page)
end
end
end
# Shows:
# 1. cadmin users are presented with a link to create a new difference analysis
#
def test09_show
[@admin, @cadmin, @user].each do |user|
session['user'] = user
Site.find_all.each do |site|
get :show, :id => site.id
assert_response :success
if cadmin? && site.site_type == 'S'
# TODO R? implement functional test. For some reason we cannot detect this link using assert_tag?
# assert_tag :tag => 'a', :attributes => {:href => '/difference_analyes/new'}
end
get :show, :id => site.id, :tab => 'comments'
assert_response :success
get :show, :id => site.id, :tab => 'pages'
assert_response :success
end
end
end
def test10_list
[@admin, @cadmin, @user].each do |user|
session['user'] = user
get :list
end
end
end