Passing git committer info via environment variables, make the specs pass outside...
[gitorious:yousource.git] / spec / models / page_spec.rb
1 #--
2 #   Copyright (C) 2009 Johan Sørensen <johan@johansorensen.com>
3 #
4 #   This program is free software: you can redistribute it and/or modify
5 #   it under the terms of the GNU Affero General Public License as published by
6 #   the Free Software Foundation, either version 3 of the License, or
7 #   (at your option) any later version.
8 #
9 #   This program is distributed in the hope that it will be useful,
10 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 #   GNU Affero General Public License for more details.
13 #
14 #   You should have received a copy of the GNU Affero General Public License
15 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #++
17
18 require File.dirname(__FILE__) + '/../spec_helper'
19 require "fileutils"
20
21 describe Page do
22   before(:each) do
23     @path = "/tmp/gts-test-wiki"
24     delete_test_repo
25     FileUtils.mkdir(@path)
26     Dir.chdir(@path) do
27       File.open("HowTo.markdown", "wb"){|f| f.puts "Hello world!" }
28       ENV['GIT_COMMITTER_NAME'] = "Johan Sørensen"
29       ENV['GIT_COMMITTER_EMAIL'] = "johan@johansorensen.com"
30       `git init; git add .; git commit --author='Johan Sorensen <johan@johansorensen.com>' -m "first commit"`
31     end
32     @repo = Grit::Repo.new(@path)
33   end
34   
35   after(:each) { delete_test_repo }
36   
37   it "finds an existing page" do
38     page = Page.find("HowTo", @repo)
39     page.new?.should == false
40     page.name.should == "HowTo.markdown"
41     page.content.should == "Hello world!\n"
42   end
43   
44   it "raises an error when there's no user set" do
45     p = Page.find("HowTo", @repo)
46     proc{ p.save }.should raise_error(Page::UserNotSetError)
47   end
48   
49   it "updates the content when calling save" do
50     p = Page.find("HowTo", @repo)
51     p.user = users(:johan)
52     p.content = "bye cruel world!"
53     p.content.should == "bye cruel world!"
54     p.save.should match(/^[a-z0-9]{40}$/)
55     p2 = Page.find("HowTo", @repo)
56     p2.content.should == "bye cruel world!"
57   end
58   
59   it "creates a new page" do
60     p = Page.find("Hello", @repo)
61     p.new?.should == true
62     p.content.should == ""
63     p.user = users(:johan)
64     p.save.should match(/^[a-z0-9]{40}$/)
65     Page.find("Hello", @repo).new?.should == false
66     Page.find("HowTo", @repo).new?.should == false
67   end
68   
69   it "supports nested pages" do
70     p = Page.find("Hello/World", @repo)
71     p.new?.should == true
72     p.name.should == "Hello/World.markdown"
73     p.content = "foo"
74     p.user = users(:johan)
75     p.save.should match(/^[a-z0-9]{40}$/)
76     
77     p2 = Page.find("Hello/World", @repo)
78     p2.new?.should == false
79   end
80   
81   it "has a basename without the extension" do
82     p = Page.find("HowTo", @repo)
83     p.title.should == "HowTo"
84     
85     p.to_param.should == p.title
86   end
87   
88   it "should have a commit" do
89     p = Page.find("HowTo", @repo)
90     p.commit.should be_instance_of(Grit::Commit)
91     p.commit.committer.email.should == "johan@johansorensen.com"
92     p.commit.message.should == "first commit"
93     
94     p2 = Page.find("somethingnew", @repo)
95     p2.new?.should == true
96     p2.commit.should == nil
97   end
98   
99   it "should have a committed by user" do
100     p = Page.find("HowTo", @repo)
101     p.committed_by_user.should == users(:johan)
102   end
103   
104   it "should have the commit history of a page" do
105     p = Page.find("HowTo", @repo)
106     p.content = "something else"
107     p.user = users(:johan); p.save
108     
109     p.history.size.should == 2
110     p.history.first.message.should == "Updated HowTo"
111     p.history.last.message.should == "first commit"
112   end
113   
114   it "should validate the name of the page" do
115     p = Page.find("kernel#wtf", @repo)
116     p.user = users(:johan)
117     p.valid?.should == false
118     p.save.should == false
119     
120     Page.find("Kernel", @repo).valid?.should == true
121     Page.find("KernelWhat", @repo).valid?.should == true
122     Page.find("KernelWhatTheFsck", @repo).valid?.should == true
123   end
124   
125   def delete_test_repo
126     FileUtils.rm_rf(@path) if File.exist?(@path)
127   end
128   
129 end