properly half-close both sides of the HTTP connection
[coquelicot.git] / spec / coquelicot / app_spec.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 require 'spec_helper'
18 require 'capybara/dsl'
19
20 describe Coquelicot::Application do
21   include Rack::Test::Methods
22   include Capybara::DSL
23   Capybara.app = Coquelicot::Application
24
25   include_context 'with Coquelicot::Application'
26
27   describe 'get /' do
28     before do
29       visit '/'
30     end
31     it 'should display the maximum file size' do
32       find(:xpath, '//label[@for="file"]/following::*[@class="note"]').
33           should have_content("Max. size: #{Coquelicot.settings.max_file_size.as_size}")
34     end
35   end
36
37   describe 'get /README' do
38     before do
39       visit '/README'
40     end
41     it 'should display the README file' do
42       title = File.open(File.expand_path('../../../README', __FILE__)) { |f| f.readline.strip }
43       find('h1').should have_content(title)
44     end
45   end
46
47   describe 'post /authenticate' do
48     context 'when given a request with too much input' do
49       before do
50         # README is bigger than 5 kiB
51         path = File.expand_path('../../../README', __FILE__)
52         post '/authenticate', :file => Rack::Test::UploadedFile.new(path, 'text/plain')
53       end
54       it 'should get status 413 (Request entity too large)' do
55         last_response.status.should == 413
56       end
57     end
58   end
59 end