Remove SslRequirement and associated logic
[gitorious:mainline.git] / test / micro / gitorious / web_hook_generator_test.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2011-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 require "fast_test_helper"
19 require "vendor/grit/lib/grit"
20 require "push_spec_parser"
21 require "gitorious/web_hook_generator"
22
23 class WebHookGeneratorTest < MiniTest::Shoulda
24   def setup
25     @repository = Repository.new
26     @repository.project = Project.new(:slug => "my-project", :description => "Yes, mine")
27     @repository.clones = [{}]
28     @repository.browse_url = "http://gitorious.test/my-project/name"
29
30     grit = mock
31     grit.stubs(:commits_between).with(SHA, OTHER_SHA).returns([grit_commit])
32     @repository.stubs(:git).returns(grit)
33
34     @spec = PushSpecParser.new(SHA, OTHER_SHA, "refs/heads/master")
35     @user = @repository.owner = User.new(:login => "johan")
36
37     @generator = Gitorious::WebHookGenerator.new(@repository, @spec, @user)
38   end
39
40   context "Generating payload" do
41     should "contain the start sha" do
42       payload = @generator.payload
43       assert_equal SHA, payload[:before]
44     end
45
46     should "contain the end sha" do
47       payload = @generator.payload
48       assert_equal OTHER_SHA, payload[:after]
49     end
50
51     should "contain the username of the pusher" do
52       payload = @generator.payload
53       assert_equal @user.login, payload[:pushed_by]
54     end
55
56     should "contain the ref pushed to" do
57       payload = @generator.payload
58       assert_equal "master", payload[:ref]
59     end
60
61     should "contain the pushed_at in XML schema" do
62       payload = @generator.payload
63       assert_equal @repository.last_pushed_at.xmlschema, payload[:pushed_at]
64     end
65
66     should "contain project name and description" do
67       project = @repository.project
68       project.update_attribute(:slug, "my-project")
69       project.update_attribute(:description, "Yes, mine")
70       payload = @generator.payload
71
72       assert_equal "my-project", payload[:project][:name]
73       assert_equal "Yes, mine", payload[:project][:description]
74     end
75
76     should "contain repository information" do
77       @repository.name = "name"
78       @repository.description = "Terrible hacks"
79       payload = @generator.payload
80
81       assert_equal Gitorious.url("/#{@repository.project.slug}/#{@repository.name}"), payload[:repository][:url]
82       assert_equal "name", payload[:repository][:name]
83       assert_equal "Terrible hacks", payload[:repository][:description]
84       assert_equal 1, payload[:repository][:clones]
85
86       assert_equal({ :name => "johan" }, payload[:repository][:owner])
87     end
88   end
89
90   context "commits" do
91     should "get commits between start and end sha" do
92       grit = mock
93       grit.expects(:commits_between).with(SHA, OTHER_SHA).returns([])
94       @repository.stubs(:git).returns(grit)
95       @generator.fetch_commits
96     end
97
98     should "return list of commit details" do
99       commits = @generator.fetch_commits
100
101       assert_equal 1, commits.count
102       commit = commits.first
103
104       assert_equal "jane@g.org", commit[:author][:email]
105       assert_equal "Jane Author", commit[:author][:name]
106       assert_equal 2.days.ago.xmlschema, commit[:committed_at]
107       assert_equal SHA, commit[:id]
108       assert_equal "Awesome sauce", commit[:message]
109       assert_equal 1.day.ago.xmlschema, commit[:timestamp]
110       assert_equal "#{@repository.browse_url}/commit/#{SHA}", commit[:url]
111     end
112
113     should "contain a list of commits" do
114       payload = @generator.payload
115
116       assert_kind_of Array, payload[:commits]
117     end
118   end
119
120   def grit_commit
121     committer = Grit::Actor.new("John Committer", "noone@invalid.org")
122     author = Grit::Actor.new("Jane Author", "jane@g.org")
123     grit_commit = Grit::Commit.new(nil, SHA, [], nil,
124       author, 1.day.ago,
125       committer, 2.days.ago,
126       ["Awesome sauce"])
127   end
128 end