# encoding: utf-8 #-- # Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . #++ require File.dirname(__FILE__) + '/../test_helper' require "fileutils" class PageTest < ActiveSupport::TestCase def setup @path = "/tmp/gts-test-wiki" delete_test_repo FileUtils.mkdir(@path) Dir.chdir(@path) do File.open("HowTo.markdown", "wb"){|f| f.puts "Hello world!" } ENV['GIT_COMMITTER_NAME'] = "Johan Sørensen" ENV['GIT_COMMITTER_EMAIL'] = "johan@johansorensen.com" `git init; git add .; git commit --author='Johan Sorensen ' -m "first commit"` end @repo = Grit::Repo.new(@path) end def teardown delete_test_repo end should "finds an existing page" do page = Page.find("HowTo", @repo) assert !page.new?, 'page.new? should be false' assert_equal "HowTo.markdown", page.name assert_equal "Hello world!\n", page.content end should "raises an error when there's no user set" do p = Page.find("HowTo", @repo) assert_raises(Page::UserNotSetError) { p.save } end should "updates the content when calling save" do p = Page.find("HowTo", @repo) p.user = users(:johan) p.content = "bye cruel world!" assert_equal "bye cruel world!", p.content assert_match(/^[a-z0-9]{40}$/, p.save) p2 = Page.find("HowTo", @repo) assert_equal "bye cruel world!", p2.content end should "creates a new page" do p = Page.find("Hello", @repo) assert p.new?, 'p.new? should be true' assert_equal "", p.content p.user = users(:johan) assert_match(/^[a-z0-9]{40}$/, p.save) assert !Page.find("Hello", @repo).new?, 'Page.find("Hello", @repo).new? should be false' assert !Page.find("HowTo", @repo).new?, 'Page.find("HowTo", @repo).new? should be false' end should "supports nested pages" do p = Page.find("Hello/World", @repo) assert p.new?, 'p.new? should be true' assert_equal "Hello/World.markdown", p.name p.content = "foo" p.user = users(:johan) assert_match(/^[a-z0-9]{40}$/, p.save) p2 = Page.find("Hello/World", @repo) assert !p2.new?, 'p2.new? should be false' end should "has a basename without the extension" do p = Page.find("HowTo", @repo) assert_equal "HowTo", p.title assert_equal p.title, p.to_param end should 'alias id to to_param' do p = Page.find('HowTo', @repo) assert_equal(p.to_param, p.id) end should " have a commit" do p = Page.find("HowTo", @repo) assert_instance_of Grit::Commit, p.commit assert_equal "johan@johansorensen.com", p.commit.committer.email assert_equal "first commit", p.commit.message p2 = Page.find("somethingnew", @repo) assert p2.new?, 'p2.new? should be true' assert_equal nil, p2.commit end should " have a committed by user" do p = Page.find("HowTo", @repo) assert_equal users(:johan), p.committed_by_user end should " have the commit history of a page" do p = Page.find("HowTo", @repo) p.content = "something else" p.user = users(:johan); p.save assert_equal 2, p.history.size assert_equal "Updated HowTo", p.history.first.message assert_equal "first commit", p.history.last.message end should " validate the name of the page" do p = Page.find("kernel#wtf", @repo) p.user = users(:johan) assert !p.valid?, 'p.valid? should be false' assert !p.save, 'p.save should be false' assert Page.find("Kernel", @repo).valid?, 'Page.find("Kernel", @repo).valid? should be true' assert Page.find("KernelWhat", @repo).valid?, 'Page.find("KernelWhat", @repo).valid? should be true' assert Page.find("KernelWhatTheFsck", @repo).valid?, 'Page.find("KernelWhatTheFsck", @repo).valid? should be true' end def delete_test_repo FileUtils.rm_rf(@path) if File.exist?(@path) end end