render_turbo_stream 0.1.20 → 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: 5c9a8ce6edc86ce1bf4adb28042784f90665fb915d32c663899fa66fa6f6a764
4
- data.tar.gz: cb31e25e686751127e6eb21562ab31bb0a15c25a7760691be2ace27fd32872a2
3
+ metadata.gz: 5656c817324a84016e78f1ab49a2f390448d79095f1c0b29a2ca9a459fdfdf04
4
+ data.tar.gz: a250f2ff61d1f9f0f622a097e9c725b9741169d794bc2a46f6fa792dfa2d33a9
5
5
  SHA512:
6
- metadata.gz: 073a9bd4038390487978547dfd72e566744bba02032b7fc43989a5914b5dcde55612009774828101f88467ba37b86bb73693d0819441f6ddf7f3bc5fbd0b5736
7
- data.tar.gz: 41836ea59255674882a518e861526d9d9460bb786943e5651304f48670e7af2cf7feedc5a6a7c2ae924b45f785f3b2e957afe4cb5bd454ab06869c5781dfa6af
6
+ metadata.gz: e999d3ce725859885ca2127c54ba2e79f8ea27104ca07ceeebfd750cb23734055ca43c38ed5e8d591a8b7efcd24cde28bc8bf4db75a787e917ea6a31147922e1
7
+ data.tar.gz: 8c6973e93202a10fc265fa7cc6a01cabe3ee125f3e48e8b7fd4511de7bdc05c8239146b834051321a47c883fbd2b55a3b731bc4bfab25dbb50c6f05d5d12e42f
data/README.md CHANGED
@@ -79,36 +79,47 @@ 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)
98
+
96
99
  expect(response.status).to eq(422)
97
- expect(rendered_partials_count).to eq(2)
98
-
99
- # .._params means: check the params used to generate the partials.
100
- expect(rendered_partials_paths).to include('articles/form', 'layouts/flash')
101
- expect(rendered_ids).to include('form', 'flash-box')
102
- expect(rendered_partials_params_find_id('flash-box')['partial']).to eq('layouts/flash')
103
- expect(rendered_partials_params_where_id('flash-box').first['partial']).to eq('layouts/flash')
104
- expect(rendered_partials_params_where_id('flash-box').is_a?(Array)).to eq(true)
105
-
106
- # check html (returned as string) resulting from the rendered partials
107
- h = rendered_partials_html
108
- expect(h.join('')).to include('Article could not be created')
109
- h = rendered_partials_html_by_id
110
- expect(h['flash-box'].first).to include('Article could not be created')
111
- expect(h['flash-box'].length).to eq(1)
100
+ expect(partials_count).to eq(2)
101
+
102
+ expect(partials_paths).to include('articles/form', 'layouts/flash')
103
+ expect(partials_ids).to include('form', 'flash-box')
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
107
+ expect(partials_params_by_id['flash-box'].length).to eq(1)
108
+ expect(partials_params_by_id['flash-box'].first['partial']).to eq('layouts/flash')
109
+
110
+ # ..partials_html_* is the html returned from the partial as string
111
+ expect(partials_html_by_id['flash-box'].length).to eq(1)
112
+ expect(partials_html_by_id['flash-box'].first).to include('Article could not be created')
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
118
+ expect(partials_params_by_path['layouts/flash'].length).to eq(1)
119
+ expect(partials_params_by_path['layouts/flash'].first['partial']).to eq('layouts/flash')
120
+
121
+ expect(partials_html_by_path['layouts/flash'].length).to eq(1)
122
+ expect(partials_html_by_path['layouts/flash'].first).to include('Article could not be created')
112
123
  end
113
124
  end
114
125
  ```
@@ -1,19 +1,33 @@
1
1
  <% partials_count = 0 %>
2
2
  <% rendered_partials = [] %>
3
- <% htmls = [] %>
4
3
  <% htmls_by_id = {} %>
4
+ <% params_by_id = {} %>
5
+ <% htmls_by_path = {} %>
6
+ <% params_by_path = {} %>
7
+
5
8
  <% streams.each do |s| %>
9
+
6
10
  <% html = (render s[:partial], locals: s[:locals], formats: [:html ]) %>
7
- <% htmls.push(html) %>
8
11
  <% htmls_by_id[s[:id]] ||= [] %>
9
12
  <% htmls_by_id[s[:id]].push(html) %>
13
+ <% params_by_id[s[:id]] ||= [] %>
14
+ <% params_by_id[s[:id]].push(s) %>
15
+
16
+ <% htmls_by_path[s[:partial]] ||= [] %>
17
+ <% htmls_by_path[s[:partial]].push(html) %>
18
+ <% params_by_path[s[:partial]] ||= [] %>
19
+ <% params_by_path[s[:partial]].push(s) %>
20
+
10
21
  <% partials_count += 1 %>
11
22
  <% rendered_partials.push(s[:partial]) %>
23
+
12
24
  <% end %>
13
25
 
26
+ <%= content_tag :div, htmls_by_id.to_json, id: 'htmls_by_id' %>
27
+ <%= content_tag :div, params_by_id.to_json, id: 'params_by_id' %>
28
+
29
+ <%= content_tag :div, htmls_by_path.to_json, id: 'htmls_by_path' %>
30
+ <%= content_tag :div, params_by_path.to_json, id: 'params_by_path' %>
14
31
 
15
32
  <%= content_tag :div, check.to_json, id: 'check-json' %>
16
- <%= content_tag :div, htmls.to_json, id: 'htmls' %>
17
- <%= content_tag :div, htmls_by_id.to_json, id: 'htmls_by_id' %>
18
33
  <%= content_tag :div, rendered_partials.to_json, id: 'rendered-partials' %>
19
- <%= content_tag :div, streams.to_json, id: 'streams' %>
@@ -1,44 +1,57 @@
1
1
  module RenderTurboStream
2
2
  module TestHelpers
3
- def rendered_ids
4
- e = Nokogiri::HTML(response.body).search('#check-json').first
5
- JSON.parse(e.inner_html).keys
3
+
4
+ # returns hash of arrays with responded html(as string) contents by ID
5
+ def partials_html_by_id
6
+ e = Nokogiri::HTML(response.body).search('#htmls_by_id').first
7
+ JSON.parse(e.inner_html)
8
+ end
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
6
18
  end
7
19
 
8
- # returns array of strings of rendered partials inner-html
9
- def rendered_partials_html
10
- e = Nokogiri::HTML(response.body).search('#htmls').first
20
+ def partials_params_by_id
21
+ e = Nokogiri::HTML(response.body).search('#params_by_id').first
11
22
  JSON.parse(e.inner_html)
12
23
  end
13
24
 
14
- # returns hash of arrays with responded html(as string) contents by ID
15
- def rendered_partials_html_by_id
16
- e = Nokogiri::HTML(response.body).search('#htmls_by_id').first
25
+ # returns hash of arrays with responded html(as string) contents by partial-path
26
+ def partials_html_by_path
27
+ e = Nokogiri::HTML(response.body).search('#htmls_by_path').first
17
28
  JSON.parse(e.inner_html)
18
29
  end
19
30
 
20
- # array of strings of paths by them rendered partials are called, example: ['articles/form']
21
- def rendered_partials_paths
22
- e = Nokogiri::HTML(response.body).search('#rendered-partials').first
31
+ # returns hash of arrays with params by them rendered partials are called
32
+ def partials_params_by_path
33
+ e = Nokogiri::HTML(response.body).search('#params_by_path').first
23
34
  JSON.parse(e.inner_html)
24
35
  end
25
36
 
26
- # returns all partials that would be streamed to a given ID
27
- # note: if more than one partial by turbo_stream.replace are streamed to same ID, render_turbo_stream, in test mode already throws a error
28
- def rendered_partials_params_where_id(id)
29
- partials = Nokogiri::HTML(response.body).search('#streams').first
30
- h = JSON.parse(partials.inner_html)
31
- h.select{|e| e['id'] == id}
37
+ # count of rendered parials
38
+ def partials_count
39
+ partials_paths.length
32
40
  end
33
41
 
34
- # returns the first partial that would be streamed to a given ID
35
- def rendered_partials_params_find_id(id)
36
- rendered_partials_params_where_id(id).first
42
+ # array of strings of rendered partial ids
43
+ def partials_ids
44
+ e = Nokogiri::HTML(response.body).search('#check-json').first
45
+ JSON.parse(e.inner_html).keys
37
46
  end
38
47
 
39
- def rendered_partials_count
40
- rendered_partials_paths.length
48
+ # array of strings of paths by them rendered partials are called, example: ['articles/form']
49
+ def partials_paths
50
+ e = Nokogiri::HTML(response.body).search('#rendered-partials').first
51
+ JSON.parse(e.inner_html)
41
52
  end
53
+
54
+ # check response status and return redirected_to path
42
55
  def turbo_redirected_to
43
56
  expect(response.status).to eq(302)
44
57
  r = JSON.parse(response.body)
@@ -1,3 +1,3 @@
1
1
  module RenderTurboStream
2
- VERSION = "0.1.20"
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.20
4
+ version: 0.1.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - christian