Fix create_for_owner! in micro specs
[gitorious:mainline.git] / test / micro / commands / create_tracking_repository_command_test.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2013 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 "commands/create_tracking_repository_command"
20 require "models/repository_committerships"
21 require "ostruct"
22
23 class FakeApp < MessageHub
24   def admin?(actor, subject); true; end
25 end
26
27 class CreateTrackingRepositoryCommandTest < MiniTest::Spec
28   before do
29     @app = FakeApp.new
30     @user = User.new
31     @project = Project.new
32     @repository = Repository.new({
33         :id => 42,
34         :project => @project,
35         :user => @user,
36         :owner => @user
37       })
38     @command = CreateTrackingRepositoryCommand.new(@app, @repository)
39   end
40
41   describe "#build" do
42     it "adds new repository to project" do
43       repository = @command.build
44
45       assert_equal "tracking_repository_for_42", repository.name
46       assert_equal @user, repository.owner
47       assert_equal @user, repository.user
48       assert_equal @repository, repository.parent
49       assert_equal :tracking, repository.kind
50     end
51   end
52
53   describe "#execute" do
54     it "creates repository" do
55       count = Repository.count
56       repository = @command.execute(@command.build)
57
58       assert_equal count + 1, Repository.count
59       assert_equal "tracking_repository_for_42", repository.name
60       assert_equal @user, repository.owner
61       assert_equal @user, repository.user
62       assert_equal :tracking, repository.kind
63       refute repository.merge_requests_enabled
64     end
65
66     it "creates committership for owner" do
67       repository = @command.build
68       repository.committerships.expects(:create_for_owner!).with(@user, nil)
69       @command.execute(repository)
70     end
71
72     it "creates public project by default" do
73       Repository.stubs(:private_on_create?).returns(false)
74       repository = @command.execute(@command.build)
75
76       assert repository.public?
77     end
78
79     it "creates private project if parent is private" do
80       @repository.make_private
81       @repository.content_memberships = [OpenStruct.new(:member => { :id => 42 })]
82       repository = @command.execute(@command.build)
83
84       assert repository.private?
85       assert_equal [{ :id => 42 }], repository.content_memberships
86     end
87
88     it "posts creation message" do
89       repository = @command.build
90       repository.id = 13
91       repository = @command.execute(repository)
92
93       assert_equal 1, @app.messages.length
94       expected = {
95         :queue => "/queue/GitoriousTrackingRepositoryCreation",
96         :message => {:id => 13 }
97       }
98       assert_equal(expected, @app.messages.first)
99     end
100   end
101 end