jakewendt-simply_documents 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +70 -0
- data/app/controllers/documents_controller.rb +99 -0
- data/app/models/document.rb +28 -0
- data/app/views/documents/_document.html.erb +15 -0
- data/app/views/documents/_form.html.erb +13 -0
- data/app/views/documents/edit.html.erb +14 -0
- data/app/views/documents/index.html.erb +15 -0
- data/app/views/documents/new.html.erb +11 -0
- data/app/views/documents/preview.html.erb +17 -0
- data/config/document.yml +54 -0
- data/config/routes.rb +5 -0
- data/generators/simply_documents/USAGE +0 -0
- data/generators/simply_documents/simply_documents_generator.rb +87 -0
- data/generators/simply_documents/templates/autotest_simply_documents.rb +2 -0
- data/generators/simply_documents/templates/functional/documents_controller_test.rb +220 -0
- data/generators/simply_documents/templates/javascripts/documents.js +0 -0
- data/generators/simply_documents/templates/migrations/add_attachments_document_to_document.rb +19 -0
- data/generators/simply_documents/templates/migrations/create_documents.rb +19 -0
- data/generators/simply_documents/templates/migrations/polymorphicize_document_owner.rb +13 -0
- data/generators/simply_documents/templates/simply_documents.rake +6 -0
- data/generators/simply_documents/templates/stylesheets/documents.css +4 -0
- data/generators/simply_documents/templates/unit/document_test.rb +18 -0
- data/lib/jakewendt-simply_documents.rb +1 -0
- data/lib/simply_documents.rb +54 -0
- data/lib/simply_documents/autotest.rb +26 -0
- data/lib/simply_documents/factories.rb +4 -0
- data/lib/simply_documents/file_utils_extension.rb +18 -0
- data/lib/simply_documents/owner.rb +12 -0
- data/lib/simply_documents/tasks.rb +1 -0
- data/lib/simply_documents/test_tasks.rb +56 -0
- data/lib/tasks/application.rake +40 -0
- data/lib/tasks/database.rake +52 -0
- data/lib/tasks/documentation.rake +68 -0
- data/lib/tasks/rcov.rake +44 -0
- data/lib/tasks/simply_authorized.rake +2 -0
- data/lib/tasks/simply_helpful.rake +2 -0
- data/lib/tasks/simply_sessions.rake +5 -0
- data/lib/tasks/ucb_ccls_engine_tasks.rake +50 -0
- data/rails/init.rb +1 -0
- data/test/app/controllers/application_controller.rb +41 -0
- data/test/app/controllers/home_controller.rb +10 -0
- data/test/app/models/user.rb +3 -0
- data/test/assets/edit_save_wireframe.pdf +0 -0
- data/test/config/routes.rb +9 -0
- data/test/functional/documents/documents_controller_test.rb +222 -0
- data/test/unit/documents/document_test.rb +18 -0
- metadata +271 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
namespace :app do
|
2
|
+
|
3
|
+
# task :args_as_array do
|
4
|
+
# args = $*.dup.slice(1..-1)
|
5
|
+
# puts args.collect {|arg| "X:" << arg }.join("\n")
|
6
|
+
# exit
|
7
|
+
# end
|
8
|
+
|
9
|
+
desc "Add some expected users."
|
10
|
+
task :add_users => :environment do
|
11
|
+
puts "Adding users"
|
12
|
+
%w( 859908 228181 214766 180918 66458 808 768475
|
13
|
+
10883 86094 754783 769067 854720 16647 ).each do |uid|
|
14
|
+
puts " - Adding user with uid:#{uid}:"
|
15
|
+
User.find_create_and_update_by_uid(uid)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Deputize user by UID"
|
20
|
+
task :deputize => :environment do
|
21
|
+
puts
|
22
|
+
if ENV['uid'].blank?
|
23
|
+
puts "User's CalNet UID required."
|
24
|
+
puts "Usage: rake #{$*} uid=INTEGER"
|
25
|
+
puts
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
if !User.exists?(:uid => ENV['uid'])
|
29
|
+
puts "No user found with uid=#{ENV['uid']}."
|
30
|
+
puts
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
user = User.find(:first, :conditions => { :uid => ENV['uid'] })
|
34
|
+
puts "Found user #{user.displayname}. Deputizing..."
|
35
|
+
user.deputize
|
36
|
+
puts "User deputized: #{user.is_administrator?}"
|
37
|
+
puts
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
namespace :db do
|
2
|
+
|
3
|
+
desc "Create yml fixtures for given model in database\n" <<
|
4
|
+
"rake db:extract_fixtures_from pages"
|
5
|
+
task :extract_fixtures_from => :environment do
|
6
|
+
me = $*.shift
|
7
|
+
while( table_name = $*.shift )
|
8
|
+
File.open("#{RAILS_ROOT}/db/#{table_name}.yml", 'w') do |file|
|
9
|
+
data = table_name.singularize.capitalize.constantize.find(
|
10
|
+
:all).collect(&:attributes)
|
11
|
+
file.write data.inject({}) { |hash, record|
|
12
|
+
record.delete('created_at')
|
13
|
+
record.delete('updated_at')
|
14
|
+
hash["#{table_name}_#{record['id']}"] = record
|
15
|
+
hash
|
16
|
+
}.to_yaml
|
17
|
+
end
|
18
|
+
end
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Dump MYSQL table descriptions."
|
23
|
+
task :describe => :environment do
|
24
|
+
puts
|
25
|
+
puts "FYI: This task ONLY works on MYSQL databases."
|
26
|
+
puts
|
27
|
+
config = ActiveRecord::Base.connection.instance_variable_get(:@config)
|
28
|
+
#=> {:adapter=>"mysql", :host=>"localhost", :password=>nil, :username=>"root", :database=>"my_development", :encoding=>"utf8"}
|
29
|
+
|
30
|
+
tables = ActiveRecord::Base.connection.execute('show tables;')
|
31
|
+
while( table = tables.fetch_row ) do
|
32
|
+
puts "Table: #{table}"
|
33
|
+
|
34
|
+
# may have to include host and port
|
35
|
+
system("mysql --table=true " <<
|
36
|
+
"--user=#{config[:username]} " <<
|
37
|
+
"--password='#{config[:password]}' " <<
|
38
|
+
"--execute='describe #{table}' " <<
|
39
|
+
config[:database]);
|
40
|
+
|
41
|
+
#
|
42
|
+
# mysql formats the table well so doing it by hand is something that
|
43
|
+
# will have to wait until I feel like wasting my time
|
44
|
+
#
|
45
|
+
# columns = ActiveRecord::Base.connection.execute("describe #{table};")
|
46
|
+
# while( column = columns.fetch_hash ) do
|
47
|
+
# puts column.keys Extra Default Null Type Field Key
|
48
|
+
# end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#
|
2
|
+
# This file has been copied from rails
|
3
|
+
# .../rails-2.3.5/lib/tasks/documentation.rake
|
4
|
+
# so that parts of it could be modified.
|
5
|
+
|
6
|
+
namespace :doc do |doc|
|
7
|
+
|
8
|
+
# Rake::RDocTask.new("app") { |rdoc|
|
9
|
+
#
|
10
|
+
# We cannot overwrite or override an RDoc rake task.
|
11
|
+
# Redefining it here actually creates another
|
12
|
+
# of the same name and both are run when
|
13
|
+
# `rake doc:app` is called. The Rakefile
|
14
|
+
# is modified to handle the modifications.
|
15
|
+
#
|
16
|
+
# Actually, that's not entirely true. This would
|
17
|
+
# add another task, but you can remove and override
|
18
|
+
# a task. The rdoc_rails plugin was overriding my
|
19
|
+
# override, which caused all the frustration!!!
|
20
|
+
#
|
21
|
+
# }
|
22
|
+
|
23
|
+
plugins = FileList['vendor/plugins/**'].collect { |plugin|
|
24
|
+
File.basename(plugin) }
|
25
|
+
|
26
|
+
namespace :plugins do
|
27
|
+
# Define doc tasks for each plugin
|
28
|
+
plugins.each do |plugin|
|
29
|
+
|
30
|
+
# clear rails' Rake::Task of the same name
|
31
|
+
Rake::Task[plugin].clear_actions
|
32
|
+
Rake::Task[plugin].clear_prerequisites
|
33
|
+
|
34
|
+
Rake::RDocTask.new(plugin) { |rdoc|
|
35
|
+
plugin_base = "vendor/plugins/#{plugin}"
|
36
|
+
ENV['format'] ||= 'railsfish'
|
37
|
+
rdoc.rdoc_dir = "doc/plugins/#{plugin}"
|
38
|
+
rdoc.template = ENV['template'] if ENV['template']
|
39
|
+
rdoc.title = "#{plugin.titlecase} Plugin Documentation"
|
40
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
41
|
+
rdoc.options << '--charset' << 'utf-8'
|
42
|
+
rdoc.options << '--format' << ENV['format']
|
43
|
+
rdoc.rdoc_files.include("#{plugin_base}/lib/**/*.rb")
|
44
|
+
rdoc.rdoc_files.include("#{plugin_base}/app/**/*.rb")
|
45
|
+
|
46
|
+
%w( README README.rdoc ).each do |readme|
|
47
|
+
if File.exist?("#{plugin_base}/#{readme}")
|
48
|
+
rdoc.main = "#{plugin_base}/#{readme}"
|
49
|
+
break
|
50
|
+
end
|
51
|
+
end
|
52
|
+
%w( TODO.org MIT-LICENSE LICENSE CHANGELOG README README.rdoc ).each do |possible_file|
|
53
|
+
if File.exist?("#{plugin_base}/#{possible_file}")
|
54
|
+
rdoc.rdoc_files.include("#{plugin_base}/#{possible_file}")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
}
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
task :parse_readme => :environment do
|
63
|
+
require 'rdoc/markup/to_html'
|
64
|
+
h = RDoc::Markup::ToHtml.new
|
65
|
+
puts h.convert( File.read('README.rdoc') )
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
data/lib/tasks/rcov.rake
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#
|
2
|
+
# This is from Advanced Rails Recipes, page 277
|
3
|
+
#
|
4
|
+
|
5
|
+
# TODO use the version in simply_helpful and delete this
|
6
|
+
|
7
|
+
#namespace :test do
|
8
|
+
#
|
9
|
+
# desc 'Tracks test coverage with rcov'
|
10
|
+
# task :coverage do
|
11
|
+
# rm_f "coverage"
|
12
|
+
# rm_f "coverage.data"
|
13
|
+
#
|
14
|
+
# unless PLATFORM['i386-mswin32']
|
15
|
+
# rcov = "rcov --sort coverage --rails --aggregate coverage.data " <<
|
16
|
+
# "--text-summary -Ilib -T " <<
|
17
|
+
# "-x gems/*,db/migrate/*,jrails/*/*" <<
|
18
|
+
# ',\(eval\),\(recognize_optimized\),\(erb\)' << # needed in jruby
|
19
|
+
# ",yaml,yaml/*,lib/tmail/parser.y,jruby.jar!/*" << # needed in jruby
|
20
|
+
# ",html_test/*/*" <<
|
21
|
+
# ",html_test_extension/*/*"
|
22
|
+
# else
|
23
|
+
# rcov = "rcov.cmd --sort coverage --rails --aggregate " <<
|
24
|
+
# "coverage.data --text-summary -Ilib -T"
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# dirs = Dir.glob("test/**/*_test.rb").collect{|f|File.dirname(f)}.uniq
|
28
|
+
# lastdir = dirs.pop
|
29
|
+
# dirs.each do |dir|
|
30
|
+
# system("#{rcov} --no-html #{dir}/*_test.rb")
|
31
|
+
# end
|
32
|
+
# system("#{rcov} --html #{lastdir}/*_test.rb") unless lastdir.nil?
|
33
|
+
#
|
34
|
+
# unless PLATFORM['i386-mswin32']
|
35
|
+
## jruby-1.5.0.RC1 > PLATFORM
|
36
|
+
## => "java"
|
37
|
+
## system("open coverage/index.html") if PLATFORM['darwin']
|
38
|
+
# system("open coverage/index.html")
|
39
|
+
# else
|
40
|
+
# system("\"C:/Program Files/Mozilla Firefox/firefox.exe\" " +
|
41
|
+
# "coverage/index.html")
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
#end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#namespace :ccls do
|
2
|
+
# desc "Sync extra files from CCLS engine."
|
3
|
+
# task :sync do
|
4
|
+
#
|
5
|
+
## How to make this work ONLY for apps and not self/plugin/engine.
|
6
|
+
#
|
7
|
+
# FileUtils.mkdir_p('db/migrate') unless File.directory?('db/migrate')
|
8
|
+
# rsync_command = <<-EOF.gsub(/\s+/,' ').squish!
|
9
|
+
# rsync -ruv
|
10
|
+
# --exclude='versions'
|
11
|
+
# vendor/plugins/ucb_ccls_engine/db/migrate db
|
12
|
+
# EOF
|
13
|
+
# system rsync_command
|
14
|
+
#
|
15
|
+
# FileUtils.mkdir_p('public') unless File.directory?('public')
|
16
|
+
# rsync_command = <<-EOF.gsub(/\s+/,' ').squish!
|
17
|
+
# rsync -ruv
|
18
|
+
# --exclude='versions'
|
19
|
+
# vendor/plugins/ucb_ccls_engine/public .
|
20
|
+
# EOF
|
21
|
+
# system rsync_command
|
22
|
+
#
|
23
|
+
# rsync_command = <<-EOF.gsub(/\s+/,' ').squish!
|
24
|
+
# rsync -ruv
|
25
|
+
# --exclude='app'
|
26
|
+
# --exclude='assets'
|
27
|
+
# --exclude='config'
|
28
|
+
# --exclude='db'
|
29
|
+
# --exclude='extensions'
|
30
|
+
# --exclude='fixtures'
|
31
|
+
# --exclude='helpers'
|
32
|
+
# --exclude='log'
|
33
|
+
# --exclude='versions'
|
34
|
+
# --exclude='test_helper.rb'
|
35
|
+
# --exclude='engine_\*_test.rb'
|
36
|
+
# vendor/plugins/ucb_ccls_engine/test .
|
37
|
+
# EOF
|
38
|
+
# system rsync_command
|
39
|
+
# end
|
40
|
+
#end
|
41
|
+
|
42
|
+
#
|
43
|
+
# If the gem doesn't exist then this would block
|
44
|
+
# the usage of rake gems:install
|
45
|
+
# If we wrap it in this condition, it works fine.
|
46
|
+
#
|
47
|
+
if Gem.searcher.find('paperclip')
|
48
|
+
require 'paperclip'
|
49
|
+
load "tasks/paperclip.rake"
|
50
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'jakewendt-simply_documents'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class ApplicationController < ActionController::Base
|
2
|
+
|
3
|
+
before_filter :login_required
|
4
|
+
|
5
|
+
helper :all # include all helpers, all the time
|
6
|
+
|
7
|
+
helper_method :current_user, :logged_in?
|
8
|
+
|
9
|
+
# See ActionController::RequestForgeryProtection for details
|
10
|
+
protect_from_forgery
|
11
|
+
|
12
|
+
def logged_in?
|
13
|
+
!current_user.nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
def current_user_required
|
17
|
+
unless logged_in?
|
18
|
+
access_denied("goodbye","/some_fake_login_path")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
alias_method :login_required, :current_user_required
|
22
|
+
|
23
|
+
def current_user
|
24
|
+
@current_user ||= if( session && session[:uid] )
|
25
|
+
# if the user model hasn't been loaded yet
|
26
|
+
# this will return nil and fail.
|
27
|
+
User.find_by_uid(session[:uid])
|
28
|
+
else
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def redirections
|
34
|
+
@redirections ||= HashWithIndifferentAccess.new({
|
35
|
+
:not_be_user => {
|
36
|
+
:redirect_to => user_path(current_user)
|
37
|
+
}
|
38
|
+
})
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
Binary file
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
|
3
|
+
map.resource :home, :only => :show
|
4
|
+
map.root :controller => :home, :action => :show
|
5
|
+
|
6
|
+
# map.logout 'logout', :controller => 'sessions', :action => 'destroy'
|
7
|
+
# map.resource :session, :only => [ :destroy ]
|
8
|
+
|
9
|
+
end
|
@@ -0,0 +1,222 @@
|
|
1
|
+
#require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class SimplyDocuments::DocumentsControllerTest < ActionController::TestCase
|
5
|
+
tests DocumentsController
|
6
|
+
|
7
|
+
ASSERT_ACCESS_OPTIONS = {
|
8
|
+
:model => 'Document',
|
9
|
+
:actions => [:new,:create,:edit,:update,:destroy,:index],
|
10
|
+
:method_for_create => :factory_create,
|
11
|
+
:attributes_for_create => :factory_attributes
|
12
|
+
}
|
13
|
+
|
14
|
+
def factory_create
|
15
|
+
Factory(:document)
|
16
|
+
end
|
17
|
+
def factory_attributes
|
18
|
+
Factory.attributes_for(:document)
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_access_with_https
|
22
|
+
assert_access_with_login({
|
23
|
+
:logins => [:super_user,:admin,:editor]})
|
24
|
+
|
25
|
+
assert_no_access_with_http
|
26
|
+
assert_no_access_with_login({
|
27
|
+
:logins => [:interviewer,:reader,:active_user] })
|
28
|
+
assert_no_access_without_login
|
29
|
+
|
30
|
+
assert_no_access_with_login(
|
31
|
+
:attributes_for_create => nil,
|
32
|
+
:method_for_create => nil,
|
33
|
+
:actions => nil,
|
34
|
+
:suffix => " and invalid id",
|
35
|
+
:login => :superuser,
|
36
|
+
:redirect => :documents_path,
|
37
|
+
:edit => { :id => 0 },
|
38
|
+
:update => { :id => 0 },
|
39
|
+
:destroy => { :id => 0 }
|
40
|
+
)
|
41
|
+
|
42
|
+
%w( super_user admin editor ).each do |cu|
|
43
|
+
|
44
|
+
|
45
|
+
## still only privacy filter is based on "may_maintain_pages"
|
46
|
+
## which isn't really gonna work
|
47
|
+
# test "should get redirect to public s3 document with #{cu} login" do
|
48
|
+
# Document.any_instance.stubs(:s3_public?).returns(true)
|
49
|
+
# document = Factory(:document, :document_file_name => 'bogus_file_name')
|
50
|
+
# assert !File.exists?(document.document.path)
|
51
|
+
# login_as send(cu)
|
52
|
+
# get :show, :id => document.id
|
53
|
+
# assert_redirected_to document.document.url
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# test "should get redirect to private s3 document with #{cu} login" do
|
57
|
+
# Document.any_instance.stubs(:s3_private?).returns(true)
|
58
|
+
# document = Factory(:document, :document_file_name => 'bogus_file_name')
|
59
|
+
# assert !File.exists?(document.document.path)
|
60
|
+
# login_as send(cu)
|
61
|
+
# get :show, :id => document.id
|
62
|
+
# assert_redirected_to document.s3_url
|
63
|
+
# end
|
64
|
+
|
65
|
+
# Add may_download_document
|
66
|
+
|
67
|
+
# test "should get redirect to public s3 document with #{cu} login" do
|
68
|
+
# Document.any_instance.stubs(:s3_public?).returns(true)
|
69
|
+
# document = Factory(:document, :document_file_name => 'bogus_file_name')
|
70
|
+
# assert !File.exists?(document.document.path)
|
71
|
+
# login_as send(cu)
|
72
|
+
# get :show, :id => document.id
|
73
|
+
# assert_redirected_to document.document.url
|
74
|
+
# end
|
75
|
+
|
76
|
+
test "should get redirect to private s3 document with #{cu} login" do
|
77
|
+
Document.has_attached_file :document, {
|
78
|
+
:s3_headers => {
|
79
|
+
'x-amz-storage-class' => 'REDUCED_REDUNDANCY' },
|
80
|
+
:s3_permissions => :private,
|
81
|
+
:storage => :s3,
|
82
|
+
:s3_protocol => 'https',
|
83
|
+
:s3_credentials => "#{Rails.root}/config/s3.yml",
|
84
|
+
:bucket => 'ccls',
|
85
|
+
:path => "documents/:id/:filename"
|
86
|
+
}
|
87
|
+
|
88
|
+
# Since the REAL S3 credentials are only in production
|
89
|
+
# Bad credentials make exists? return true????
|
90
|
+
Rails.stubs(:env).returns('production')
|
91
|
+
document = Factory(:document, :document_file_name => 'bogus_file_name')
|
92
|
+
assert !document.document.exists?
|
93
|
+
assert !File.exists?(document.document.path)
|
94
|
+
|
95
|
+
AWS::S3::S3Object.stubs(:exists?).returns(true)
|
96
|
+
|
97
|
+
login_as send(cu)
|
98
|
+
get :show, :id => document.id
|
99
|
+
assert_response :redirect
|
100
|
+
# assert_match %r{\Ahttp(s)?://s3.amazonaws.com/ccls/documents/\d+/bogus_file_name\.\?AWSAccessKeyId=\w+&Expires=\d+&Signature=.+\z}, @response.redirected_to
|
101
|
+
# newer versions of paperclip do not include the trailing "." after file name
|
102
|
+
assert_match %r{\Ahttp(s)?://s3.amazonaws.com/ccls/documents/\d+/bogus_file_name\?AWSAccessKeyId=\w+&Expires=\d+&Signature=.+\z}, @response.redirected_to
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
test "should NOT download document with nil document and #{cu} login" do
|
111
|
+
document = Factory(:document)
|
112
|
+
assert document.document.path.blank?
|
113
|
+
login_as send(cu)
|
114
|
+
get :show, :id => document.id
|
115
|
+
assert_redirected_to preview_document_path(document)
|
116
|
+
assert_not_nil flash[:error]
|
117
|
+
end
|
118
|
+
|
119
|
+
test "should NOT download document with no document and #{cu} login" do
|
120
|
+
document = Factory(:document, :document_file_name => 'bogus_file_name')
|
121
|
+
assert !File.exists?(document.document.path)
|
122
|
+
login_as send(cu)
|
123
|
+
get :show, :id => document.id
|
124
|
+
assert_redirected_to preview_document_path(document)
|
125
|
+
assert_not_nil flash[:error]
|
126
|
+
end
|
127
|
+
|
128
|
+
test "should NOT download nonexistant document with #{cu} login" do
|
129
|
+
assert !File.exists?('some_fake_file_name.doc')
|
130
|
+
login_as send(cu)
|
131
|
+
get :show, :id => 'some_fake_file_name',:format => 'doc'
|
132
|
+
assert_redirected_to documents_path
|
133
|
+
assert_not_nil flash[:error]
|
134
|
+
end
|
135
|
+
|
136
|
+
test "should preview document with document and #{cu} login" do
|
137
|
+
document = Factory(:document)
|
138
|
+
login_as send(cu)
|
139
|
+
get :preview, :id => document.id
|
140
|
+
assert_response :success
|
141
|
+
assert_nil flash[:error]
|
142
|
+
end
|
143
|
+
|
144
|
+
test "should download document by id with document and #{cu} login" do
|
145
|
+
document = Document.create!(Factory.attributes_for(:document,
|
146
|
+
:document => File.open(File.dirname(__FILE__) +
|
147
|
+
'/../../assets/edit_save_wireframe.pdf')))
|
148
|
+
login_as send(cu)
|
149
|
+
get :show, :id => document.reload.id
|
150
|
+
assert_nil flash[:error]
|
151
|
+
assert_not_nil @response.headers['Content-disposition'].match(
|
152
|
+
/attachment;.*pdf/)
|
153
|
+
document.destroy
|
154
|
+
end
|
155
|
+
|
156
|
+
test "should download document by name with document and #{cu} login" do
|
157
|
+
document = Document.create!(Factory.attributes_for(:document,
|
158
|
+
:document => File.open(File.dirname(__FILE__) +
|
159
|
+
'/../../assets/edit_save_wireframe.pdf')))
|
160
|
+
login_as send(cu)
|
161
|
+
get :show, :id => 'edit_save_wireframe',
|
162
|
+
:format => 'pdf'
|
163
|
+
assert_nil flash[:error]
|
164
|
+
assert_not_nil @response.headers['Content-disposition'].match(
|
165
|
+
/attachment;.*pdf/)
|
166
|
+
document.destroy
|
167
|
+
end
|
168
|
+
|
169
|
+
test "should NOT create invalid document with #{cu} login" do
|
170
|
+
login_as send(cu)
|
171
|
+
assert_no_difference('Document.count') do
|
172
|
+
post :create, :document => {}
|
173
|
+
end
|
174
|
+
assert_not_nil flash[:error]
|
175
|
+
assert_template 'new'
|
176
|
+
assert_response :success
|
177
|
+
end
|
178
|
+
|
179
|
+
test "should NOT update invalid document with #{cu} login" do
|
180
|
+
login_as send(cu)
|
181
|
+
put :update, :id => Factory(:document).id,
|
182
|
+
:document => { :title => "a" }
|
183
|
+
assert_not_nil flash[:error]
|
184
|
+
assert_template 'edit'
|
185
|
+
assert_response :success
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
%w( interviewer reader active_user ).each do |cu|
|
191
|
+
|
192
|
+
test "should NOT preview document with #{cu} login" do
|
193
|
+
document = Factory(:document)
|
194
|
+
login_as send(cu)
|
195
|
+
get :preview, :id => document.id
|
196
|
+
assert_redirected_to root_path
|
197
|
+
assert_not_nil flash[:error]
|
198
|
+
end
|
199
|
+
|
200
|
+
test "should NOT download document with #{cu} login" do
|
201
|
+
document = Factory(:document)
|
202
|
+
login_as send(cu)
|
203
|
+
get :show, :id => document.id
|
204
|
+
assert_redirected_to root_path
|
205
|
+
assert_not_nil flash[:error]
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
test "should NOT preview document without login" do
|
211
|
+
document = Factory(:document)
|
212
|
+
get :preview, :id => document.id
|
213
|
+
assert_redirected_to_login
|
214
|
+
end
|
215
|
+
|
216
|
+
test "should NOT download document without login" do
|
217
|
+
document = Factory(:document)
|
218
|
+
get :show, :id => document.id
|
219
|
+
assert_redirected_to_login
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|