Further repo browser/Dolt integration work
[gitorious:mainline.git] / test / fast_test_helper.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 require "minitest/autorun"
19 require "mocha"
20 require "pathname"
21 require((defined?(Rails) ? Rails.root : "") + "config/initializers/gitorious_config")
22
23 # Use this class in old test cases that dpeends on Shoulda.
24 # http://metaskills.net/2011/01/25/from-test-unit-shoulda-to-minitest-spec-minishoulda/
25 module MiniTest
26   class Shoulda < MiniTest::Spec
27     class << self
28       alias :setup :before unless defined?(Rails)
29       alias :teardown :after unless defined?(Rails)
30       alias :should :it
31       alias :context :describe
32     end
33
34     alias :assert_no_match :refute_match
35     alias :assert_not_nil :refute_nil
36     alias :assert_not_equal :refute_equal
37
38     def assert_nothing_raised(&block)
39       block.call # this assertion no longer exists!
40     end
41   end
42 end
43
44 # Constants used throughout
45 NULL_SHA = "0" * 40
46 SHA = "a" * 40
47 OTHER_SHA = "a" * 40
48
49 # Model mocks
50
51 module TestHelper
52   class Model
53     def initialize(attributes = {})
54       @is_new = true
55       attributes.each { |k, v| send(:"#{k}=", v) }
56     end
57
58     def write_attribute(key, val); end
59     def update_attribute(key, val); end
60     def valid?; end
61     def save; @is_new = false; end
62     def save!; save; end
63     def new_record?; @is_new; end
64     def self.first; new; end
65   end
66 end
67
68 if !defined?(Rails)
69   class User < TestHelper::Model
70     attr_accessor :login, :fullname, :email, :password, :password_confirmation,
71     :terms_of_use, :aasm_state, :activated_at
72
73     def initialize(attributes = {})
74       super
75       @@users ||= {}
76       @@users[attributes[:email]] = self
77     end
78
79     def title; login; end
80     def reset_password!; end
81     def self.find_by_login(login); end
82
83     def self.find_by_email_with_aliases(email)
84       @@users ||= {}
85       @@users[email]
86     end
87   end
88
89   class Repository < TestHelper::Model
90     attr_accessor :project, :user, :name, :hooks, :description, :browse_url,
91       :clones, :owner, :full_repository_path
92
93     def last_pushed_at
94       Time.now
95     end
96   end
97
98   class Project < TestHelper::Model
99     attr_accessor :title, :slug, :description, :events
100
101     def create_event(action_id, target, user, data = nil, body = nil, date = Time.now.utc)
102       self.events ||= []
103       self.events.push({
104         :action_id => action_id,
105         :target => target,
106         :user => user,
107         :data => data,
108         :body => body,
109         :date => date
110       })
111     end
112   end
113
114   class Event < TestHelper::Model
115     attr_accessor :action, :user, :data, :project, :target, :body
116   end
117 end
118
119 # Rails shims
120
121 if !defined?(Rails)
122   module Rails
123     class Cache
124       def fetch(key)
125         yield
126       end
127     end
128
129     class Environment
130       def to_s; "test"; end
131       def test?; true; end
132       def production?; false; end
133       def development?; false; end
134     end
135
136     class Logger
137       def debug(message); end
138     end
139
140     def self.cache
141       @cache ||= Cache.new
142     end
143
144     def self.env
145       Environment.new
146     end
147
148     def self.logger
149       Logger.new
150     end
151
152     def self.root
153       Pathname(__FILE__) + "../../"
154     end
155   end
156
157   class NilClass; def blank?; true; end; end
158   class Array; def blank?; self.count == 0; end; end
159   class TrueClass; def blank?; false; end; end
160   class FalseClass; def blank?; true; end; end
161
162   class String
163     def blank?; self == ""; end
164
165     def constantize
166       self.split("::").inject(Object) do |mod, name|
167         mod.const_get(name)
168       end
169     end
170   end
171
172   class Array
173     def sum(&block)
174       self.inject(0) { |s, n| s + block.call(n) }
175     end
176   end
177
178   class Fixnum
179     def days; self * 24 * 60 * 60; end
180     def day; days; end
181     def ago; Time.now - self; end
182   end
183 end