blob: ca6573f2d5e0a01f6dcf08bf19121003ec8c15a4 [file] [log] [blame]
require File.dirname(__FILE__) + '/../test_helper'
#--######################################################################
# Copyright (c) 2006 Logica
#
# 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 Logica}[link:files/COPYRIGHT.html]
class CheckoutTest < Test::Unit::TestCase
fixtures :users
def setup
logger.debug "Test Case: #{name}"
@oup_20060721 = create_oup_20060721
@oup_wiki = create_oup_wiki(@oup_20060721)
@andy = users(:andy)
@george = users(:george)
@tony = users(:tony)
@cash = users(:cash)
end
# Shows:
# 1. we cannot check out a page of a baseline process
# 2. we can check out a page by supplying the user, page and site
# 3. we cannot check out the same page twice
# 4. we can undo a checkout
# TODO 5. we cannot checkout a page in a site that has not been wikified yet
# TODO 6. we can supply a note with a checkout
# TODO 7. checkout removes
def tst01_new
logger.debug('1 - we cannot check out a page of a baseline process')
assert_equal 617, @oup_20060721.pages.count
page = WikiPage.find_by_filename('requirements,_allMQMWfEdqiT9CqkRksWQ.html')
assert_not_nil page
version_count = Version.count
checkout_count = Checkout.count
html_files_count = Site.files_html(@oup_20060721.path).size
checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_20060721)
assert_raise(RuntimeError) {checkout.save} # TODO test for message, how "RuntimeError: Versions can only be created in Wiki sites"
#assert_equal 'Version can\'t be blank, Site can\'t be a baseline process', checkout.errors.full_messages.join(", ")
assert_equal version_count, Version.count
assert_equal checkout_count, Checkout.count
assert_equal html_files_count, Site.files_html(@oup_20060721.path).size
logger.debug('2 - we can check out a page by supplying the user, page and site')
version_count = Version.count
checkout_count = Checkout.count
html_files_count = Site.files_html(@oup_20060721.path).size
checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki)
assert checkout.save
assert_equal version_count + 1, Version.count
assert_equal checkout_count + 1, Checkout.count
assert_equal @oup_wiki, checkout.site # created checkout
assert_equal page, checkout.page
assert_equal @andy, checkout.user
version = checkout.version # version created
assert_equal @andy, version.user
assert_equal @oup_wiki, version.wiki
assert_equal page, version.page
assert File.exists?(version.path)
logger.debug('3 - we cannot check out the same page twice')
checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki)
assert_raise(RuntimeError) {checkout.save} # Checkout already exists #TODO mixed results with this, caused by page.checkout, that doesn't seem to work
assert_errors(checkout)
assert_equal version_count + 1, Version.count # same as before, nothing changed
assert_equal checkout_count + 1, Checkout.count
logger.debug('4 - we can undo a checkout')
assert_equal 1, Checkout.count
checkout = Checkout.find(:first)
assert_kind_of Checkout, checkout
assert File.exists?(checkout.version.path)
version_path = checkout.version.path
checkout.undo
assert_equal version_count, Version.count # undo destroys checkout + version
assert_equal checkout_count, Checkout.count
assert !File.exists?(version_path)
checkout = Checkout.new(:user => @andy, :page => page, :site => @oup_wiki, :note => 'My checkout')
assert checkout.save
assert_equal 'My checkout', checkout.version.note
end
# Shows:
# 1. an admin or user cannot checkin a file of another user
# 2. owner (who is not an admin) can checkin
# 3. cadmin can check in
# 4. html can be supplied during checkin
# TODO 5. don't supply html which will checkin using the version file
# 6. the version file does not contain wiki tags
# 7. after checkin the page does
def tst02_checkin
page = WikiPage.find_by_filename('artifact,_fdRfkBUJEdqrUt4zetC1gg.html')
assert page.html.include?('body onload')
checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
assert checkout.save
assert_kind_of Checkout, checkout
assert File.exists?(checkout.version.path)
checkout.reload
checkout_id = checkout.id
logger.debug('1 - an admin or user cannot checkin a file of another user')
assert_raise(RuntimeError) {checkout.checkin(@andy)}
assert_raise(RuntimeError) {checkout.checkin(@cash)}
logger.debug('2 - owner (who is not an admin) can checkin')
checkout.checkin(@tony)
assert !Checkout.exists?(checkout_id)
logger.debug('3 - cadmin can check in')
checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
assert checkout.save!
checkout_id = checkout.id
checkout.checkin(@george)
assert !Checkout.exists?(checkout_id)
logger.debug('4 - html can be supplied during checkin')
checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
assert checkout.save!
version = checkout.version
checkout_id = checkout.id
html = checkout.version.html
html = html.gsub('making responsibility easy to identify','##replaced text##')
checkout.checkin(@tony, html)
assert !Checkout.exists?(checkout_id)
assert version.html.index('##replaced text##')
assert page.html.index('##replaced text##')
logger.debug('5 - don\'t supply html which will checkin using the version file')
logger.debug('6 - the version file does not contain wiki tags')
checkout = Checkout.new(:user => @tony, :page => page, :site => @oup_wiki, :note => 'Another checkout')
assert checkout.save!
version = checkout.version
html_version = version.html
html_page = version.page.html
# removed stuff in version file
assert_equal nil, html_version.index('body onload') # onload was removed
assert_equal nil, html_version.index('<!-- epfwiki head start -->') # wiki stuff removed
assert_equal nil, html_version.index('<!-- epfwiki iframe start -->')
# replaced stuff in version file
assert_not_nil html_version.index(Page.TREEBROWSER_PLACEHOLDER)
# assert_not_nil html_version.index('<!-- copyright statement -->')
# stuff to be removed from page
assert_not_nil html_page.index('body onload')
# stuff to be replace in page
assert_not_nil html_page.index('treebrowser.js')
assert_not_nil html_page.index('class="copyright"')
logger.debug('7 - after checkin the page does')
html_version = html_version.gsub('making responsibility easy to identify','##replaced text##')
checkout.checkin(@tony, html_version)
html_page = version.page.html
# stuff to be removed from page back in page
assert_not_nil html_page.index('##replaced text##')
assert_not_nil html_page.index('body onload')
# stuff to be replaced in page back in page
assert_not_nil html_page.index('treebrowser.js')
assert_not_nil html_page.index('class="copyright"')
end
# Shows that a user will start receiving notifications about page changes after checkin of a page
def test_notification_subscription
page = WikiPage.find(:first)
checkout = Checkout.new(:user => @andy, :page => page, :site => page.site)
assert checkout.save
assert !Notification.find_all_users(page, Page.name).include?(@andy)
checkout.checkin(@andy)
assert Notification.find_all_users(page, Page.name).include?(@andy)
checkout = Checkout.create(:user => @andy, :page => page, :site => page.site)
assert checkout.save
checkout.checkin(@andy)
assert Notification.find_all_users(page, Page.name).include?(@andy)
checkout = Checkout.create(:user => @george, :page => page, :site => page.site)
assert checkout.save
checkout.checkin(@george)
assert Notification.find_all_users(page, Page.name).include?(@george)
end
end