| 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 "openup0721""} |
| # 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 |