Fixed git push pull of wiki repos
[gitorious:mainline.git] / test / functional / site_wiki_pages_controller_test.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2012 Gitorious AS
4 #
5 #   This program is free software: you can redistribute it and/or modify
6 #   it under the terms of the GNU Affero General Public License as published by
7 #   the Free Software Foundation, either version 3 of the License, or
8 #   (at your option) any later version.
9 #
10 #   This program is distributed in the hope that it will be useful,
11 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #   GNU Affero General Public License for more details.
14 #
15 #   You should have received a copy of the GNU Affero General Public License
16 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #++
18
19
20 require File.dirname(__FILE__) + '/../test_helper'
21
22 class SiteWikiPagesControllerTest < ActionController::TestCase
23
24   should_render_in_site_specific_context
25
26   should_enforce_ssl_for(:get, :edit)
27   should_enforce_ssl_for(:get, :git_access)
28   should_enforce_ssl_for(:get, :index)
29   should_enforce_ssl_for(:put, :preview)
30   
31   def setup
32     setup_ssl_from_config
33   end
34
35   context "top wiki route" do        
36     should "be generated correctly from action and controller" do
37       assert_generates "/wiki", :controller => "site_wiki_pages", :action => "index"
38     end
39     
40   end
41
42   context "resourceful routes" do
43     should "be generated for every action" do
44       assert_generates "/wiki", :controller => "site_wiki_pages", :action => "index"
45       assert_generates "/wiki/Testpage", :controller => "site_wiki_pages", :action => "show", :id => "Testpage"
46       assert_generates "/wiki/Testpage/edit", :controller => "site_wiki_pages", :action => "edit", :id => "Testpage"
47       assert_generates "/wiki/Testpage/history", :controller => "site_wiki_pages", :action => "history", :id => "Testpage"
48       assert_generates "/wiki/Testpage/preview", :controller => "site_wiki_pages", :action => "preview", :id => "Testpage"
49     end
50   end
51   
52   context "resource path convenience urls" do
53     should "be generated for every action" do
54       assert_generates site_wiki_pages_path, :controller => "site_wiki_pages", :action => "index"
55       assert_generates edit_site_wiki_page_path("Testpage"), :controller => "site_wiki_pages", :action => "edit", :id => "Testpage"
56       assert_generates site_wiki_page_path("Testpage"), :controller => "site_wiki_pages", :action => "show", :id => "Testpage"
57       assert_generates history_site_wiki_page_path("Testpage"), :controller => "site_wiki_pages", :action => "history", :id => "Testpage"
58       assert_generates preview_site_wiki_page_path("Testpage"), :controller => "site_wiki_pages", :action => "preview", :id => "Testpage"
59     end
60   end
61   
62   context "internal routes for git access" do
63     should "respond to /wiki/<sitename>/config" do
64       assert_recognizes({ :controller => "site_wiki_pages", :action => "config", :site_id =>"siteid"},
65                         "/wiki/siteid/config")
66     end
67     should "respond to /wiki/<sitename>/writable_by" do
68       assert_recognizes({ :controller => "site_wiki_pages", :action => "writable_by", :site_id =>"siteid"},
69                         "/wiki/siteid/writable_by")
70     end
71   end
72     
73   context "index action" do
74     should "render" do
75       git_stub = stub("git", {
76         :tree => stub(:contents => [mock("node", :name => "Foo"), mock("node", :name => "Bar")])
77       })
78       Site.any_instance.stubs(:wiki).returns(git_stub)
79       get :index
80       assert_response :success
81     end
82
83     should "render the history atom feed" do
84       grit = Grit::Repo.new(grit_test_repo("dot_git"), :is_bare => true)
85       Site.any_instance.stubs(:wiki).returns(grit)
86       get :index, :format => "atom"
87       assert_response :success
88       assert_equal grit.commits("master", 30), assigns(:commits)
89       assert_template "index.atom.builder"
90       assert_equal "max-age=1800, private", @response.headers['Cache-Control']
91     end
92   end
93
94   context "show" do
95     should "redirects to edit if the page is new, and user is logged in" do
96       login_as nil
97       page_stub = mock("page stub")
98       page_stub.expects(:new?).returns(true)
99       page_stub.expects(:title).at_least_once.returns("Home")
100       Site.any_instance.expects(:wiki).returns(mock("git"))
101       Page.expects(:find).returns(page_stub)
102
103       get :show, :id => "Home"
104       assert_response :success
105       assert_select ".help-box p", /page "Home" does not exist yet/
106     end
107   end
108
109   context 'Preview' do
110     setup do
111       page_stub = mock("page stub")
112       page_stub.expects(:content=)
113       page_stub.expects(:content).returns("Messing around with wiki markup")
114       page_stub.expects(:save).never
115       Site.any_instance.expects(:wiki).returns(mock("git"))
116       Page.expects(:find).returns(page_stub)
117     end
118
119     should 'render the preview for an existing page' do
120       login_as :johan
121       put :preview, :id => "Sandbox", :format => 'js', :page => {:content => 'Foo'}
122       assert_response :success
123     end
124   end
125
126   context "Git cloning instructions" do
127     should "render cloning instructions" do
128       get :git_access
129       assert_response :success
130     end
131   end
132
133   context "internal git access urls" do
134     should "respond to wiki/<sitename>/writable_by" do
135       get :writable_by
136       assert_response :success
137     end
138     should "respond to wiki/<sitename>/config" do
139       site = Site.create(:title => "Test");
140       get :config, {:site_id => site.id}
141       assert_response :success
142     end
143   end
144
145 end