308201ae8ae8a5eedfeab230e63223cd2b47c525
[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.setup
22
23 require 'rack/test'
24 require 'rspec'
25
26 require 'coquelicot'
27
28 shared_context 'with Coquelicot::Application' do
29   def app
30     Coquelicot::Application
31   end
32
33   before do
34     app.set :environment, :test
35   end
36
37   around(:each) do |example|
38     path = Dir.mktmpdir('coquelicot')
39     begin
40       app.set :depot_path, path
41       example.run
42     ensure
43       FileUtils.remove_entry_secure path
44     end
45   end
46 end
47
48 module StoredFileHelpers
49   FIXTURES = { 'LICENSE-secret-1.0' => '1.0',
50                'small-secret-1.0' => 'small 1.0'
51              }
52
53   shared_context 'with a StoredFile fixture' do |name|
54     let(:stored_file_path) {
55       File.expand_path("../fixtures/#{name}/stored_file", __FILE__)
56     }
57     let(:stored_file) { Coquelicot::StoredFile.open(stored_file_path, 'secret') }
58     let(:reference) {
59       YAML.load_file(File.expand_path("../fixtures/#{name}/reference", __FILE__))
60     }
61   end
62
63   def for_all_file_versions(&block)
64     FIXTURES.each_pair do |name, description|
65       context "with a #{description} file" do
66         include_context 'with a StoredFile fixture', name
67         instance_eval &block
68       end
69     end
70   end
71 end
72
73 ::RSpec.configure { |c| c.extend StoredFileHelpers }