fine_print 0.1.1 → 1.0.0

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.
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
@@ -0,0 +1,25 @@
1
+ FactoryGirl.define do
2
+ factory :contract, :class => FinePrint::Contract do
3
+ name { "Contract_#{SecureRandom.hex(4)}" }
4
+ title { Faker::Lorem.sentence(3) }
5
+ content { Faker::Lorem.paragraphs(2) }
6
+
7
+ factory :published_contract do
8
+ after(:create) {|instance| instance.publish }
9
+ end
10
+
11
+ factory :signed_contract do
12
+ after(:build) {|instance| instance.save; instance.publish }
13
+
14
+ ignore do
15
+ count 2
16
+ end
17
+
18
+ after(:build) do |contract, evaluator|
19
+ evaluator.count.times do
20
+ contract.signatures << FactoryGirl.build(:signature)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ FactoryGirl.define do
2
+ factory :contract, :class => FinePrint::Contract do
3
+
4
+ name { "Contract_#{SecureRandom.hex(4)}" }
5
+ title { Faker::Lorem.sentence(3) }
6
+ content { Faker::Lorem.paragraphs(2) }
7
+
8
+ factory :published_contract do
9
+ after(:create) {|instance| instance.publish }
10
+ end
11
+
12
+ factory :signed_contract do
13
+ after(:build) {|instance| instance.save; instance.publish }
14
+
15
+ ignore do
16
+ count 2
17
+ end
18
+
19
+ after(:build) do |contract, evaluator|
20
+ evaluator.count.times do
21
+ contract.signatures << FactoryGirl.build(:signature)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,4 @@
1
+ FactoryGirl.define do
2
+ factory :dummy_user, :class => DummyUser do
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ require 'rspec-rails'
2
+
3
+ FactoryGirl.define do
4
+ factory :dummy_user, :class => DummyUser do
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :signature, :class => FinePrint::Signature do
3
+ association :contract, :factory => :published_contract
4
+ association :user, :factory => :dummy_user
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ require 'rspec-rails'
2
+
3
+ FactoryGirl.define do
4
+ factory :signature, :class => FinePrint::Signature do
5
+ association :contract, :factory => :published_contract
6
+ association :user, :factory => :dummy_user
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ require 'rspec-rails'
2
+
3
+ FactoryGirl.define do
4
+ factory :user, :class => DummyUser do
5
+ end
6
+ end
@@ -1,7 +1,18 @@
1
- require 'test_helper'
1
+ require 'spec_helper'
2
2
 
3
- class FinePrintTest < ActiveSupport::TestCase
4
- test "truth" do
5
- assert_kind_of Module, FinePrint
3
+ describe FinePrint do
4
+ it 'gets unsigned contracts' do
5
+ alpha_1 = FactoryGirl.create(:published_contract, :name => 'alpha')
6
+ beta_1 = FactoryGirl.create(:published_contract, :name => 'beta')
7
+
8
+ user = mock_model 'DummyUser', :id => -1
9
+ alpha_1_sig = FactoryGirl.create(:signature, :contract => alpha_1, :user => user)
10
+ beta_1_sig = FactoryGirl.create(:signature, :contract => beta_1, :user => user)
11
+
12
+ alpha_2 = alpha_1.draft_copy
13
+ alpha_2.update_attributes(:content => 'foo')
14
+ alpha_2.publish
15
+
16
+ expect(FinePrint.get_unsigned_contract_names(:names => ['beta', 'alpha'], :user => user)).to eq ['alpha']
6
17
  end
7
18
  end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe ControllerAdditions do
5
+ it 'must add fine_print_get_signatures to ActionController and subclasses' do
6
+ expect(ActionController::Base.respond_to? :fine_print_get_signatures).to eq true
7
+ expect(DummyModelsController.respond_to? :fine_print_get_signatures).to eq true
8
+ end
9
+
10
+ it 'must add fine_print_skip_signatures to ActionController and subclasses' do
11
+ expect(ActionController::Base.respond_to? :fine_print_skip_signatures).to eq true
12
+ expect(DummyModelsController.respond_to? :fine_print_skip_signatures).to eq true
13
+ end
14
+
15
+ it 'must add fine_print_return to ActionController instances' do
16
+ expect(ActionController::Base.new.respond_to?(:fine_print_return, true)).to eq true
17
+ expect(DummyModelsController.new.respond_to?(:fine_print_return, true)).to eq true
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ module FinePrint
4
+ describe ControllerAdditions do
5
+ it 'must add fine_print_get_signatures to ActionController and subclasses' do
6
+ expect(ActionController::Base.respond_to? :fine_print_get_signatures).to eq true
7
+ expect(DummyModelsController.respond_to? :fine_print_get_signatures).to eq true
8
+ end
9
+
10
+ it 'must add fine_print_skip_signatures to ActionController and subclasses' do
11
+ expect(ActionController::Base.respond_to? :fine_print_skip_signatures).to eq true
12
+ expect(DummyModelsController.respond_to? :fine_print_skip_signatures).to eq true
13
+ end
14
+
15
+ it 'must add fine_print_return to ActionController instances' do
16
+ expect(ActionController::Base.new.respond_to?(:fine_print_return, true)).to eq true
17
+ expect(DummyModelsController.new.respond_to?(:fine_print_return, true)).to eq true
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe FinePrint do
4
+ before :each do
5
+ @alpha_1 = FactoryGirl.create(:published_contract, :name => 'alpha')
6
+ @beta_1 = FactoryGirl.create(:published_contract, :name => 'beta')
7
+
8
+ @user = mock_model 'DummyUser', :id => -1
9
+ @alpha_1_sig = FactoryGirl.create(:signature, :contract => @alpha_1, :user => @user)
10
+ @beta_1_sig = FactoryGirl.create(:signature, :contract => @beta_1, :user => @user)
11
+
12
+ @alpha_2 = @alpha_1.draft_copy
13
+ @alpha_2.update_attribute(:content, 'foo')
14
+ @alpha_2.publish
15
+ end
16
+
17
+ it 'gets contracts' do
18
+ expect(FinePrint.get_contract(@beta_1)).to eq @beta_1
19
+ expect(FinePrint.get_contract(@beta_1.id)).to eq @beta_1
20
+ expect(FinePrint.get_contract('beta')).to eq @beta_1
21
+ expect(FinePrint.get_contract(@alpha_1)).to eq @alpha_1
22
+ expect(FinePrint.get_contract(@alpha_1.id)).to eq @alpha_1
23
+ expect(FinePrint.get_contract('alpha')).to eq @alpha_2
24
+ end
25
+
26
+ it 'gets unsigned contracts' do
27
+ expect(FinePrint.get_unsigned_contract_names(['beta', 'alpha'], @user)).to eq ['alpha']
28
+ end
29
+
30
+ it 'allows users to sign contracts' do
31
+ expect(FinePrint.signed_contract?(@alpha_1, @user)).to eq true
32
+ expect(FinePrint.signed_contract?(@alpha_2, @user)).to eq false
33
+ expect(FinePrint.signed_contract?(@beta_1, @user)).to eq true
34
+ expect(FinePrint.signed_any_contract_version?(@alpha_1, @user)).to eq true
35
+ expect(FinePrint.signed_any_contract_version?(@alpha_2, @user)).to eq true
36
+ expect(FinePrint.signed_any_contract_version?(@beta_1, @user)).to eq true
37
+
38
+ expect(FinePrint.sign_contract(@alpha_2, @user)).to be_a FinePrint::Signature
39
+
40
+ expect(FinePrint.signed_contract?(@alpha_1, @user)).to eq true
41
+ expect(FinePrint.signed_contract?(@alpha_2, @user)).to eq true
42
+ expect(FinePrint.signed_contract?(@beta_1, @user)).to eq true
43
+ expect(FinePrint.signed_any_contract_version?(@alpha_1, @user)).to eq true
44
+ expect(FinePrint.signed_any_contract_version?(@alpha_2, @user)).to eq true
45
+ expect(FinePrint.signed_any_contract_version?(@beta_1, @user)).to eq true
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe FinePrint do
4
+ before :each do
5
+ @alpha_1 = FactoryGirl.create(:published_contract, :name => 'alpha')
6
+ @beta_1 = FactoryGirl.create(:published_contract, :name => 'beta')
7
+
8
+ @user = mock_model 'DummyUser', :id => -1
9
+ @alpha_1_sig = FactoryGirl.create(:signature, :contract => @alpha_1, :user => @user)
10
+ @beta_1_sig = FactoryGirl.create(:signature, :contract => @beta_1, :user => @user)
11
+
12
+ @alpha_2 = @alpha_1.draft_copy
13
+ @alpha_2.update_attribute(:content, 'foo')
14
+ @alpha_2.publish
15
+ end
16
+
17
+ it 'gets contracts' do
18
+ expect(FinePrint.get_contract(@beta_1)).to eq @beta_1
19
+ expect(FinePrint.get_contract(@beta_1.id)).to eq @beta_1
20
+ expect(FinePrint.get_contract('beta')).to eq @beta_1
21
+ expect(FinePrint.get_contract(@alpha_1)).to eq @alpha_1
22
+ expect(FinePrint.get_contract(@alpha_1.id)).to eq @alpha_1
23
+ expect(FinePrint.get_contract('alpha')).to eq @alpha_2
24
+ end
25
+
26
+ it 'gets unsigned contracts' do
27
+ expect(FinePrint.get_unsigned_contract_names(['beta', 'alpha'], @user)).to eq ['alpha']
28
+ end
29
+
30
+ it 'allows users to sign contracts' do
31
+ expect(FinePrint.signed_contract?(@alpha_1, @user)).to eq true
32
+ expect(FinePrint.signed_contract?(@alpha_2, @user)).to eq false
33
+ expect(FinePrint.signed_contract?(@beta_1, @user)).to eq true
34
+ expect(FinePrint.signed_any_contract_version?(@alpha_1, @user)).to eq true
35
+ expect(FinePrint.signed_any_contract_version?(@alpha_2, @user)).to eq true
36
+ expect(FinePrint.signed_any_contract_version?(@beta_1, @user)).to eq true
37
+
38
+ expect(FinePrint.sign_contract(@alpha_2, @user)).to be_a FinePrint::Signature
39
+
40
+ expect(FinePrint.signed_contract?(@alpha_1, @user)).to eq true
41
+ expect(FinePrint.signed_contract?(@alpha_2, @user)).to eq true
42
+ expect(FinePrint.signed_contract?(@beta_1, @user)).to eq true
43
+ expect(FinePrint.signed_any_contract_version?(@alpha_1, @user)).to eq true
44
+ expect(FinePrint.signed_any_contract_version?(@alpha_2, @user)).to eq true
45
+ expect(FinePrint.signed_any_contract_version?(@beta_1, @user)).to eq true
46
+ end
47
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe Contract do
5
+ it 'can be published and unpublished' do
6
+ contract = FactoryGirl.create(:contract)
7
+ expect(contract.is_published?).to be_false
8
+ expect(contract.version).to be_nil
9
+ expect(contract.is_latest?).to be_false
10
+ expect(contract.can_be_updated?).to be_true
11
+ expect(contract.can_be_published?).to be_true
12
+ expect(contract.can_be_unpublished?).to be_false
13
+
14
+ contract.unpublish
15
+ expect(contract.errors).not_to be_empty
16
+ contract.errors.clear
17
+ expect(contract.errors).to be_empty
18
+ contract.publish
19
+ expect(contract.errors).to be_empty
20
+ expect(contract.is_published?).to be_true
21
+ expect(contract.version).to be 1
22
+ expect(contract.is_latest?).to be_true
23
+ expect(contract.can_be_updated?).to be_true
24
+ expect(contract.can_be_published?).to be_false
25
+ expect(contract.can_be_unpublished?).to be_true
26
+
27
+ contract.publish
28
+ expect(contract.errors).not_to be_empty
29
+ contract.errors.clear
30
+ expect(contract.errors).to be_empty
31
+ contract.unpublish
32
+ expect(contract.errors).to be_empty
33
+ expect(contract.is_published?).to be_false
34
+ end
35
+
36
+ it "can't be modified after a user signs" do
37
+ contract = FactoryGirl.create(:contract)
38
+
39
+ contract.publish
40
+ expect(contract.is_published?).to be_true
41
+ expect(contract.can_be_updated?).to be_true
42
+ expect(contract.can_be_published?).to be_false
43
+ expect(contract.can_be_unpublished?).to be_true
44
+
45
+ ua = FactoryGirl.create(:signature, :contract => contract)
46
+ contract.reload
47
+ expect(contract.can_be_updated?).to be_false
48
+ expect(contract.can_be_published?).to be_false
49
+ expect(contract.can_be_unpublished?).to be_false
50
+
51
+ contract.save
52
+ expect(contract.errors).not_to be_empty
53
+ contract.errors.clear
54
+ expect(contract.errors).to be_empty
55
+ contract.unpublish
56
+ expect(contract.errors).not_to be_empty
57
+ expect(contract.is_published?).to be_true
58
+ end
59
+
60
+ it 'results in a new version if a copy is published' do
61
+ contract = FactoryGirl.create(:published_contract)
62
+ expect(contract.version).to eq 1
63
+ new_version = contract.draft_copy
64
+ expect(new_version.save).to be_true
65
+ new_version.publish
66
+ expect(new_version.version).to eq 2
67
+ end
68
+
69
+ it 'results in a first version if a name is changed after publishing' do
70
+ contract = FactoryGirl.create(:published_contract)
71
+ expect(contract.version).to eq 1
72
+ new_version = contract.draft_copy
73
+ new_version.name = 'Joe'
74
+ expect(new_version.save).to be_true
75
+ new_version.publish
76
+ expect(new_version.version).to eq 1
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe Contract do
5
+ it 'can be published and unpublished' do
6
+ contract = FactoryGirl.create(:contract)
7
+ expect(contract.is_published?).to be_false
8
+ expect(contract.version).to be_nil
9
+ expect(contract.is_latest?).to be_false
10
+ expect(contract.can_be_updated?).to be_true
11
+ expect(contract.can_be_published?).to be_true
12
+ expect(contract.can_be_unpublished?).to be_false
13
+
14
+ contract.unpublish
15
+ expect(contract.errors).not_to be_empty
16
+ contract.errors.clear
17
+ expect(contract.errors).to be_empty
18
+ contract.publish
19
+ expect(contract.errors).to be_empty
20
+ expect(contract.is_published?).to be_true
21
+ expect(contract.version).to be 1
22
+ expect(contract.is_latest?).to be_true
23
+ expect(contract.can_be_updated?).to be_true
24
+ expect(contract.can_be_published?).to be_false
25
+ expect(contract.can_be_unpublished?).to be_true
26
+
27
+ contract.publish
28
+ expect(contract.errors).not_to be_empty
29
+ contract.errors.clear
30
+ expect(contract.errors).to be_empty
31
+ contract.unpublish
32
+ expect(contract.errors).to be_empty
33
+ expect(contract.is_published?).to be_false
34
+ end
35
+
36
+ it "can't be modified after a user signs" do
37
+ contract = FactoryGirl.create(:contract)
38
+
39
+ contract.publish
40
+ expect(contract.is_published?).to be_true
41
+ contract.reload
42
+ expect(contract.can_be_updated?).to be_true
43
+ expect(contract.can_be_published?).to be_false
44
+ expect(contract.can_be_unpublished?).to be_true
45
+
46
+ ua = FactoryGirl.create(:signature, :contract => contract)
47
+ contract.reload
48
+ expect(contract.can_be_updated?).to be_false
49
+ expect(contract.can_be_published?).to be_false
50
+ expect(contract.can_be_unpublished?).to be_false
51
+
52
+ contract.save
53
+ expect(contract.errors).not_to be_empty
54
+ contract.errors.clear
55
+ expect(contract.errors).to be_empty
56
+ contract.unpublish
57
+ expect(contract.errors).not_to be_empty
58
+ expect(contract.is_published?).to be_true
59
+ end
60
+
61
+ it 'results in a new version if a copy is published' do
62
+ contract = FactoryGirl.create(:published_contract)
63
+ expect(contract.version).to eq 1
64
+ new_version = contract.draft_copy
65
+ expect(new_version.save).to be_true
66
+ new_version.publish
67
+ expect(new_version.version).to eq 2
68
+ end
69
+
70
+ it 'results in a first version if a name is changed after publishing' do
71
+ contract = FactoryGirl.create(:published_contract)
72
+ expect(contract.version).to eq 1
73
+ new_version = contract.draft_copy
74
+ new_version.name = 'Joe'
75
+ expect(new_version.save).to be_true
76
+ new_version.publish
77
+ expect(new_version.version).to eq 1
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ module FinePrint
4
+ describe Signature do
5
+ it 'can''t be associated with unpublished contracts' do
6
+ contract = FactoryGirl.create(:contract)
7
+ expect(contract.is_published?).to be_false
8
+ expect(contract.can_be_updated?).to be_true
9
+
10
+ sig = FactoryGirl.build(:signature)
11
+ sig.contract = contract
12
+ expect(sig.save).to be_false
13
+
14
+ contract.reload
15
+ expect(contract.can_be_updated?).to be_true
16
+ end
17
+
18
+ it 'prevents contract from being updated' do
19
+ sig = FactoryGirl.build(:signature)
20
+ contract = sig.contract
21
+ expect(contract.can_be_updated?).to be_true
22
+
23
+ sig.save!
24
+ contract.reload
25
+ expect(contract.can_be_updated?).to be_false
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ module FinePrint
4
+ describe Signature do
5
+ it 'can''t be associated with unpublished contracts' do
6
+ contract = FactoryGirl.create(:contract)
7
+ expect(contract.is_published?).to be_false
8
+ expect(contract.can_be_updated?).to be_true
9
+
10
+ sig = FactoryGirl.build(:signature)
11
+ sig.contract = contract
12
+ expect(sig.save).to be_false
13
+
14
+ contract.reload
15
+ expect(contract.can_be_updated?).to be_true
16
+ end
17
+
18
+ it 'prevents contract from being updated' do
19
+ sig = FactoryGirl.build(:signature)
20
+ contract = sig.contract
21
+ expect(contract.can_be_updated?).to be_true
22
+
23
+ sig.save!
24
+ contract.reload
25
+ expect(contract.can_be_updated?).to be_false
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+ require 'factory_girl_rails'
7
+ require 'faker'
8
+
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.use_transactional_fixtures = true
17
+ config.infer_base_class_for_anonymous_controllers = false
18
+ config.order = 'random'
19
+ end
20
+
21
+ FinePrint::ApplicationController.class_eval do
22
+ include ApplicationHelper
23
+ end
24
+
25
+ def setup_controller_spec
26
+ class_eval { include ApplicationHelper }
27
+ sign_out
28
+ @user = FactoryGirl.create(:dummy_user)
29
+ @admin = FactoryGirl.create(:dummy_user)
30
+ @admin.is_admin = true
31
+ end
@@ -0,0 +1,32 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+ require 'factory_girl_rails'
7
+ require 'faker'
8
+
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.use_transactional_fixtures = true
17
+ config.infer_base_class_for_anonymous_controllers = false
18
+ config.order = 'random'
19
+ end
20
+
21
+ FinePrint::ApplicationController.class_eval do
22
+ include ApplicationHelper
23
+ end
24
+
25
+ def setup_controller_spec
26
+ class_eval { include ApplicationHelper }
27
+ routes { FinePrint::Engine.routes }
28
+ sign_out
29
+ @user = FactoryGirl.create(:dummy_user)
30
+ @admin = FactoryGirl.create(:dummy_user)
31
+ @admin.is_admin = true
32
+ end
@@ -0,0 +1,15 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+ require File.expand_path('../dummy/config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+ require 'minitest/rails'
5
+ require 'factory_girl_rails'
6
+ require 'faker'
7
+
8
+ # To add Capybara feature tests add `gem "minitest-rails-capybara"`
9
+ # to the test group in the Gemfile and uncomment the following:
10
+ # require "minitest/rails/capybara"
11
+
12
+ # Uncomment for awesome colorful output
13
+ # require "minitest/pride"
14
+
15
+ Rails.backtrace_cleaner.remove_silencers!