properly half-close both sides of the HTTP connection
[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                'LICENSE-secret-2.0' => '2.0'
52              }
53
54   shared_context 'with a StoredFile fixture' do |name|
55     let(:stored_file_path) {
56       File.expand_path("../fixtures/#{name}/stored_file", __FILE__)
57     }
58     let(:stored_file) { Coquelicot::StoredFile.open(stored_file_path, 'secret') }
59     let(:reference) {
60       YAML.load_file(File.expand_path("../fixtures/#{name}/reference", __FILE__))
61     }
62   end
63
64   def for_all_file_versions(&block)
65     FIXTURES.each_pair do |name, description|
66       context "with a #{description} file" do
67         include_context 'with a StoredFile fixture', name
68         instance_eval &block
69       end
70     end
71   end
72 end
73
74 ::RSpec.configure { |c| c.extend StoredFileHelpers }