render_turbo_stream 0.1.21 → 0.1.22

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b84c79cfe97c99b55813d6a22ebcf0267e6dc7ee66b9a6c8bb922c8f5cf812b
4
- data.tar.gz: 420971446a65cbda6c141be9c32941ddf991944cbb3c84f9f2eb259cf077c3b6
3
+ metadata.gz: 5656c817324a84016e78f1ab49a2f390448d79095f1c0b29a2ca9a459fdfdf04
4
+ data.tar.gz: a250f2ff61d1f9f0f622a097e9c725b9741169d794bc2a46f6fa792dfa2d33a9
5
5
  SHA512:
6
- metadata.gz: 3bc0935233cc25323b8f92e12227308d680b24d6ea532786e685c75d6500158d68991dd9babe5d2bc1424ca8c93f43912528cc8a4abac6363c636331d8929fd5
7
- data.tar.gz: f2ee4939746a8b7d4dc06df81920e55baa3c5bce6ee26b04778b91e5067ffb846e436fddeed2c4868f9ea9b0ca5876a8f4e29a65f146fc438c362bfbc7c13c05
6
+ metadata.gz: e999d3ce725859885ca2127c54ba2e79f8ea27104ca07ceeebfd750cb23734055ca43c38ed5e8d591a8b7efcd24cde28bc8bf4db75a787e917ea6a31147922e1
7
+ data.tar.gz: 8c6973e93202a10fc265fa7cc6a01cabe3ee125f3e48e8b7fd4511de7bdc05c8239146b834051321a47c883fbd2b55a3b731bc4bfab25dbb50c6f05d5d12e42f
data/README.md CHANGED
@@ -79,34 +79,42 @@ stream_partial(
79
79
 
80
80
  ## Testing
81
81
 
82
- For system testing, there is Capybara.
82
+ For system testing we have Capybara. This works great and is necessary, but it is good practice to break tests into smaller pieces.
83
83
 
84
84
  For request-level tests, there are some helpers:
85
85
 
86
- If the request format is not `turbo_stream`, which is the case on request specs, the method responds in a special format html that can be easily checked by included test helpers. So tests could look like this:
86
+ If the request format is not `turbo_stream`, which is the case on request specs, the method responds in a special html that contains the medadata that is interesting for our tests and is parsed by included test helpers. So tests could look like this:
87
87
 
88
88
  ```ruby
89
89
  require 'rails_helper'
90
90
  include RenderTurboStream::TestHelpers
91
91
 
92
92
  RSpec.describe "Articles", type: :request do
93
+
93
94
  let(:invalid_params) { { article: { title: '', desciption: 'abc' } } }
95
+
94
96
  it 'create failed' do
95
97
  post articles_path(params: invalid_params)
96
98
 
97
99
  expect(response.status).to eq(422)
98
100
  expect(partials_count).to eq(2)
99
101
 
100
- # .._params means: check the params used to generate the partials.
101
102
  expect(partials_paths).to include('articles/form', 'layouts/flash')
102
103
  expect(partials_ids).to include('form', 'flash-box')
103
104
 
105
+ # ..partials_params_* are the params by what partials are called
106
+ # id is the id where, by example, a turbo_stream.replace points to
104
107
  expect(partials_params_by_id['flash-box'].length).to eq(1)
105
108
  expect(partials_params_by_id['flash-box'].first['partial']).to eq('layouts/flash')
106
109
 
110
+ # ..partials_html_* is the html returned from the partial as string
107
111
  expect(partials_html_by_id['flash-box'].length).to eq(1)
108
112
  expect(partials_html_by_id['flash-box'].first).to include('Article could not be created')
109
113
 
114
+ # unique_partial returns false if this ID is cero or multiple times rendered to
115
+ expect(unique_partial_html_by_id('flash-box')).to include('Article could not be created')
116
+
117
+ # *_path is the controller_path for calling the partial
110
118
  expect(partials_params_by_path['layouts/flash'].length).to eq(1)
111
119
  expect(partials_params_by_path['layouts/flash'].first['partial']).to eq('layouts/flash')
112
120
 
@@ -1,13 +1,13 @@
1
1
  <% partials_count = 0 %>
2
2
  <% rendered_partials = [] %>
3
- <%# htmls = [] %>
4
3
  <% htmls_by_id = {} %>
5
4
  <% params_by_id = {} %>
6
5
  <% htmls_by_path = {} %>
7
6
  <% params_by_path = {} %>
7
+
8
8
  <% streams.each do |s| %>
9
+
9
10
  <% html = (render s[:partial], locals: s[:locals], formats: [:html ]) %>
10
- <%# htmls.push(html) %>
11
11
  <% htmls_by_id[s[:id]] ||= [] %>
12
12
  <% htmls_by_id[s[:id]].push(html) %>
13
13
  <% params_by_id[s[:id]] ||= [] %>
@@ -20,6 +20,7 @@
20
20
 
21
21
  <% partials_count += 1 %>
22
22
  <% rendered_partials.push(s[:partial]) %>
23
+
23
24
  <% end %>
24
25
 
25
26
  <%= content_tag :div, htmls_by_id.to_json, id: 'htmls_by_id' %>
@@ -29,6 +30,4 @@
29
30
  <%= content_tag :div, params_by_path.to_json, id: 'params_by_path' %>
30
31
 
31
32
  <%= content_tag :div, check.to_json, id: 'check-json' %>
32
- <%#= content_tag :div, htmls.to_json, id: 'htmls' %>
33
33
  <%= content_tag :div, rendered_partials.to_json, id: 'rendered-partials' %>
34
- <%#= content_tag :div, streams.to_json, id: 'streams' %>
@@ -7,6 +7,16 @@ module RenderTurboStream
7
7
  JSON.parse(e.inner_html)
8
8
  end
9
9
 
10
+ # returns false if id is cero or multiple times rendered to
11
+ def unique_partial_html_by_id(id)
12
+ p = partials_html_by_id[id]
13
+ if p.length != 1
14
+ false
15
+ else
16
+ p.first
17
+ end
18
+ end
19
+
10
20
  def partials_params_by_id
11
21
  e = Nokogiri::HTML(response.body).search('#params_by_id').first
12
22
  JSON.parse(e.inner_html)
@@ -1,3 +1,3 @@
1
1
  module RenderTurboStream
2
- VERSION = "0.1.21"
2
+ VERSION = "0.1.22"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: render_turbo_stream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.21
4
+ version: 0.1.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - christian