Handle wiki updates and web hooks from the PushProcessor.
[gitorious:mainline.git] / test / unit / lib / wiki_commit_log_parser_test.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2011 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 require "test_helper"
20 class WikiCommitLogParserTest < ActiveSupport::TestCase
21   NULL_SHA = "0" * 40
22   SHA = "a" * 40
23   context "Parsing modified files from commit log" do
24     setup do
25       @parser = Gitorious::Wiki::CommitParser.new      
26     end
27
28     should "extract the details for a single commit" do
29       output =<<COMMIT
30 commit e88d589c7c833152efeee05bf7e4b54e958be876
31 Author: Marius Mathiesen <marius@shortcut.no>
32
33     Adding a hidden file here
34
35 A       Home.markdown
36 M       SomethingElse.markdown
37 COMMIT
38       result = @parser.parse_commit(output.split("\n"))
39       assert_equal "Adding a hidden file here", result.commit_message
40       assert_equal "marius@shortcut.no", result.email
41       assert_equal ["Home.markdown"], result.added_file_names
42       assert_equal ["SomethingElse.markdown"], result.modified_file_names
43     end
44   end
45
46   context "Parsing more that one commit" do
47     setup do
48       @output =<<COMMIT
49 commit e88d589c7c833152efeee05bf7e4b54e958be876
50 Author: Marius Mathiesen <marius@shortcut.no>
51
52     Adding a hidden file here
53
54 A       Home.markdown
55 M       SomethingElse.markdown
56
57 commit fffdaa0
58 Author: Marius Mathiesen <marius@shortcut.no>
59
60     Something else
61
62 M       Home.markdown
63 M       SomethingElse.markdown
64 COMMIT
65     end
66
67     should "extract 2 commit objects" do
68       parser = Gitorious::Wiki::CommitParser.new
69       result = parser.parse(@output)
70       assert_equal 2, result.size
71     end
72   end
73
74   context "With an actual repository" do
75     setup do
76       @parser = Gitorious::Wiki::CommitParser.new
77       @grit = mock
78       @git = mock(:git => @grit)
79       @repo = mock(:git => @git)
80     end
81
82     should "call in to git to fetch the commit log" do
83       output =<<COMMIT
84 commit e88d589c7c833152efeee05bf7e4b54e958be876
85 Author: Marius Mathiesen <marius@shortcut.no>
86
87     Adding a hidden file here
88
89 A       Home.markdown
90 M       SomethingElse.markdown
91 M       NeverMind.markdown
92 COMMIT
93       @grit.expects(:log).returns(output)
94       spec = PushSpecParser.new(NULL_SHA, SHA, "refs/heads/master")
95       result = @parser.fetch_from_git(@repo, spec).first
96       assert_equal 2, result.modified_file_names.size
97     end
98   end
99
100   context "Extracting the page name" do
101     setup do
102       @commit = Gitorious::Wiki::Commit.new
103     end
104     
105     should "discard file suffix for added files" do
106       @commit.added_file_names = ["Readme.markdown", "License.txt"]
107       assert_equal %w(Readme License), @commit.added_page_names
108     end
109
110     should "discard file suffix for modified files" do
111       @commit.modified_file_names = ["Readme.markdown", "License.txt"]
112       assert_equal %w(Readme License), @commit.modified_page_names
113     end
114
115     should "behave when no added files exist" do
116       assert_equal [], @commit.modified_page_names
117     end
118
119     should "not mark modified non-wiki files as wiki pages" do
120       parser = Gitorious::Wiki::CommitParser.new
121       result = parser.extract_modified_files_from_git_output("M    nevermind.markdown")
122       assert_equal [], result
123       result = parser.extract_modified_files_from_git_output("M    Nevermind.markdown")
124       assert_equal ["Nevermind.markdown"], result
125     end
126   end
127 end