render_turbo_stream 0.1.20 → 0.1.22

Sign up to get free protection for your applications and to get access to all the features.
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