Implement a first batch of tests
[coquelicot.git] / test_coquelicot.rb
1 $:.unshift File.join(File.dirname(__FILE__), '../rack-test/lib')
2
3 require 'coquelicot'
4 require 'spec'
5 require 'rack/test'
6 require 'hpricot'
7
8 set :environment, :test
9
10 describe 'Coquelicot' do
11   include Rack::Test::Methods
12
13   def app
14     Sinatra::Application
15   end
16
17   it "should offer an upload form" do
18     get '/'
19     last_response.should be_ok
20     doc = Hpricot(last_response.body)
21     (doc/"form#upload").should have(1).items
22   end
23
24   it "should accept an uploaded file" do
25     post '/upload', 'file' => Rack::Test::UploadedFile.new(__FILE__, 'text/x-script.ruby')
26     last_response.redirect?.should be_true
27     last_response['Location'].should eql("ready/#{File.basename(__FILE__)}")
28   end
29
30   it "should allow retrieval of an uploaded file" do
31     post '/upload', 'file' => Rack::Test::UploadedFile.new(__FILE__, 'text/x-script.ruby')
32     follow_redirect!
33     last_response.should be_ok
34     doc = Hpricot(last_response.body)
35     url = (doc/'a').collect { |a| a.attributes['href'] }.
36       select { |h| h.start_with? "http://#{last_request.host}/" }[0]
37     get url
38     last_response.should be_ok
39     last_response['Content-Type'].should eql('text/x-script.ruby')
40     last_response.body.should eql(File.new(__FILE__).read)
41   end
42
43   it "should prevent upload without a password"
44
45   it "should not store an uploaded file in cleartext"
46
47   it "should generate a random URL to retrieve a file"
48
49   it "should store files with a different name than then one in URL"
50
51   it "should encode the encryption key in URL when no password has been specified"
52
53   it "should not encode the encryption key in URL when no password has been specified"
54
55   it "should give a random password when asked"
56
57   it "should allow retrieval of a password protected file"
58
59   it "should not allow retrieval of a password protected file without the password"
60
61   it "should not allow retrieval after the time limit has expired"
62
63   it "should cleanup expired files"
64 end