turn Coquelicot into a gem
[coquelicot.git] / spec / spec_helper.rb
1 # Coquelicot: "one-click" file sharing with a focus on users' privacy.
2 # Copyright © 2010-2012 potager.org <jardiniers@potager.org>
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as
6 # published by the Free Software Foundation, either version 3 of the
7 # License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 ENV['RACK_ENV'] = 'test'
18
19 require 'rubygems'
20 require 'bundler'
21 Bundler.require(:default, :development)
22 Bundler.setup
23
24 require 'rack/test'
25 require 'rspec'
26 require 'stringio'
27
28 require 'coquelicot'
29
30 shared_context 'with Coquelicot::Application' do
31   def app
32     Coquelicot::Application
33   end
34
35   before do
36     app.set :environment, :test
37   end
38
39   around(:each) do |example|
40     path = Dir.mktmpdir('coquelicot')
41     begin
42       app.set :depot_path, path
43       example.run
44     ensure
45       FileUtils.remove_entry_secure path
46     end
47   end
48 end
49
50 module StoredFileHelpers
51   FIXTURES = { 'LICENSE-secret-1.0' => '1.0',
52                'small-secret-1.0' => 'small 1.0',
53                'LICENSE-secret-2.0' => '2.0'
54              }
55
56   shared_context 'with a StoredFile fixture' do |name|
57     let(:stored_file_path) {
58       File.expand_path("../fixtures/#{name}/stored_file", __FILE__)
59     }
60     let(:stored_file) { Coquelicot::StoredFile.open(stored_file_path, 'secret') }
61     let(:reference) {
62       YAML.load_file(File.expand_path("../fixtures/#{name}/reference", __FILE__))
63     }
64   end
65
66   def for_all_file_versions(&block)
67     FIXTURES.each_pair do |name, description|
68       context "with a #{description} file" do
69         include_context 'with a StoredFile fixture', name
70         instance_eval &block
71       end
72     end
73   end
74 end
75
76 module CoquelicotSpecHelpers
77   # written by cash on
78   # http://rails-bestpractices.com/questions/1-test-stdin-stdout-in-rspec
79   def capture(*streams)
80     streams.map! { |stream| stream.to_s }
81     begin
82       result = StringIO.new
83       streams.each { |stream| eval "$#{stream} = result" }
84       yield
85     ensure
86       streams.each { |stream| eval("$#{stream} = #{stream.upcase}") }
87     end
88     result.string
89   end
90 end
91
92 ::RSpec.configure do |c|
93   c.extend StoredFileHelpers
94   c.include CoquelicotSpecHelpers
95 end