booties 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +172 -0
  3. data/Rakefile +5 -4
  4. data/app/controllers/booties/application_controller.rb +4 -1
  5. data/app/helpers/booties/application_helper.rb +3 -26
  6. data/app/helpers/booties/badge_helper.rb +6 -3
  7. data/app/helpers/booties/breadcrumb_helper.rb +29 -0
  8. data/app/helpers/booties/button_helper.rb +10 -8
  9. data/app/helpers/booties/dropdown_helper.rb +71 -0
  10. data/app/helpers/booties/flag_helper.rb +7 -4
  11. data/app/helpers/booties/modal_helper.rb +4 -1
  12. data/app/helpers/booties/panel_helper.rb +3 -1
  13. data/app/helpers/booties/popover_helper.rb +28 -19
  14. data/app/helpers/booties/tooltip_helper.rb +12 -8
  15. data/config/routes.rb +2 -0
  16. data/lib/booties.rb +3 -1
  17. data/lib/booties/engine.rb +7 -1
  18. data/lib/booties/modal.rb +13 -12
  19. data/lib/booties/panel.rb +21 -18
  20. data/lib/booties/utils.rb +8 -10
  21. data/lib/booties/version.rb +3 -1
  22. data/lib/tasks/booties_tasks.rake +2 -0
  23. data/test/dummy/Rakefile +1 -1
  24. data/test/dummy/app/assets/javascripts/application.js +0 -13
  25. data/test/dummy/app/assets/stylesheets/application.css +0 -15
  26. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  27. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  28. data/test/dummy/app/controllers/application_controller.rb +0 -4
  29. data/test/dummy/app/controllers/samples_controller.rb +28 -0
  30. data/test/dummy/app/jobs/application_job.rb +2 -0
  31. data/test/dummy/app/views/layouts/application.html.erb +9 -11
  32. data/test/dummy/app/views/samples/badges.html.erb +2 -0
  33. data/test/dummy/app/views/{home → samples}/breadcrumbs.html.erb +2 -1
  34. data/test/dummy/app/views/samples/buttons.html.erb +2 -0
  35. data/test/dummy/app/views/samples/dropdowns.html.erb +6 -0
  36. data/test/dummy/app/views/samples/flags.html.erb +2 -0
  37. data/test/dummy/app/views/samples/modals.html.erb +12 -0
  38. data/test/dummy/app/views/samples/panels.html.erb +14 -0
  39. data/test/dummy/app/views/samples/popovers.html.erb +9 -0
  40. data/test/dummy/app/views/samples/tooltips.html.erb +3 -0
  41. data/test/dummy/bin/bundle +1 -1
  42. data/test/dummy/bin/rails +1 -1
  43. data/test/dummy/bin/setup +17 -13
  44. data/test/dummy/bin/update +28 -0
  45. data/test/dummy/config.ru +2 -1
  46. data/test/dummy/config/application.rb +13 -12
  47. data/test/dummy/config/boot.rb +2 -2
  48. data/test/dummy/config/environment.rb +1 -1
  49. data/test/dummy/config/environments/development.rb +24 -16
  50. data/test/dummy/config/environments/production.rb +23 -28
  51. data/test/dummy/config/environments/test.rb +5 -11
  52. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  53. data/test/dummy/config/initializers/content_security_policy.rb +25 -0
  54. data/test/dummy/config/initializers/cookies_serializer.rb +2 -0
  55. data/test/dummy/config/initializers/wrap_parameters.rb +6 -1
  56. data/test/dummy/config/locales/en.yml +10 -0
  57. data/test/dummy/config/puma.rb +34 -0
  58. data/test/dummy/config/routes.rb +16 -8
  59. data/test/dummy/config/spring.rb +6 -0
  60. data/test/dummy/log/test.log +11202 -19551
  61. data/test/dummy/public/404.html +6 -6
  62. data/test/dummy/public/422.html +6 -6
  63. data/test/dummy/public/500.html +6 -6
  64. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  65. data/test/dummy/public/apple-touch-icon.png +0 -0
  66. data/test/dummy/tmp/cache/assets/sprockets/v3.0/33/33EUCQBNqL6TOaGyMFn9wz2v39pHMJ4LOUUFUteIHHM.cache +1 -0
  67. data/test/dummy/tmp/cache/assets/sprockets/v3.0/3N/3NnKgR2TsTI1qCXKZpts0uJzp2dRJcoYp3nnFU6YE4o.cache +2 -0
  68. data/test/dummy/tmp/cache/assets/sprockets/v3.0/7Q/7Q2gtOOyCVPFrfYz4KjmXJsM_m8Yra4MjgsQmfVGxZY.cache +1 -0
  69. data/test/dummy/tmp/cache/assets/sprockets/v3.0/8c/8cROjTzeZZQaOFNLPKGuMtXO7EHxNfiEa72qt65UoF4.cache +1 -0
  70. data/test/dummy/tmp/cache/assets/sprockets/v3.0/F6/F6RhC2MbCvVanNZZe44hqlJNKAdIrH4NUzRxj5N2_EQ.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Fc/FcMeZRcfG4LrhIhl3xrAg3EhSZInU4efHmUrjIs4keE.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/sprockets/v3.0/H3/H3dfPRbxbWIB6dQXrQ6xA9nDJqy4dOq1ujslocGVY9U.cache +1 -0
  73. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LK/LKisVDbQmzgRQKdFoNH5tRbTr72CrlM_2q7MZczv2Pg.cache +1 -0
  74. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Mj/MjwYGG9GkHD1fwwH2bg66EBYl3zCA_mqeDF9otey4-U.cache +3 -0
  75. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Pc/Pce9HMZhc6XmsNfLUN84Enw7mySJ7ZYzys9mXmCVXqA.cache +0 -0
  76. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Po/PoftKmjB8lzW06EMKeru1CsqVtULc0MsiTysT2JNqvU.cache +0 -0
  77. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Su/SuILTE3Es0N_r-36Ddu2E6h49WcwH_-RsZyG4SPwKFQ.cache +0 -0
  78. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cJ/cJG59MHf0x4qJKYES0pa0nLpOFpFF7YwrrvIVKIixyA.cache +0 -0
  79. data/test/dummy/tmp/cache/assets/sprockets/v3.0/fw/fwPYklzExHPpgeuv53ew_8OIpJVRyaHj2Jtj2JP9j5A.cache +0 -0
  80. data/test/dummy/tmp/cache/assets/sprockets/v3.0/jc/jc_TR7ZZTSFDDRKdgc-KnZskUESr2rLOqcYZej83LvU.cache +0 -0
  81. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rV/rVy4-idUuK0Va9FLw3G8pYeZFwJAwmvs_bQcbq6_Cd0.cache +1 -0
  82. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rY/rYyeRvy3oIuNfWeDhoriNlAlVjN4Wg4A3_9_OTDFin4.cache +1 -0
  83. data/test/dummy/tmp/cache/assets/sprockets/v3.0/tY/tYFbDrMNElXwgmisit50aNXJvRU2zlIFk5g-EJ1CQTc.cache +0 -0
  84. data/test/helpers/booties/badge_helper_test.rb +7 -5
  85. data/test/helpers/booties/breadcrumb_helper_test.rb +13 -0
  86. data/test/helpers/booties/button_helper_test.rb +14 -12
  87. data/test/helpers/booties/dropdown_helper_test.rb +43 -0
  88. data/test/helpers/booties/flag_helper_test.rb +7 -5
  89. data/test/helpers/booties/modal_helper_test.rb +9 -7
  90. data/test/helpers/booties/panel_helper_test.rb +4 -2
  91. data/test/helpers/booties/popover_helper_test.rb +33 -42
  92. data/test/helpers/booties/tooltip_helper_test.rb +19 -40
  93. data/test/integration/samples_test.rb +103 -0
  94. data/test/lib/booties/modal_test.rb +193 -0
  95. data/test/{booties → lib/booties}/panel_test.rb +40 -22
  96. data/test/lib/booties/utils_test.rb +41 -0
  97. data/test/stub_view.rb +14 -7
  98. data/test/test_helper.rb +10 -11
  99. metadata +124 -98
  100. data/app/assets/javascripts/booties/application.js +0 -13
  101. data/app/assets/stylesheets/booties/application.css +0 -15
  102. data/test/booties/modal_test.rb +0 -170
  103. data/test/booties/utils_test.rb +0 -26
  104. data/test/dummy/README.rdoc +0 -28
  105. data/test/dummy/app/assets/javascripts/home.js +0 -2
  106. data/test/dummy/app/assets/stylesheets/home.css +0 -4
  107. data/test/dummy/app/controllers/home_controller.rb +0 -25
  108. data/test/dummy/app/helpers/home_helper.rb +0 -2
  109. data/test/dummy/app/views/home/badge.html.erb +0 -3
  110. data/test/dummy/app/views/home/button.html.erb +0 -2
  111. data/test/dummy/app/views/home/flag.html.erb +0 -5
  112. data/test/dummy/app/views/home/modal.html.erb +0 -16
  113. data/test/dummy/app/views/home/panel.html.erb +0 -25
  114. data/test/dummy/app/views/home/popover.html.erb +0 -7
  115. data/test/dummy/app/views/home/tooltip.html.erb +0 -7
  116. data/test/dummy/config/initializers/assets.rb +0 -11
  117. data/test/dummy/config/initializers/session_store.rb +0 -3
  118. data/test/dummy/config/locales/booties.yml +0 -4
  119. data/test/dummy/config/secrets.yml +0 -22
  120. data/test/dummy/log/development.log +0 -420
  121. data/test/dummy/test/controllers/home_controller_test.rb +0 -108
  122. data/test/helpers/booties/application_helper_test.rb +0 -11
  123. data/test/integration/navigation_test.rb +0 -9
@@ -1,55 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  module Booties
4
6
  class TooltipHelperTest < ActionView::TestCase
5
- test '#tooltip renders span tag with given title' do
6
- expected = content_tag :span, 'baz',
7
- data: { toggle: 'tooltip' }, title: 'foo bar'
8
-
9
- assert_equal expected, tooltip(title: 'foo bar') { 'baz' }
7
+ def test_tooltip_renders_span_tag_with_given_title
8
+ assert_dom_equal '<span title="required" data-toggle="tooltip">*</span>',
9
+ tooltip('*', title: 'required')
10
10
  end
11
11
 
12
- test '#tooltip with bottom placement' do
13
- expected = content_tag :span, 'baz',
14
- data: { toggle: 'tooltip', placement: 'bottom' }, title: 'foo bar'
15
-
16
- assert_equal expected, tooltip(title: 'foo bar', placement: :bottom) { 'baz' }
12
+ def test_tooltip_accepts_content_as_block
13
+ assert_dom_equal '<span title="required" data-toggle="tooltip">*</span>',
14
+ tooltip(title: 'required') { '*' }
17
15
  end
18
16
 
19
- test '#tooltip with right placement' do
20
- expected = content_tag :span, 'baz',
21
- data: { toggle: 'tooltip', placement: 'right' }, title: 'foo bar'
22
-
23
- assert_equal expected, tooltip(title: 'foo bar', placement: :right) { 'baz' }
17
+ def test_tooltip_with_custom_placement
18
+ assert_dom_equal \
19
+ '<span title="required" data-toggle="tooltip" data-placement="bottom">*</span>',
20
+ tooltip('*', title: 'required', placement: :bottom)
24
21
  end
25
22
 
26
- test '#tooltip with left placement' do
27
- expected = content_tag :span, 'baz',
28
- data: { toggle: 'tooltip', placement: 'left' }, title: 'foo bar'
29
-
30
- assert_equal expected, tooltip(title: 'foo bar', placement: :left) { 'baz' }
23
+ def test_tooltip_renders_tooltip_using_alternative_wrapper_tag
24
+ assert_dom_equal '<abbr title="required" data-toggle="tooltip">*</abbr>',
25
+ tooltip('*', title: 'required', wrapper_tag: :abbr)
31
26
  end
32
27
 
33
- test '#tooltip with unrecognized placement' do
34
- e = assert_raises ArgumentError do
35
- tooltip(title: 'foo bar', placement: :bogus) {}
36
- end
37
- assert_equal 'invalid placement: :bogus, ' \
38
- 'valid placements are :left, :right, :top, :bottom', e.message
39
- end
40
-
41
- test '#tooltip renders tooltip using alternative wrapper tag' do
42
- expected = content_tag :abbr, 'baz',
43
- data: { toggle: 'tooltip' }, title: 'foo'
44
-
45
- assert_equal expected, tooltip(title: 'foo', wrapper_tag: :abbr) { 'baz' }
46
- end
47
-
48
- test '#tooltip accepts additional html attributes' do
49
- expected = content_tag :span, 'baz',
50
- data: { toggle: 'tooltip' }, title: 'foo', class: 'bar'
51
-
52
- assert_equal expected, tooltip(title: 'foo', class: 'bar') { 'baz' }
28
+ def test_tooltip_accepts_additional_html_attributes
29
+ assert_dom_equal \
30
+ '<abbr class="initialism" title="HyperText Markup Language" data-toggle="tooltip">HTML</abbr>',
31
+ tooltip('HTML', title: 'HyperText Markup Language', class: 'initialism', wrapper_tag: :abbr)
53
32
  end
54
33
  end
55
34
  end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class NavigationTest < ActionDispatch::IntegrationTest
6
+ def test_badges
7
+ get samples_badges_url
8
+ assert_select 'span.badge', '101'
9
+ assert_select 'span.badge.foo', '42'
10
+ end
11
+
12
+ def test_breadcrumbs
13
+ get samples_breadcrumbs_url
14
+ assert_select 'ol.breadcrumb' do
15
+ assert_select 'li:first-child a', 'Foo'
16
+ assert_select 'li:last-child.active', 'Bar'
17
+ end
18
+ end
19
+
20
+ def test_buttons
21
+ get samples_buttons_url
22
+ assert_select 'a.btn.btn-default', 'Foo'
23
+ assert_select 'a.btn.btn-danger.btn-xs[data-method="delete"]', 'Bar'
24
+ end
25
+
26
+ def test_dropdowns
27
+ get samples_dropdowns_url
28
+ assert_select 'a.dropdown-toggle[role="button"][data-toggle="dropdown"]', 'Foo'
29
+ assert_select 'ul.dropdown-menu' do
30
+ assert_select 'li', 'Foo'
31
+ end
32
+ end
33
+
34
+ def test_flags
35
+ get samples_flags_url
36
+ assert_select 'span.label.label-default', 'Foo'
37
+ assert_select 'span.label.label-primary.foo', 'Bar'
38
+ end
39
+
40
+ def test_modals
41
+ get samples_modals_url
42
+ assert_select 'div.modal.fade#foo' do
43
+ assert_select 'div.modal-dialog.modal-lg' do
44
+ assert_select 'div.modal-content' do
45
+ assert_select 'div.modal-header' do
46
+ assert_select 'button.close[data-dismiss="modal"][type="button"]', '×'
47
+ assert_select 'h4.modal-title', 'Title'
48
+ end
49
+ assert_select 'div.modal-body' do
50
+ assert_select 'p', 'Body'
51
+ end
52
+ assert_select 'div.modal-footer' do
53
+ assert_select 'button.btn.btn-default[data-dismiss="modal"][type="button"]', 'Dismiss'
54
+ assert_select 'a.btn.btn-primary[href="/bar"]', 'Confirm'
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def test_panels
62
+ get samples_panels_url
63
+
64
+ assert_select 'div.panel.panel-default' do
65
+ assert_select 'div.panel-heading' do
66
+ assert_select 'h3.panel-title', 'Title'
67
+ end
68
+ assert_select 'div.panel-body', 'Body'
69
+ assert_select 'div.panel-footer', 'Footer'
70
+ end
71
+
72
+ assert_select 'div.panel.panel-info' do
73
+ assert_select 'div.panel-heading' do
74
+ assert_select 'h3.panel-title', 'Title'
75
+ end
76
+ assert_select 'table caption', 'Use table instead of .panel-body'
77
+ end
78
+ end
79
+
80
+ def test_popovers
81
+ get samples_popovers_url
82
+
83
+ assert_select 'button', text: 'Text' do
84
+ assert_select '[type="button"]'
85
+ assert_select '[data-toggle="popover"]'
86
+ assert_select '[data-content="Lorem ipsum dolor sit amet"]'
87
+ end
88
+
89
+ assert_select 'a', text: 'Text' do
90
+ assert_select '[role="button"]'
91
+ assert_select '[data-toggle="popover"]'
92
+ assert_select '[data-placement="right"]'
93
+ assert_select '[data-trigger="focus"]'
94
+ assert_select '[title="Lorem ipsum dolor sit amet"]'
95
+ assert_select '[data-content="Occaecati corrupti atque quasi sit"]'
96
+ end
97
+ end
98
+
99
+ def test_tooltips
100
+ get samples_tooltips_url
101
+ assert_select 'span[data-toggle="tooltip"][title="Lorem ipsum dolor sit amet"]', 'Lorem ipsum…'
102
+ end
103
+ end
@@ -0,0 +1,193 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ require 'stub_view'
5
+
6
+ module Booties
7
+ class ModalTest < Minitest::Test
8
+ def setup
9
+ @template = StubView.new
10
+ @backend = I18n.backend
11
+ I18n.backend = I18n::Backend::KeyValue.new({})
12
+ I18n.enforce_available_locales = false
13
+ end
14
+
15
+ def teardown
16
+ I18n.backend = @backend
17
+ end
18
+
19
+ def test_render_renders_a_fading_modal_with_an_id_and_a_dialog
20
+ modal = Modal.new @template, id: 'foo'
21
+ expected = '<div class="modal fade" id="foo"><div class="modal-dialog">' \
22
+ '<div class="modal-content"></div></div></div>'
23
+ actual = modal.render {}
24
+ assert_equal expected, actual
25
+ end
26
+
27
+ def test_render_renders_a_non_fading_modal_when_fade_is_falsey
28
+ modal = Modal.new @template, id: 'foo', fade: false
29
+ expected = '<div class="modal" id="foo"><div class="modal-dialog">' \
30
+ '<div class="modal-content"></div></div></div>'
31
+ actual = modal.render {}
32
+ assert_equal expected, actual
33
+ end
34
+
35
+ def test_render_passes_misc_options_to_outer_container
36
+ modal = Modal.new @template, id: 'foo'
37
+ expected = /<div class="modal fade foo" id="foo" data-bar="baz">/
38
+ actual = modal.render(class: 'foo', data: { bar: 'baz' }) {}
39
+ assert_match expected, actual
40
+ end
41
+
42
+ def test_large_modal
43
+ modal = Modal.new @template, id: 'foo', size: :large
44
+ expected = /<div class="modal-dialog modal-lg">/
45
+ actual = modal.render {}
46
+ assert_match expected, actual
47
+ end
48
+
49
+ def test_small_modal
50
+ modal = Modal.new @template, id: 'foo', size: :small
51
+ expected = /<div class="modal-dialog modal-sm">/
52
+ actual = modal.render {}
53
+ assert_match expected, actual
54
+ end
55
+
56
+ def test_dialog_renders_a_modal_dialog_with_a_modal_content
57
+ modal = Modal.new @template, id: 'foo'
58
+ expected = '<div class="modal-dialog"><div class="modal-content">' \
59
+ '</div></div>'
60
+ actual = modal.dialog {}
61
+ assert_equal expected, actual
62
+ end
63
+
64
+ def test_content_renders_a_modal_content
65
+ modal = Modal.new @template, id: 'foo'
66
+ expected = '<div class="modal-content"></div>'
67
+ actual = modal.content {}
68
+ assert_equal expected, actual
69
+ end
70
+
71
+ def test_content_yields_modal_to_block
72
+ modal = Modal.new @template, id: 'foo'
73
+ yielded_modal = nil
74
+ modal.content do |m|
75
+ yielded_modal = m
76
+ end
77
+ assert_same modal, yielded_modal
78
+ end
79
+
80
+ def test_header_renders_a_modal_header_with_a_title_and_a_dismissal
81
+ modal = Modal.new @template, id: 'foo'
82
+ expected = '<div class="modal-header">' \
83
+ '<button class="close" data-dismiss="modal" type="button">' \
84
+ '&times;' \
85
+ '</button><h4 class="modal-title">content</h4></div>'
86
+ actual = modal.header { 'content' }
87
+ assert_equal expected, actual
88
+ end
89
+
90
+ def test_header_renders_a_modal_header_withouth_a_dismissal
91
+ modal = Modal.new @template, id: 'foo'
92
+ expected = '<div class="modal-header">' \
93
+ '<h4 class="modal-title">content</h4></div>'
94
+ actual = modal.header(close: false) { 'content' }
95
+ assert_equal expected, actual
96
+ end
97
+
98
+ def test_header_uses_html_dismissal
99
+ icon = '<span class="glyphicon glyphicon-remove" aria-label="Dismiss"></span>'
100
+ translations = {}
101
+ I18n.backend = I18n::Backend::KeyValue.new translations
102
+ I18n.backend.store_translations I18n.locale,
103
+ booties: { modal: { dismiss_html: icon } }
104
+
105
+ modal = Modal.new @template, id: 'foo'
106
+ expected = %r{<button class="close" data-dismiss="modal" type="button">#{icon}</button>}
107
+ actual = modal.header { 'content' }
108
+ assert_match expected, actual
109
+ end
110
+
111
+ def test_header_falls_back_on_non_html_dismissal
112
+ translations = {}
113
+ I18n.backend = I18n::Backend::KeyValue.new translations
114
+ I18n.backend.store_translations I18n.locale,
115
+ booties: { modal: { dismiss: 'close' } }
116
+
117
+ modal = Modal.new @template, id: 'foo'
118
+ expected = %r{<button class="close" data-dismiss="modal" type="button">close</button>}
119
+ actual = modal.header { 'content' }
120
+ assert_match expected, actual
121
+ end
122
+
123
+ def test_header_falls_back_on_default_dismissal
124
+ translations = {}
125
+ I18n.backend = I18n::Backend::KeyValue.new translations
126
+
127
+ modal = Modal.new @template, id: 'foo'
128
+ expected = %r{<button class="close" data-dismiss="modal" type="button">&times;</button>}
129
+ actual = modal.header { 'content' }
130
+ assert_match expected, actual
131
+ end
132
+
133
+ def test_body_renders_a_modal_body
134
+ modal = Modal.new @template, id: 'foo'
135
+ expected = '<div class="modal-body">content</div>'
136
+ actual = modal.body { 'content' }
137
+ assert_equal expected, actual
138
+ end
139
+
140
+ def test_footer_renders_a_modal_footer
141
+ modal = Modal.new @template, id: 'foo'
142
+ expected = '<div class="modal-footer">content</div>'
143
+ actual = modal.footer { 'content' }
144
+ assert_equal expected, actual
145
+ end
146
+
147
+ def test_title_renders_a_modal_title
148
+ modal = Modal.new @template, id: 'foo'
149
+ expected = '<h4 class="modal-title">content</h4>'
150
+ actual = modal.title('content')
151
+ assert_equal expected, actual
152
+ end
153
+
154
+ def test_title_accepts_content_as_a_block
155
+ modal = Modal.new @template, id: 'foo'
156
+ expected = '<h4 class="modal-title">content</h4>'
157
+ actual = modal.title { 'content' }
158
+ assert_equal expected, actual
159
+ end
160
+
161
+ def test_dismiss_renders_a_dismiss_button
162
+ modal = Modal.new @template, id: 'foo'
163
+ expected = '<button class="close" data-dismiss="modal" type="button">' \
164
+ 'content</button>'
165
+ actual = modal.dismiss('content')
166
+ assert_equal expected, actual
167
+ end
168
+
169
+ def test_dismiss_accepts_content_as_a_block
170
+ modal = Modal.new @template, id: 'foo'
171
+ expected = '<button class="close" data-dismiss="modal" type="button">' \
172
+ 'content</button>'
173
+ actual = modal.dismiss { 'content' }
174
+ assert_equal expected, actual
175
+ end
176
+
177
+ def test_dismiss_accepts_custom_class
178
+ modal = Modal.new @template, id: 'foo'
179
+ expected = '<button class="btn btn-default" data-dismiss="modal"' \
180
+ ' type="button">content</button>'
181
+ actual = modal.dismiss('content', class: 'btn btn-default')
182
+ assert_equal expected, actual
183
+ end
184
+
185
+ def test_dismiss_accepts_custom_class_and_block
186
+ modal = Modal.new @template, id: 'foo'
187
+ expected = '<button class="btn btn-default" data-dismiss="modal"' \
188
+ ' type="button">content</button>'
189
+ actual = modal.dismiss(class: 'btn btn-default') { 'content' }
190
+ assert_equal expected, actual
191
+ end
192
+ end
193
+ end
@@ -1,37 +1,43 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'stub_view'
3
5
 
4
6
  module Booties
5
7
  class PanelTest < Minitest::Test
6
8
  def setup
7
- @view_context = StubView.new
9
+ @template = StubView.new
8
10
  end
9
11
 
10
12
  def test_default_panel
11
13
  expected = '<div class="panel panel-default">content</div>'
12
- assert_equal expected, panel.render { 'content' }
14
+ actual = panel.render { 'content' }
15
+ assert_equal expected, actual
13
16
  end
14
17
 
15
18
  def test_panel_with_custom_context
16
- panel = Panel.new @view_context, context: :primary
19
+ panel = Panel.new @template, context: :primary
17
20
  expected = '<div class="panel panel-primary">content</div>'
18
- assert_equal expected, panel.render { 'content' }
21
+ actual = panel.render { 'content' }
22
+ assert_equal expected, actual
19
23
  end
20
24
 
21
25
  def test_render_panel_with_custom_wrapper_tag
22
- panel = Panel.new @view_context, wrapper_tag: 'fieldset'
26
+ panel = Panel.new @template, wrapper_tag: 'fieldset'
23
27
  expected = '<fieldset class="panel panel-default"></fieldset>'
24
- assert_equal expected, panel.render {}
28
+ actual = panel.render {}
29
+ assert_equal expected, actual
25
30
  end
26
31
 
27
32
  def test_optional_arguments_to_panel
28
- panel = Panel.new @view_context, id: 'foo', class: 'bar'
33
+ panel = Panel.new @template, id: 'foo', class: 'bar'
29
34
  expected = '<div class="panel panel-default bar" id="foo"></div>'
30
- assert_equal expected, panel.render {}
35
+ actual = panel.render {}
36
+ assert_equal expected, actual
31
37
  end
32
38
 
33
39
  def test_render_yields_panel_to_block
34
- panel = Panel.new @view_context
40
+ panel = Panel.new @template
35
41
  yielded_panel = nil
36
42
  panel.render { |p| yielded_panel = p }
37
43
  assert_same panel, yielded_panel
@@ -39,68 +45,80 @@ module Booties
39
45
 
40
46
  def test_panel_heading
41
47
  expected = '<div class="panel-heading">content</div>'
42
- assert_equal expected, panel.heading('content')
48
+ actual = panel.heading('content')
49
+ assert_equal expected, actual
43
50
  end
44
51
 
45
52
  def test_panel_heading_accepts_block
46
53
  expected = '<div class="panel-heading">content</div>'
47
- assert_equal expected, panel.heading { 'content' }
54
+ actual = panel.heading { 'content' }
55
+ assert_equal expected, actual
48
56
  end
49
57
 
50
58
  def test_panel_heading_with_optional_arguments
51
59
  expected = '<div class="panel-heading foo" id="bar"></div>'
52
- assert_equal expected, panel.heading('', class: 'foo', id: 'bar')
60
+ actual = panel.heading('', class: 'foo', id: 'bar')
61
+ assert_equal expected, actual
53
62
  end
54
63
 
55
64
  def test_panel_title
56
65
  expected = '<h3 class="panel-title">content</h3>'
57
- assert_equal expected, panel.title('content')
66
+ actual = panel.title('content')
67
+ assert_equal expected, actual
58
68
  end
59
69
 
60
70
  def test_panel_title_accepts_block
61
71
  expected = '<h3 class="panel-title">content</h3>'
62
- assert_equal expected, panel.title { 'content' }
72
+ actual = panel.title { 'content' }
73
+ assert_equal expected, actual
63
74
  end
64
75
 
65
76
  def test_panel_title_with_optional_arguments
66
77
  expected = '<h3 class="panel-title foo" id="bar"></h3>'
67
- assert_equal expected, panel.title('', class: 'foo', id: 'bar')
78
+ actual = panel.title('', class: 'foo', id: 'bar')
79
+ assert_equal expected, actual
68
80
  end
69
81
 
70
82
  def test_panel_body
71
83
  expected = '<div class="panel-body">content</div>'
72
- assert_equal expected, panel.body('content')
84
+ actual = panel.body('content')
85
+ assert_equal expected, actual
73
86
  end
74
87
 
75
88
  def test_panel_body_accepts_block
76
89
  expected = '<div class="panel-body">content</div>'
77
- assert_equal expected, panel.body { 'content' }
90
+ actual = panel.body { 'content' }
91
+ assert_equal expected, actual
78
92
  end
79
93
 
80
94
  def test_panel_body_with_optional_arguments
81
95
  expected = '<div class="panel-body foo" id="bar"></div>'
82
- assert_equal expected, panel.body('', class: 'foo', id: 'bar')
96
+ actual = panel.body('', class: 'foo', id: 'bar')
97
+ assert_equal expected, actual
83
98
  end
84
99
 
85
100
  def test_panel_footer
86
101
  expected = '<div class="panel-footer">content</div>'
87
- assert_equal expected, panel.footer('content')
102
+ actual = panel.footer('content')
103
+ assert_equal expected, actual
88
104
  end
89
105
 
90
106
  def test_panel_footer_accepts_block
91
107
  expected = '<div class="panel-footer">content</div>'
92
- assert_equal expected, panel.footer { 'content' }
108
+ actual = panel.footer { 'content' }
109
+ assert_equal expected, actual
93
110
  end
94
111
 
95
112
  def test_panel_footer_with_optional_arguments
96
113
  expected = '<div class="panel-footer foo" id="bar"></div>'
97
- assert_equal expected, panel.footer('', class: 'foo', id: 'bar')
114
+ actual = panel.footer('', class: 'foo', id: 'bar')
115
+ assert_equal expected, actual
98
116
  end
99
117
 
100
118
  private
101
119
 
102
120
  def panel
103
- @panel ||= Panel.new @view_context
121
+ @panel ||= Panel.new @template
104
122
  end
105
123
  end
106
124
  end