jakewendt-simply_documents 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|