disclaimer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +60 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/disclaimer/application.js +16 -0
  5. data/app/assets/javascripts/disclaimer/documents.js +2 -0
  6. data/app/assets/javascripts/disclaimer/segments.js +2 -0
  7. data/app/assets/stylesheets/disclaimer/application.css +13 -0
  8. data/app/assets/stylesheets/disclaimer/documents.css +9 -0
  9. data/app/assets/stylesheets/disclaimer/segments.css +4 -0
  10. data/app/controllers/disclaimer/application_controller.rb +4 -0
  11. data/app/controllers/disclaimer/documents_controller.rb +74 -0
  12. data/app/controllers/disclaimer/segments_controller.rb +45 -0
  13. data/app/helpers/disclaimer/application_helper.rb +4 -0
  14. data/app/helpers/disclaimer/documents_helper.rb +4 -0
  15. data/app/helpers/disclaimer/segments_helper.rb +4 -0
  16. data/app/models/disclaimer/document.rb +57 -0
  17. data/app/models/disclaimer/segment.rb +26 -0
  18. data/app/models/disclaimer/segment_holder.rb +17 -0
  19. data/app/views/disclaimer/documents/delete.html.erb +8 -0
  20. data/app/views/disclaimer/documents/index.html.erb +28 -0
  21. data/app/views/disclaimer/documents/new.html.erb +48 -0
  22. data/app/views/disclaimer/documents/show.html.erb +19 -0
  23. data/app/views/disclaimer/segments/_segment.html.erb +8 -0
  24. data/app/views/disclaimer/segments/delete.html.erb +8 -0
  25. data/app/views/disclaimer/segments/index.html.erb +26 -0
  26. data/app/views/disclaimer/segments/new.html.erb +24 -0
  27. data/app/views/disclaimer/segments/show.html.erb +2 -0
  28. data/app/views/layouts/disclaimer/application.html.erb +15 -0
  29. data/config/routes.rb +18 -0
  30. data/db/migrate/20121023125748_create_disclaimer_documents.rb +12 -0
  31. data/db/migrate/20121024074240_create_segments.rb +10 -0
  32. data/db/migrate/20121024080818_create_disclaimer_segment_holders.rb +11 -0
  33. data/lib/disclaimer/engine.rb +5 -0
  34. data/lib/disclaimer/version.rb +3 -0
  35. data/lib/disclaimer.rb +6 -0
  36. data/lib/rails/actionpack/lib/action_controller/base.rb +28 -0
  37. data/lib/tasks/disclaimer_tasks.rake +4 -0
  38. data/test/disclaimer_test.rb +7 -0
  39. data/test/dummy/README.rdoc +261 -0
  40. data/test/dummy/Rakefile +7 -0
  41. data/test/dummy/app/assets/javascripts/application.js +15 -0
  42. data/test/dummy/app/assets/javascripts/sample.js +2 -0
  43. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  44. data/test/dummy/app/assets/stylesheets/sample.css +4 -0
  45. data/test/dummy/app/controllers/application_controller.rb +3 -0
  46. data/test/dummy/app/controllers/sample_controller.rb +12 -0
  47. data/test/dummy/app/helpers/application_helper.rb +2 -0
  48. data/test/dummy/app/helpers/sample_helper.rb +2 -0
  49. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  50. data/test/dummy/app/views/sample/index.html.erb +4 -0
  51. data/test/dummy/config/application.rb +59 -0
  52. data/test/dummy/config/boot.rb +10 -0
  53. data/test/dummy/config/database.yml +25 -0
  54. data/test/dummy/config/environment.rb +5 -0
  55. data/test/dummy/config/environments/development.rb +37 -0
  56. data/test/dummy/config/environments/production.rb +67 -0
  57. data/test/dummy/config/environments/test.rb +37 -0
  58. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  59. data/test/dummy/config/initializers/inflections.rb +15 -0
  60. data/test/dummy/config/initializers/mime_types.rb +5 -0
  61. data/test/dummy/config/initializers/secret_token.rb +7 -0
  62. data/test/dummy/config/initializers/session_store.rb +8 -0
  63. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  64. data/test/dummy/config/locales/en.yml +5 -0
  65. data/test/dummy/config/routes.rb +10 -0
  66. data/test/dummy/config.ru +4 -0
  67. data/test/dummy/db/development.sqlite3 +0 -0
  68. data/test/dummy/db/schema.rb +41 -0
  69. data/test/dummy/db/test.sqlite3 +0 -0
  70. data/test/dummy/log/development.log +13228 -0
  71. data/test/dummy/log/test.log +35207 -0
  72. data/test/dummy/public/404.html +26 -0
  73. data/test/dummy/public/422.html +26 -0
  74. data/test/dummy/public/500.html +25 -0
  75. data/test/dummy/public/favicon.ico +0 -0
  76. data/test/dummy/script/rails +6 -0
  77. data/test/dummy/test/functional/sample_controller_test.rb +29 -0
  78. data/test/dummy/test/unit/helpers/sample_helper_test.rb +4 -0
  79. data/test/dummy/tmp/cache/assets/B9D/BB0/sprockets%2Fc3340956015865527b738281d0798842 +0 -0
  80. data/test/dummy/tmp/cache/assets/C5A/090/sprockets%2F163158930fc7f594992ed570eb262440 +0 -0
  81. data/test/dummy/tmp/cache/assets/C65/6C0/sprockets%2F6411c0191302133114dd7b9452abec58 +0 -0
  82. data/test/dummy/tmp/cache/assets/C83/2C0/sprockets%2F99d131cd7946c82b8a39070e6b434530 +0 -0
  83. data/test/dummy/tmp/cache/assets/CD4/F20/sprockets%2F9705276958dc30aad02ae1f4618a60a4 +0 -0
  84. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  85. data/test/dummy/tmp/cache/assets/CE3/0F0/sprockets%2F1c1d13e6a59e0476d7663354de087ff0 +0 -0
  86. data/test/dummy/tmp/cache/assets/D05/D80/sprockets%2F0f27d3a1d395bf559a2d725033de721c +0 -0
  87. data/test/dummy/tmp/cache/assets/D14/8E0/sprockets%2F1d0962a03dd3d782c8eadf712769a972 +0 -0
  88. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  89. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  90. data/test/dummy/tmp/cache/assets/D51/800/sprockets%2F0b6c1b1792d877f8e8fb3d82d577ca92 +0 -0
  91. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  92. data/test/dummy/tmp/cache/assets/D69/ED0/sprockets%2F5e34b8807c9168eb298bc1eb4d01bc1b +0 -0
  93. data/test/dummy/tmp/cache/assets/D6A/080/sprockets%2Fb083da81ad739ec14c03d78b63c22d9f +0 -0
  94. data/test/dummy/tmp/cache/assets/D73/200/sprockets%2Ff550d44b0e67ff62964de563da84c2ab +0 -0
  95. data/test/dummy/tmp/cache/assets/D9D/D20/sprockets%2F17bfe7df9a25cca0b3e5604f442be847 +0 -0
  96. data/test/dummy/tmp/cache/assets/DA6/F40/sprockets%2F55aedaf8fe75d461c2c82239e7e1d0b9 +0 -0
  97. data/test/dummy/tmp/cache/assets/DB4/B10/sprockets%2F1419cefd434468f9dfea571aa7ee59f7 +0 -0
  98. data/test/dummy/tmp/cache/assets/DC6/910/sprockets%2Faad8dad748c771644d1bbbcf02409fe2 +0 -0
  99. data/test/dummy/tmp/cache/assets/DCD/6D0/sprockets%2Fe8e47b38d458acad468a0b2bdcd12e76 +0 -0
  100. data/test/dummy/tmp/cache/assets/DD1/600/sprockets%2Fd61c971a175fe64d20ceefe3e7f4e2b3 +0 -0
  101. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  102. data/test/dummy/tmp/cache/assets/DDD/C60/sprockets%2F59ec92d2bcdf9ece368f07a4ca6509c7 +0 -0
  103. data/test/dummy/tmp/cache/assets/DE1/2B0/sprockets%2Fdca152daab7ddab59235356c1d2b21db +0 -0
  104. data/test/dummy/tmp/cache/assets/DFB/DF0/sprockets%2Fa1fb1cc09fd766dcc9e2b9d4a9421db4 +0 -0
  105. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  106. data/test/dummy/tmp/cache/assets/E22/0C0/sprockets%2F72c5c1adba8375dda425a7bfb5ba7c4f +0 -0
  107. data/test/dummy/tmp/cache/assets/E27/370/sprockets%2Ff374d3bfba2ca636ce768ab8eecb31b3 +0 -0
  108. data/test/dummy/tmp/cache/assets/E2C/8D0/sprockets%2F234ff42c359a2beddfb9d10ee75aef3d +0 -0
  109. data/test/dummy/tmp/pids/server.pid +1 -0
  110. data/test/fixtures/disclaimer/documents.yml +9 -0
  111. data/test/fixtures/disclaimer/segment_holders.yml +9 -0
  112. data/test/fixtures/disclaimer/segments.yml +13 -0
  113. data/test/functional/disclaimer/documents_controller_test.rb +129 -0
  114. data/test/functional/disclaimer/segments_controller_test.rb +77 -0
  115. data/test/integration/navigation_test.rb +10 -0
  116. data/test/test_helper.rb +35 -0
  117. data/test/unit/disclaimer/document_test.rb +36 -0
  118. data/test/unit/disclaimer/segment_holder_test.rb +9 -0
  119. data/test/unit/disclaimer/segment_test.rb +59 -0
  120. data/test/unit/helpers/disclaimer/documents_helper_test.rb +6 -0
  121. data/test/unit/helpers/disclaimer/segments_helper_test.rb +6 -0
  122. metadata +330 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class SampleControllerTest < ActionController::TestCase
4
+
5
+ def setup
6
+ @document = Disclaimer::Document.first
7
+ end
8
+
9
+ def test_index_default_redirect
10
+ get :index
11
+ assert_redirected_to("/disclaimer/documents/#{@document.name}")
12
+ assert_equal({@document.name.to_sym => "http://#{request.host}/sample"}, session[:disclaimer])
13
+ end
14
+
15
+ def test_index_with_disclaimer_accepted
16
+ get(
17
+ :index,
18
+ {},
19
+ :disclaimer => {@document.name.to_sym => :accepted}
20
+ )
21
+ assert_response :success
22
+ end
23
+
24
+ def test_bypass_disclaimer
25
+ get :bypass_disclaimer
26
+ assert_response :success
27
+ assert_nil session[:disclaimer], "Session should not be set when disclaimer is bypassed"
28
+ end
29
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class SampleHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1 @@
1
+ 8925
@@ -0,0 +1,9 @@
1
+
2
+ one:
3
+ id: 1
4
+ name: one
5
+ title: A Disclaimer
6
+ header: You must read my disclaimer
7
+ footer: Disclaimer bottom
8
+
9
+
@@ -0,0 +1,9 @@
1
+ one:
2
+ document_id: 1
3
+ segment_id: 1
4
+ position: 1
5
+
6
+ two:
7
+ document_id: 1
8
+ segment_id: 2
9
+ position: 2
@@ -0,0 +1,13 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
2
+
3
+ one:
4
+ id: 1
5
+ name: one
6
+ title: MyString
7
+ body: MyText
8
+
9
+ two:
10
+ id: 2
11
+ name: two
12
+ title: MyString
13
+ body: MyText
@@ -0,0 +1,129 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class DocumentsControllerTest < ActionController::TestCase
5
+
6
+ def setup
7
+ @document = Document.find(1)
8
+ end
9
+
10
+ def test_index
11
+ get :index
12
+ assert_response :success
13
+ assert_equal(Document.all, assigns('documents'))
14
+ end
15
+
16
+ def test_show
17
+ get :show, :id => @document.name
18
+ assert_response :success
19
+ assert_equal(@document, assigns('document'))
20
+ end
21
+
22
+ def test_new
23
+ get :new
24
+ assert_response :success
25
+ end
26
+
27
+ def test_create
28
+ title = "Create document"
29
+ assert_difference 'Document.count', 1 do
30
+ post(
31
+ :create,
32
+ :document => {
33
+ :title => title,
34
+ :name => 'new document'
35
+ }
36
+ )
37
+ end
38
+ assert_response :redirect
39
+ assert_equal(title, Document.last.title)
40
+ end
41
+
42
+ def test_edit
43
+ get :edit, :id => @document.name
44
+ assert_equal(@document, assigns('document'))
45
+ assert_response :success
46
+ end
47
+
48
+ def test_update
49
+ title = "Document update"
50
+ assert_no_difference 'Document.count' do
51
+ post(
52
+ :update,
53
+ :id => @document.name,
54
+ :document => {
55
+ :title => title
56
+ }
57
+ )
58
+ end
59
+ assert_response :redirect
60
+ assert_equal(title, @document.reload.title)
61
+ end
62
+
63
+ def test_update_with_no_segments
64
+ assert_equal(2, @document.segments.length)
65
+ post(
66
+ :update,
67
+ :id => @document.name,
68
+ :document => {
69
+ :segments => nil
70
+ }
71
+ )
72
+ assert_equal(0, @document.reload.segments.length)
73
+ end
74
+
75
+ def test_adding_one_segment
76
+ segment = Segment.last
77
+ post(
78
+ :update,
79
+ :id => @document.name,
80
+ :document => {
81
+ :segments => {
82
+ segment.id => 'yes'
83
+ }
84
+ }
85
+ )
86
+ assert_equal([segment], @document.reload.segments)
87
+ end
88
+
89
+ def test_adding_two_segments
90
+ test_update_with_no_segments
91
+ post(
92
+ :update,
93
+ :id => @document.name,
94
+ :document => {
95
+ :segments => {
96
+ Segment.first.id => 'yes',
97
+ Segment.last.id => 'yes'
98
+ }
99
+ }
100
+ )
101
+ assert_equal(2, @document.reload.segments.length)
102
+ end
103
+
104
+ def test_adding_one_segment_after_two_segments_removed_the_extra_segment
105
+ test_adding_two_segments
106
+ test_adding_one_segment
107
+ end
108
+
109
+ def test_delete
110
+ get :delete, :id => @document.name
111
+ assert_response :success
112
+ assert_equal(@document, assigns('document'))
113
+ end
114
+
115
+ def test_destroy
116
+ assert_difference 'Document.count', -1 do
117
+ delete :destroy, :id => @document.name, :use_route => :disclaimer
118
+ end
119
+ assert_response :redirect
120
+ end
121
+
122
+ def test_accept
123
+ post :accept, :id => @document.name
124
+ assert_response :redirect
125
+ assert_equal({@document.name.to_sym => ACCEPTED}, session[:disclaimer])
126
+ end
127
+
128
+ end
129
+ end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class SegmentsControllerTest < ActionController::TestCase
5
+
6
+ def setup
7
+ @segment = Segment.find(1)
8
+ end
9
+
10
+ def test_index
11
+ get :index
12
+ assert_response :success
13
+ assert_equal(Segment.all, assigns('segments'))
14
+ end
15
+
16
+ def test_show
17
+ get :show, :id => @segment.name
18
+ assert_response :success
19
+ assert_equal(@segment, assigns('segment'))
20
+ end
21
+
22
+ def test_new
23
+ get :new
24
+ assert_response :success
25
+ end
26
+
27
+ def test_create
28
+ title = "Create segment"
29
+ assert_difference 'Segment.count', 1 do
30
+ post(
31
+ :create,
32
+ :segment => {
33
+ :title => title,
34
+ :name => 'new segment'
35
+ }
36
+ )
37
+ end
38
+ assert_response :redirect
39
+ assert_equal(title, Segment.last.title)
40
+ end
41
+
42
+ def test_edit
43
+ get :edit, :id => @segment.name
44
+ assert_equal(@segment, assigns('segment'))
45
+ assert_response :success
46
+ end
47
+
48
+ def test_update
49
+ title = "Segment update"
50
+ assert_no_difference 'Segment.count' do
51
+ post(
52
+ :update,
53
+ :id => @segment.name,
54
+ :segment => {
55
+ :title => title
56
+ }
57
+ )
58
+ end
59
+ assert_response :redirect
60
+ assert_equal(title, @segment.reload.title)
61
+ end
62
+
63
+ def test_delete
64
+ get :delete, :id => @segment.name
65
+ assert_response :success
66
+ assert_equal(@segment, assigns('segment'))
67
+ end
68
+
69
+ def test_destroy
70
+ assert_difference 'Segment.count', -1 do
71
+ delete :destroy, :id => @segment.name, :use_route => :disclaimer
72
+ end
73
+ assert_response :redirect
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActionDispatch::IntegrationTest
4
+ fixtures :all
5
+
6
+ # test "the truth" do
7
+ # assert true
8
+ # end
9
+ end
10
+
@@ -0,0 +1,35 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ require 'minitest/reporters'
10
+ MiniTest::Reporters.use!
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ # Load fixtures from the engine
16
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
17
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
18
+ end
19
+
20
+ class ActiveSupport::TestCase
21
+ fixtures :all
22
+ end
23
+
24
+ class ActionController::TestCase
25
+
26
+ #Overrides get, post etc. to use a default :use_route of :disclaimer
27
+ def process(action, parameters, session = nil, flash = nil, http_method = 'GET')
28
+ parameters ||= Hash.new
29
+ parameters[:use_route] = :disclaimer unless parameters[:use_route]
30
+ super
31
+ end
32
+
33
+ end
34
+
35
+
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class DocumentTest < ActiveSupport::TestCase
5
+ def setup
6
+ @document = Document.find(1)
7
+ @segment = Segment.find(1)
8
+ end
9
+
10
+ def test_setup
11
+ assert_equal(1, @document.id)
12
+ end
13
+
14
+ def test_segment_holder_for
15
+ segment_holder = @segment.segment_holders.first
16
+ assert_equal(segment_holder, @document.segment_holder_for(@segment))
17
+ end
18
+
19
+ def test_name_under_scored_on_save
20
+ @document.update_attribute(:name, "This is a Name")
21
+ assert_equal('this_is_a_name', @document.name)
22
+ end
23
+
24
+ def test_title_if_empty
25
+ @document.title = ""
26
+ @document.name = "this_is_a_name"
27
+ assert_equal("This is a name", @document.title)
28
+ end
29
+
30
+ def test_title_if_nil
31
+ @document.title = nil
32
+ @document.name = "this_is_a_name"
33
+ assert_equal("This is a name", @document.title)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class SegmentHolderTest < ActiveSupport::TestCase
5
+ # test "the truth" do
6
+ # assert true
7
+ # end
8
+ end
9
+ end
@@ -0,0 +1,59 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class SegmentTest < ActiveSupport::TestCase
5
+ def setup
6
+ @document = Document.find(1)
7
+ @segment = Segment.find(1)
8
+ @segment_two = Segment.find(2)
9
+ end
10
+
11
+ def test_ordering_preserver_via_through
12
+ assert_equal([@segment.segment_holders.first, @segment_two.segment_holders.first], @document.segment_holders)
13
+ assert_equal([@segment, @segment_two], @document.segments)
14
+ end
15
+
16
+ def test_reordering_via_segment_holder
17
+ @document.segment_holders.first.move_to_bottom
18
+ assert_equal([@segment_two, @segment], @document.segments)
19
+ end
20
+
21
+ def test_reordering_via_document
22
+ @document.move_to_bottom(@segment)
23
+ assert_equal([@segment_two, @segment], @document.segments)
24
+ end
25
+
26
+ def test_reordering_via_document_when_segment_not_in_document
27
+ assert_raise RuntimeError do
28
+ @document.move_to_bottom(new_segment)
29
+ end
30
+ end
31
+
32
+ def test_cannot_add_duplicate_segments_to_document
33
+ assert_no_difference '@document.segments.length' do
34
+ @document.segments << @segment
35
+ end
36
+ end
37
+
38
+ def test_name_under_scored_on_save
39
+ @segment.update_attribute(:name, "This is a Name")
40
+ assert_equal('this_is_a_name', @segment.name)
41
+ end
42
+
43
+ def test_title_if_empty
44
+ @segment.title = ""
45
+ @segment.name = "this_is_a_name"
46
+ assert_equal("This is a name", @segment.title)
47
+ end
48
+
49
+ def test_title_if_nil
50
+ @segment.title = nil
51
+ @segment.name = "this_is_a_name"
52
+ assert_equal("This is a name", @segment.title)
53
+ end
54
+
55
+ def new_segment
56
+ Segment.new(:name => 'not in document')
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class DocumentsHelperTest < ActionView::TestCase
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ module Disclaimer
4
+ class SegmentsHelperTest < ActionView::TestCase
5
+ end
6
+ end