fine_print 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +74 -45
  3. data/Rakefile +9 -9
  4. data/app/assets/javascripts/application.js~ +16 -0
  5. data/app/assets/javascripts/fine_print/application.js +8 -2
  6. data/app/controllers/fine_print/application_controller.rb +9 -7
  7. data/app/controllers/fine_print/application_controller.rb~ +9 -7
  8. data/app/controllers/fine_print/contracts_controller.rb +79 -0
  9. data/app/controllers/fine_print/contracts_controller.rb~ +79 -0
  10. data/app/controllers/fine_print/home_controller.rb +1 -11
  11. data/app/controllers/fine_print/home_controller.rb~ +2 -11
  12. data/app/controllers/fine_print/signatures_controller.rb +14 -0
  13. data/app/controllers/fine_print/signatures_controller.rb~ +14 -0
  14. data/app/helpers/fine_print/application_helper.rb +7 -0
  15. data/app/helpers/fine_print/application_helper.rb~ +7 -0
  16. data/app/helpers/fine_print/contracts_helper.rb~ +7 -0
  17. data/app/models/fine_print/contract.rb +96 -0
  18. data/app/models/fine_print/contract.rb~ +100 -0
  19. data/app/models/fine_print/signature.rb +25 -0
  20. data/app/models/fine_print/signature.rb~ +25 -0
  21. data/app/views/fine_print/contracts/_form.html.erb +35 -0
  22. data/app/views/fine_print/contracts/_form.html.erb~ +35 -0
  23. data/app/views/fine_print/contracts/edit.html.erb +10 -0
  24. data/app/views/fine_print/contracts/index.html.erb +43 -0
  25. data/app/views/fine_print/contracts/index.html.erb~ +43 -0
  26. data/app/views/fine_print/contracts/new.html.erb +9 -0
  27. data/app/views/fine_print/contracts/new_version.html.erb +9 -0
  28. data/app/views/fine_print/contracts/show.html.erb +33 -0
  29. data/app/views/fine_print/contracts/show.html.erb~ +35 -0
  30. data/app/views/fine_print/home/index.html.erb +15 -6
  31. data/app/views/fine_print/home/index.html.erb~ +12 -4
  32. data/app/views/fine_print/signatures/index.html.erb +36 -0
  33. data/app/views/fine_print/signatures/index.html.erb~ +32 -0
  34. data/app/views/layouts/fine_print/application.html.erb +6 -0
  35. data/app/views/layouts/fine_print/application.html.erb~ +20 -0
  36. data/config/initializers/fine_print.rb +27 -44
  37. data/config/initializers/fine_print.rb~ +23 -40
  38. data/config/routes.rb +9 -3
  39. data/config/routes.rb~ +9 -4
  40. data/db/migrate/0_install_fine_print.rb +26 -0
  41. data/db/migrate/0_install_fine_print.rb~ +26 -0
  42. data/lib/fine_print/controller_additions.rb +69 -0
  43. data/lib/fine_print/controller_additions.rb~ +69 -0
  44. data/lib/fine_print/engine.rb +8 -0
  45. data/lib/fine_print/security_transgression.rb +1 -2
  46. data/lib/fine_print/utilities.rb~ +26 -0
  47. data/lib/fine_print/version.rb +1 -1
  48. data/lib/fine_print.rb +89 -42
  49. data/lib/fine_print.rb~ +89 -41
  50. data/lib/tasks/fine_print_tasks.rake +11 -8
  51. data/spec/controllers/contracts_controller_spec.rb +222 -0
  52. data/spec/controllers/contracts_controller_spec.rb~ +224 -0
  53. data/spec/controllers/home_controller_spec.rb +25 -0
  54. data/spec/controllers/home_controller_spec.rb~ +25 -0
  55. data/spec/controllers/signatures_controller_spec.rb +46 -0
  56. data/spec/controllers/signatures_controller_spec.rb~ +46 -0
  57. data/spec/dummy/README.md +1 -1
  58. data/spec/dummy/app/controllers/dummy_models_controller.rb +2 -0
  59. data/spec/dummy/app/controllers/dummy_models_controller.rb~ +29 -0
  60. data/spec/dummy/app/helpers/application_helper.rb +13 -0
  61. data/spec/dummy/app/models/dummy_user.rb +3 -0
  62. data/spec/dummy/app/models/dummy_user.rb~ +4 -0
  63. data/spec/dummy/app/models/user.rb~ +78 -0
  64. data/spec/dummy/config/application.rb +2 -2
  65. data/spec/dummy/config/application.rb~ +60 -0
  66. data/spec/dummy/config/initializers/fine_print.rb +36 -0
  67. data/spec/dummy/config/initializers/fine_print.rb~ +36 -0
  68. data/spec/dummy/config/initializers/session_store.rb +1 -1
  69. data/spec/dummy/config/initializers/session_store.rb~ +8 -0
  70. data/spec/dummy/config/initializers/wrap_parameters.rb +1 -1
  71. data/spec/dummy/config/initializers/wrap_parameters.rb~ +14 -0
  72. data/spec/dummy/config/routes.rb +1 -2
  73. data/spec/dummy/config/routes.rb~ +4 -0
  74. data/spec/dummy/db/development.sqlite3 +0 -0
  75. data/spec/dummy/db/migrate/1_create_dummy_users.rb +9 -0
  76. data/spec/dummy/db/migrate/1_create_dummy_users.rb~ +8 -0
  77. data/spec/dummy/db/schema.rb +20 -12
  78. data/spec/dummy/db/test.sqlite3 +0 -0
  79. data/spec/dummy/log/development.log +1635 -0
  80. data/spec/dummy/log/test.log +46188 -0
  81. data/spec/factories/contract.rb +25 -0
  82. data/spec/factories/contract.rb~ +26 -0
  83. data/spec/factories/dummy_user.rb +4 -0
  84. data/spec/factories/dummy_user.rb~ +6 -0
  85. data/spec/factories/signature.rb +6 -0
  86. data/spec/factories/signature.rb~ +8 -0
  87. data/spec/factories/user.rb~ +6 -0
  88. data/spec/fine_print_spec.rb~ +15 -4
  89. data/spec/lib/fine_print/controller_additions_spec.rb +20 -0
  90. data/spec/lib/fine_print/controller_additions_spec.rb~ +20 -0
  91. data/spec/lib/fine_print_spec.rb +47 -0
  92. data/spec/lib/fine_print_spec.rb~ +47 -0
  93. data/spec/models/contract_spec.rb +79 -0
  94. data/spec/models/contract_spec.rb~ +80 -0
  95. data/spec/models/signature_spec.rb +28 -0
  96. data/spec/models/signature_spec.rb~ +28 -0
  97. data/spec/spec_helper.rb +31 -0
  98. data/spec/spec_helper.rb~ +32 -0
  99. data/spec/test_helper.rb~ +15 -0
  100. metadata +153 -91
  101. data/app/assets/javascripts/fine_print/agreements.js +0 -19
  102. data/app/assets/javascripts/fine_print/agreements.js~ +0 -19
  103. data/app/assets/javascripts/fine_print/application.js~ +0 -5
  104. data/app/assets/javascripts/fine_print/dialog.js +0 -2
  105. data/app/assets/javascripts/fine_print/dialog.js~ +0 -2
  106. data/app/assets/javascripts/fine_print/user_agreements.js +0 -20
  107. data/app/assets/javascripts/fine_print/user_agreements.js~ +0 -20
  108. data/app/assets/stylesheets/fine_print/agreements.css +0 -11
  109. data/app/assets/stylesheets/fine_print/agreements.css~ +0 -11
  110. data/app/assets/stylesheets/fine_print/application.css~ +0 -60
  111. data/app/assets/stylesheets/fine_print/user_agreements.css~ +0 -3
  112. data/app/assets/stylesheets/scaffold.css~ +0 -56
  113. data/app/controllers/fine_print/agreements_controller.rb +0 -114
  114. data/app/controllers/fine_print/agreements_controller.rb~ +0 -113
  115. data/app/controllers/fine_print/user_agreements_controller.rb +0 -63
  116. data/app/controllers/fine_print/user_agreements_controller.rb~ +0 -63
  117. data/app/models/fine_print/agreement.rb +0 -50
  118. data/app/models/fine_print/agreement.rb~ +0 -50
  119. data/app/models/fine_print/user_agreement.rb +0 -19
  120. data/app/models/fine_print/user_agreement.rb~ +0 -21
  121. data/app/views/fine_print/agreements/_agreement.html.erb +0 -77
  122. data/app/views/fine_print/agreements/_agreement.html.erb~ +0 -77
  123. data/app/views/fine_print/agreements/_dialog.html.erb +0 -27
  124. data/app/views/fine_print/agreements/_dialog.html.erb~ +0 -27
  125. data/app/views/fine_print/agreements/_form.html.erb +0 -51
  126. data/app/views/fine_print/agreements/_form.html.erb~ +0 -51
  127. data/app/views/fine_print/agreements/edit.html.erb +0 -8
  128. data/app/views/fine_print/agreements/edit.html.erb~ +0 -8
  129. data/app/views/fine_print/agreements/index.html.erb +0 -32
  130. data/app/views/fine_print/agreements/index.html.erb~ +0 -32
  131. data/app/views/fine_print/agreements/new.html.erb +0 -7
  132. data/app/views/fine_print/agreements/new.html.erb~ +0 -7
  133. data/app/views/fine_print/agreements/new_version.html.erb +0 -7
  134. data/app/views/fine_print/agreements/new_version.html.erb~ +0 -7
  135. data/app/views/fine_print/agreements/show.html.erb +0 -15
  136. data/app/views/fine_print/agreements/show.html.erb~ +0 -14
  137. data/app/views/fine_print/user_agreements/cancel.js.erb +0 -1
  138. data/app/views/fine_print/user_agreements/cancel.js.erb~ +0 -2
  139. data/app/views/fine_print/user_agreements/create.js.erb +0 -2
  140. data/app/views/fine_print/user_agreements/create.js.erb~ +0 -2
  141. data/app/views/fine_print/user_agreements/index.html.erb +0 -25
  142. data/app/views/fine_print/user_agreements/index.html.erb~ +0 -25
  143. data/db/migrate/0_create_fine_print_agreements.rb~ +0 -22
  144. data/db/migrate/0_install.rb +0 -28
  145. data/db/migrate/0_install.rb~ +0 -28
  146. data/lib/fine_print/agreements_helper.rb +0 -13
  147. data/lib/fine_print/agreements_helper.rb~ +0 -11
  148. data/lib/fine_print/fine_print_agreement.rb +0 -26
  149. data/lib/fine_print/fine_print_agreement.rb~ +0 -26
  150. data/lib/fine_print/require_agreement.rb~ +0 -22
  151. data/lib/fine_print/security_transgression.rb~ +0 -3
  152. data/lib/fine_print/version.rb~ +0 -3
  153. data/lib/tasks/fine_print_tasks.rake~ +0 -42
  154. data/spec/dummy/README.md~ +0 -3
  155. data/spec/fine_print_spec.rb +0 -7
  156. data/spec/minitest_helper.rb +0 -12
data/lib/fine_print.rb~ CHANGED
@@ -1,68 +1,116 @@
1
- require "fine_print/engine"
2
- require "fine_print/fine_print_agreement"
1
+ require 'fine_print/engine'
2
+ require 'fine_print/security_transgression'
3
+ require 'fine_print/controller_additions'
3
4
 
4
5
  module FinePrint
5
- ASSET_FILES = %w(dialog.js)
6
-
7
6
  # Attributes
8
7
 
9
8
  # Can be set in initializer only
10
9
  ENGINE_OPTIONS = [
11
10
  :current_user_method,
12
11
  :user_admin_proc,
13
- :redirect_path,
14
- :sign_in_path
12
+ :user_signed_in_proc,
13
+ :pose_contracts_path,
14
+ :redirect_path
15
15
  ]
16
16
 
17
- # Can be set in initializer or passed as an option to fine_print_agreement
18
- AGREEMENT_OPTIONS = [
19
- :agreement_notice,
20
- :accept_path,
21
- :cancel_path,
22
- :use_referers,
23
- :use_modal_dialogs
17
+ # Can be set in initializer or passed as an option to fine_print_get_signatures
18
+ SIGNATURE_OPTIONS = [
19
+ :pose_contracts_path
24
20
  ]
25
21
 
26
- (ENGINE_OPTIONS + AGREEMENT_OPTIONS).each do |option|
22
+ (ENGINE_OPTIONS + SIGNATURE_OPTIONS).each do |option|
27
23
  mattr_accessor option
28
24
  end
29
-
30
- ActiveSupport.on_load(:before_initialize) do
31
- Rails.configuration.assets.precompile += ASSET_FILES
32
- end
33
25
 
34
26
  def self.configure
35
27
  yield self
36
28
  end
37
29
 
38
- def self.get_option(options, name)
39
- (!options.nil? && !options[name].nil?) ? options[name] : self.send(name)
30
+ # Gets a contract given either the contract's object, ID or name
31
+ # If given a name, it returns the latest published version of that contract
32
+ #
33
+ def self.get_contract(reference)
34
+ ref = Integer(reference) rescue reference
35
+ case ref
36
+ when Contract
37
+ ref
38
+ when Integer
39
+ Contract.find(ref)
40
+ when String
41
+ Contract.where(:name => ref).published.first
42
+ end
43
+ end
44
+
45
+ # Returns an array of names for the contracts whose latest published
46
+ # version the given user has not signed.
47
+ # - names -- an array of contract names
48
+ # - user -- the user in question
49
+ #
50
+ def self.get_unsigned_contract_names(names, user)
51
+ raise_unless_signed_in(user)
52
+ return [] if names.blank?
53
+ names_array = names.is_a?(Array) ? names.collect{|name| name.to_s} : [names.to_s]
54
+
55
+ signed_contracts = Contract
56
+ .joins(:signatures)
57
+ .where({:name => names_array,
58
+ :fine_print_signatures => {:user_id => user.id,
59
+ :user_type => user.class.name}}).latest
60
+ signed_contract_names = signed_contracts.collect{|c| c.name}
61
+
62
+ return names - signed_contract_names
40
63
  end
41
64
 
42
- def self.require_agreements(controller, names, options)
43
- user = controller.send current_user_method
44
- fine_print_dialog_agreements = []
45
- names.each do |name|
46
- agreement = Agreement.latest_ready(name)
47
- next if agreement.nil? || agreement.accepted_by?(user)
48
- if get_option(options, :use_modal_dialogs)
49
- fine_print_dialog_agreements << agreement
50
- else
51
- controller.session[:fine_print_accept_path] = options[:accept_path]
52
- if get_option(options, :use_referers)
53
- controller.session[:fine_print_request_url] = controller.request.url
54
- controller.session[:fine_print_request_ref] = controller.request.referer
55
- end
56
- controller.redirect_to controller.fine_print.agreement_path(agreement),
57
- :notice => get_option(options, :agreement_notice)
58
- end
65
+ # Records that the given user has signed the given contract; the contract
66
+ # can be a Contract object, a contract ID, or a contract name (string)
67
+ #
68
+ def self.sign_contract(contract, user)
69
+ raise_unless_signed_in(user)
70
+ contract = get_contract(contract)
71
+ raise IllegalState, 'Contract not found' if contract.nil?
72
+
73
+ sig = Signature.create do |signature|
74
+ signature.user = user
75
+ signature.contract = contract
59
76
  end
60
- controller.instance_variable_set(:@fine_print_dialog_agreements, fine_print_dialog_agreements)
61
- controller.instance_variable_set(:@fine_print_user, user)
62
- controller.instance_variable_set(:@fine_print_dialog_notice, get_option(options, :agreement_notice))
77
+ end
78
+
79
+ # Returns true iff the given user has signed the given contract; the contract
80
+ # can be a Contract object, a contract ID, or a contract name (string)
81
+ #
82
+ def self.signed_contract?(contract, user)
83
+ raise_unless_signed_in(user)
84
+ contract = get_contract(contract)
85
+
86
+ !contract.signatures.where(:user_id => user.id,
87
+ :user_type => user.class.name).first.nil?
88
+ end
89
+
90
+ # Returns true iff the given user has signed any version of the given contract.
91
+ # - contract -- can be a Contract object, its ID, or its name as a String or Symbol
92
+ def self.signed_any_contract_version?(contract, user)
93
+ raise_unless_signed_in(user)
94
+ contract = get_contract(contract)
95
+ !Signature.joins(:contract)
96
+ .where(:fine_print_contracts => {:name => contract.name},
97
+ :user_type => user.class.name,
98
+ :user_id => user.id).first.nil?
99
+ end
100
+
101
+ def self.is_signed_in?(user)
102
+ user_signed_in_proc.call(user)
63
103
  end
64
104
 
65
105
  def self.is_admin?(user)
66
- !user.nil? && user_admin_proc.call(user)
106
+ is_signed_in?(user) && user_admin_proc.call(user)
107
+ end
108
+
109
+ def self.raise_unless_signed_in(user)
110
+ raise IllegalState, 'User not signed in' unless is_signed_in?(user)
111
+ end
112
+
113
+ def self.raise_unless_admin(user)
114
+ raise SecurityTransgression unless is_admin?(user)
67
115
  end
68
116
  end
@@ -1,8 +1,11 @@
1
- COPY_TASKS = ['assets/stylesheets', 'assets/javascripts', 'views/layouts', 'views', 'controllers']
1
+ FINE_PRINT_COPY_TASKS = ['assets/stylesheets',
2
+ 'views/layouts',
3
+ 'views',
4
+ 'controllers']
2
5
 
3
6
  namespace :fine_print do
4
7
  namespace :install do
5
- desc "Copy initializers from fine_print to application"
8
+ desc 'Copy initializers from fine_print to application'
6
9
  task :initializers do
7
10
  Dir.glob(File.expand_path('../../../config/initializers/*.rb', __FILE__)) do |file|
8
11
  if File.exists?(File.expand_path(File.basename(file), 'config/initializers'))
@@ -16,7 +19,7 @@ namespace :fine_print do
16
19
  end
17
20
 
18
21
  namespace :copy do
19
- COPY_TASKS.each do |path|
22
+ FINE_PRINT_COPY_TASKS.each do |path|
20
23
  name = File.basename(path)
21
24
  desc "Copy #{name} from fine_print to application"
22
25
  task name.to_sym do
@@ -26,15 +29,15 @@ namespace :fine_print do
26
29
  end
27
30
  end
28
31
 
29
- desc "Copy migrations from fine_print to application"
32
+ desc 'Copy migrations from fine_print to application'
30
33
  task :install do
31
- Rake::Task["fine_print:install:initializers"].invoke
32
- Rake::Task["fine_print:install:migrations"].invoke
34
+ Rake::Task['fine_print:install:initializers'].invoke
35
+ Rake::Task['fine_print:install:migrations'].invoke
33
36
  end
34
37
 
35
- desc "Copy assets, layouts, views and controllers from fine_print to application"
38
+ desc 'Copy assets, layouts, views and controllers from fine_print to application'
36
39
  task :copy do
37
- COPY_TASKS.each do |path|
40
+ FINE_PRINT_COPY_TASKS.each do |path|
38
41
  Rake::Task["fine_print:copy:#{File.basename(path)}"].invoke
39
42
  end
40
43
  end
@@ -0,0 +1,222 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe ContractsController do
5
+ routes { FinePrint::Engine.routes }
6
+
7
+ before do
8
+ setup_controller_spec
9
+ @contract = FactoryGirl.create(:contract)
10
+ @contract.reload
11
+ end
12
+
13
+ it "won't get index unless authorized" do
14
+ get :index, :use_route => :fine_print
15
+ assert_redirected_to FinePrint.redirect_path
16
+
17
+ sign_in @user
18
+ get :index, :use_route => :fine_print
19
+ assert_redirected_to FinePrint.redirect_path
20
+ end
21
+
22
+ it 'must get index if authorized' do
23
+ sign_in @admin
24
+ get :index, :use_route => :fine_print
25
+ assert_response :success
26
+ end
27
+
28
+ it "won't get new unless authorized" do
29
+ get :new, :use_route => :fine_print
30
+ assert_redirected_to FinePrint.redirect_path
31
+
32
+ sign_in @user
33
+ get :new, :use_route => :fine_print
34
+ assert_redirected_to FinePrint.redirect_path
35
+ end
36
+
37
+ it 'must get new if authorized' do
38
+ sign_in @admin
39
+ get :new, :use_route => :fine_print
40
+ assert_response :success
41
+ end
42
+
43
+ it "won't create unless authorized" do
44
+ attributes = Hash.new
45
+ attributes[:name] = 'some_name'
46
+ attributes[:title] = 'Some title'
47
+ attributes[:content] = 'Some content'
48
+
49
+ post :create, :contract => attributes, :use_route => :fine_print
50
+ assert_redirected_to FinePrint.redirect_path
51
+ expect(assigns(:contract)).to be_nil
52
+
53
+ sign_in @user
54
+ post :create, :contract => attributes, :use_route => :fine_print
55
+ assert_redirected_to FinePrint.redirect_path
56
+ expect(assigns(:contract)).to be_nil
57
+ end
58
+
59
+ it 'must create if authorized' do
60
+ sign_in @admin
61
+ attributes = Hash.new
62
+ attributes[:name] = 'some_name'
63
+ attributes[:title] = 'Some title'
64
+ attributes[:content] = 'Some content'
65
+
66
+ post :create, :contract => attributes, :use_route => :fine_print
67
+ assert_redirected_to assigns(:contract)
68
+ expect(assigns(:contract).errors).to be_empty
69
+ expect(assigns(:contract).name).to eq 'some_name'
70
+ expect(assigns(:contract).title).to eq 'Some title'
71
+ expect(assigns(:contract).content).to eq 'Some content'
72
+ end
73
+
74
+ it "won't edit unless authorized" do
75
+ get :edit, :id => @contract.id, :use_route => :fine_print
76
+ assert_redirected_to FinePrint.redirect_path
77
+
78
+ sign_in @user
79
+ get :edit, :id => @contract.id, :use_route => :fine_print
80
+ assert_redirected_to FinePrint.redirect_path
81
+ end
82
+
83
+ it 'must edit if authorized' do
84
+ sign_in @admin
85
+ get :edit, :id => @contract.id, :use_route => :fine_print
86
+ assert_response :success
87
+ end
88
+
89
+ it "won't update unless authorized" do
90
+ attributes = Hash.new
91
+ attributes[:name] = 'some_name'
92
+ attributes[:title] = 'Some title'
93
+ attributes[:content] = 'Some content'
94
+ name = @contract.name
95
+ title = @contract.title
96
+ content = @contract.content
97
+
98
+ put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print
99
+ assert_redirected_to FinePrint.redirect_path
100
+ @contract.reload
101
+ expect(@contract.name).to eq name
102
+ expect(@contract.title).to eq title
103
+ expect(@contract.content).to eq content
104
+
105
+ sign_in @user
106
+ put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print
107
+ assert_redirected_to FinePrint.redirect_path
108
+ @contract.reload
109
+ expect(@contract.name).to eq name
110
+ expect(@contract.title).to eq title
111
+ expect(@contract.content).to eq content
112
+ end
113
+
114
+ it 'must update if authorized' do
115
+ attributes = Hash.new
116
+ attributes[:name] = 'some_name'
117
+ attributes[:title] = 'Some title'
118
+ attributes[:content] = 'Some content'
119
+
120
+ sign_in @admin
121
+ put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print
122
+ assert_redirected_to @contract
123
+ @contract.reload
124
+ expect(@contract.errors).to be_empty
125
+ expect(@contract.name).to eq 'some_name'
126
+ expect(@contract.title).to eq 'Some title'
127
+ expect(@contract.content).to eq 'Some content'
128
+ end
129
+
130
+ it "won't destroy unless authorized" do
131
+ delete :destroy, :id => @contract.id, :use_route => :fine_print
132
+ assert_redirected_to FinePrint.redirect_path
133
+ expect(Contract.find(@contract.id)).to eq @contract
134
+
135
+ sign_in @user
136
+ delete :destroy, :id => @contract.id, :use_route => :fine_print
137
+ assert_redirected_to FinePrint.redirect_path
138
+ expect(Contract.find(@contract.id)).to eq @contract
139
+ end
140
+
141
+ it 'must destroy if authorized' do
142
+ sign_in @admin
143
+ delete :destroy, :id => @contract.id, :use_route => :fine_print
144
+ assert_redirected_to contracts_path
145
+ expect(Contract.find_by_id(@contract.id)).to be_nil
146
+ end
147
+
148
+ it "won't publish unless authorized" do
149
+ expect(@contract.is_published?).to eq false
150
+ put :publish, :id => @contract.id, :use_route => :fine_print
151
+ assert_redirected_to FinePrint.redirect_path
152
+ @contract.reload
153
+ expect(@contract.is_published?).to eq false
154
+
155
+ sign_in @user
156
+ put :publish, :id => @contract.id, :use_route => :fine_print
157
+ assert_redirected_to FinePrint.redirect_path
158
+ @contract.reload
159
+ expect(@contract.is_published?).to eq false
160
+ end
161
+
162
+ it 'must publish if authorized' do
163
+ expect(@contract.is_published?).to eq false
164
+ sign_in @admin
165
+
166
+ put :publish, :id => @contract.id, :use_route => :fine_print
167
+ assert_redirected_to contracts_path
168
+ @contract.reload
169
+ expect(@contract.is_published?).to eq true
170
+ end
171
+
172
+ it "won't unpublish unless authorized" do
173
+ @contract.publish
174
+ expect(@contract.is_published?).to eq true
175
+ put :unpublish, :id => @contract.id, :use_route => :fine_print
176
+ assert_redirected_to FinePrint.redirect_path
177
+ @contract.reload
178
+ expect(@contract.is_published?).to eq true
179
+
180
+ sign_in @user
181
+ put :unpublish, :id => @contract.id, :use_route => :fine_print
182
+ assert_redirected_to FinePrint.redirect_path
183
+ @contract.reload
184
+ expect(@contract.is_published?).to eq true
185
+ end
186
+
187
+ it 'must unpublish if authorized' do
188
+ @contract.publish
189
+ expect(@contract.is_published?).to eq true
190
+
191
+ sign_in @admin
192
+ put :unpublish, :id => @contract.id, :use_route => :fine_print
193
+ assert_redirected_to contracts_path
194
+ @contract.reload
195
+ expect(@contract.is_published?).to eq false
196
+ end
197
+
198
+ it "won't new_version unless authorized" do
199
+ @contract.publish
200
+ expect(@contract.is_published?).to eq true
201
+
202
+ put :new_version, :id => @contract.id, :use_route => :fine_print
203
+ assert_redirected_to FinePrint.redirect_path
204
+ expect(assigns(:contract)).to be_nil
205
+
206
+ sign_in @user
207
+ put :new_version, :id => @contract.id, :use_route => :fine_print
208
+ assert_redirected_to FinePrint.redirect_path
209
+ expect(assigns(:contract)).to be_nil
210
+ end
211
+
212
+ it 'must new_version if authorized' do
213
+ @contract.publish
214
+ expect(@contract.is_published?).to eq true
215
+
216
+ sign_in @admin
217
+ put :new_version, :id => @contract.id, :use_route => :fine_print
218
+ assert_response :success
219
+ expect(assigns(:contract)).not_to be_nil
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,224 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe ContractsController do
5
+ routes { FinePrint::Engine.routes }
6
+
7
+ before do
8
+ setup_controller_spec
9
+ @contract = FactoryGirl.create(:contract)
10
+ @contract.reload
11
+ end
12
+
13
+ it "won't get index unless authorized" do
14
+ get :index, :use_route => :fine_print
15
+ assert_redirected_to FinePrint.redirect_path
16
+
17
+ sign_in @user
18
+ get :index, :use_route => :fine_print
19
+ assert_redirected_to FinePrint.redirect_path
20
+ end
21
+
22
+ it 'must get index if authorized' do
23
+ sign_in @admin
24
+ get :index, :use_route => :fine_print
25
+ assert_response :success
26
+ end
27
+
28
+ it "won't get new unless authorized" do
29
+ get :new, :use_route => :fine_print
30
+ assert_redirected_to FinePrint.redirect_path
31
+
32
+ sign_in @user
33
+ get :new, :use_route => :fine_print
34
+ assert_redirected_to FinePrint.redirect_path
35
+ end
36
+
37
+ it 'must get new if authorized' do
38
+ sign_in @admin
39
+ get :new, :use_route => :fine_print
40
+ assert_response :success
41
+ end
42
+
43
+ it "won't create unless authorized" do
44
+ attributes = Hash.new
45
+ attributes[:name] = 'some_name'
46
+ attributes[:title] = 'Some title'
47
+ attributes[:content] = 'Some content'
48
+
49
+ post :create, :contract => attributes, :use_route => :fine_print
50
+ assert_redirected_to FinePrint.redirect_path
51
+ expect(assigns(:contract)).to be_nil
52
+
53
+ sign_in @user
54
+ post :create, :contract => attributes, :use_route => :fine_print
55
+ assert_redirected_to FinePrint.redirect_path
56
+ expect(assigns(:contract)).to be_nil
57
+ end
58
+
59
+ it 'must create if authorized' do
60
+ sign_in @admin
61
+ attributes = Hash.new
62
+ attributes[:name] = 'some_name'
63
+ attributes[:title] = 'Some title'
64
+ attributes[:content] = 'Some content'
65
+
66
+ post :create, :contract => attributes, :use_route => :fine_print
67
+ assert_redirected_to assigns(:contract)
68
+ expect(assigns(:contract).errors).to be_empty
69
+ expect(assigns(:contract).name).to eq 'some_name'
70
+ expect(assigns(:contract).title).to eq 'Some title'
71
+ expect(assigns(:contract).content).to eq 'Some content'
72
+ end
73
+
74
+ it "won't edit unless authorized" do
75
+ get :edit, :id => @contract.id, :use_route => :fine_print
76
+ assert_redirected_to FinePrint.redirect_path
77
+
78
+ sign_in @user
79
+ get :edit, :id => @contract.id, :use_route => :fine_print
80
+ assert_redirected_to FinePrint.redirect_path
81
+ end
82
+
83
+ it 'must edit if authorized' do
84
+ sign_in @admin
85
+ get :edit, :id => @contract.id, :use_route => :fine_print
86
+ assert_response :success
87
+ end
88
+
89
+ it "won't update unless authorized" do
90
+ attributes = Hash.new
91
+ attributes[:name] = 'some_name'
92
+ attributes[:title] = 'Some title'
93
+ attributes[:content] = 'Some content'
94
+ name = @contract.name
95
+ title = @contract.title
96
+ content = @contract.content
97
+
98
+ put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print
99
+ assert_redirected_to FinePrint.redirect_path
100
+ expect(@contract.errors).not_to be_empty
101
+ @contract.reload
102
+ expect(@contract.name).to eq name
103
+ expect(@contract.title).to eq title
104
+ expect(@contract.content).to eq content
105
+
106
+ sign_in @user
107
+ put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print
108
+ assert_redirected_to FinePrint.redirect_path
109
+ expect(@contract.errors).not_to be_empty
110
+ @contract.reload
111
+ expect(@contract.name).to eq name
112
+ expect(@contract.title).to eq title
113
+ expect(@contract.content).to eq content
114
+ end
115
+
116
+ it 'must update if authorized' do
117
+ attributes = Hash.new
118
+ attributes[:name] = 'some_name'
119
+ attributes[:title] = 'Some title'
120
+ attributes[:content] = 'Some content'
121
+
122
+ sign_in @admin
123
+ put :update, :id => @contract.id, :contract => attributes, :use_route => :fine_print
124
+ assert_redirected_to @contract
125
+ @contract.reload
126
+ expect(@contract.errors).to be_empty
127
+ expect(@contract.name).to eq 'some_name'
128
+ expect(@contract.title).to eq 'Some title'
129
+ expect(@contract.content).to eq 'Some content'
130
+ end
131
+
132
+ it "won't destroy unless authorized" do
133
+ delete :destroy, :id => @contract.id, :use_route => :fine_print
134
+ assert_redirected_to FinePrint.redirect_path
135
+ expect(Contract.find(@contract.id)).to eq @contract
136
+
137
+ sign_in @user
138
+ delete :destroy, :id => @contract.id, :use_route => :fine_print
139
+ assert_redirected_to FinePrint.redirect_path
140
+ expect(Contract.find(@contract.id)).to eq @contract
141
+ end
142
+
143
+ it 'must destroy if authorized' do
144
+ sign_in @admin
145
+ delete :destroy, :id => @contract.id, :use_route => :fine_print
146
+ assert_redirected_to contracts_path
147
+ expect(Contract.find_by_id(@contract.id)).to be_nil
148
+ end
149
+
150
+ it "won't publish unless authorized" do
151
+ expect(@contract.is_published?).to eq false
152
+ put :publish, :id => @contract.id, :use_route => :fine_print
153
+ assert_redirected_to FinePrint.redirect_path
154
+ @contract.reload
155
+ expect(@contract.is_published?).to eq false
156
+
157
+ sign_in @user
158
+ put :publish, :id => @contract.id, :use_route => :fine_print
159
+ assert_redirected_to FinePrint.redirect_path
160
+ @contract.reload
161
+ expect(@contract.is_published?).to eq false
162
+ end
163
+
164
+ it 'must publish if authorized' do
165
+ expect(@contract.is_published?).to eq false
166
+ sign_in @admin
167
+
168
+ put :publish, :id => @contract.id, :use_route => :fine_print
169
+ assert_redirected_to contracts_path
170
+ @contract.reload
171
+ expect(@contract.is_published?).to eq true
172
+ end
173
+
174
+ it "won't unpublish unless authorized" do
175
+ @contract.publish
176
+ expect(@contract.is_published?).to eq true
177
+ put :unpublish, :id => @contract.id, :use_route => :fine_print
178
+ assert_redirected_to FinePrint.redirect_path
179
+ @contract.reload
180
+ expect(@contract.is_published?).to eq true
181
+
182
+ sign_in @user
183
+ put :unpublish, :id => @contract.id, :use_route => :fine_print
184
+ assert_redirected_to FinePrint.redirect_path
185
+ @contract.reload
186
+ expect(@contract.is_published?).to eq true
187
+ end
188
+
189
+ it 'must unpublish if authorized' do
190
+ @contract.publish
191
+ expect(@contract.is_published?).to eq true
192
+
193
+ sign_in @admin
194
+ put :unpublish, :id => @contract.id, :use_route => :fine_print
195
+ assert_redirected_to contracts_path
196
+ @contract.reload
197
+ expect(@contract.is_published?).to eq false
198
+ end
199
+
200
+ it "won't new_version unless authorized" do
201
+ @contract.publish
202
+ expect(@contract.is_published?).to eq true
203
+
204
+ put :new_version, :id => @contract.id, :use_route => :fine_print
205
+ assert_redirected_to FinePrint.redirect_path
206
+ expect(assigns(:contract)).to be_nil
207
+
208
+ sign_in @user
209
+ put :new_version, :id => @contract.id, :use_route => :fine_print
210
+ assert_redirected_to FinePrint.redirect_path
211
+ expect(assigns(:contract)).to be_nil
212
+ end
213
+
214
+ it 'must new_version if authorized' do
215
+ @contract.publish
216
+ expect(@contract.is_published?).to eq true
217
+
218
+ sign_in @admin
219
+ put :new_version, :id => @contract.id, :use_route => :fine_print
220
+ assert_response :success
221
+ expect(assigns(:contract)).not_to be_nil
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe HomeController do
5
+ before do
6
+ setup_controller_spec
7
+ end
8
+
9
+ it "won't get index unless authorized" do
10
+ get :index, :use_route => :fine_print
11
+ assert_response :redirect
12
+
13
+ sign_in @user
14
+ get :index, :use_route => :fine_print
15
+ assert_response :redirect
16
+ end
17
+
18
+ it 'must get index if authorized' do
19
+ sign_in @user
20
+ @user.is_admin = true
21
+ get :index, :use_route => :fine_print
22
+ assert_response :success
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe HomeController do
5
+ before do
6
+ setup_controller_spec
7
+ end
8
+
9
+ it 'wont get index unless authorized' do
10
+ get :index, :use_route => :fine_print
11
+ assert_response :redirect
12
+
13
+ sign_in @user
14
+ get :index, :use_route => :fine_print
15
+ assert_response :redirect
16
+ end
17
+
18
+ it 'must get index if authorized' do
19
+ sign_in @user
20
+ @user.is_admin = true
21
+ get :index, :use_route => :fine_print
22
+ assert_response :success
23
+ end
24
+ end
25
+ end