cypress-on-rails 1.10.1 → 1.11.0

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: 19c6280b01cef6fe5088f9a3d1098acf69a116f6118e219992f961f7af7f1a6d
4
- data.tar.gz: 8408f84cf6d400a87136243c34c49ed228ccde27f14e824aa88d053bf435ad78
3
+ metadata.gz: 3b8019daab6920154502f30e3a0bc5acb508d3e54cb7befe5274442b70724e02
4
+ data.tar.gz: 626901503a647087b14785b8d0df09c1033a01be4cf4f8456beeed376880f5a8
5
5
  SHA512:
6
- metadata.gz: d72faf8adc3ed46442e0bcd91b5420d3dda942192ba014f4ce435284448e06a44de95f72c5d5a007357902eab0d64a7f4965da839c966243997a56ebcecab3e9
7
- data.tar.gz: 25e8fad0237b6e3f0a891a4d202273257210e42a0056db6026a70a3cbc0c6851a3763e7c2e70016ab76ec3efc7586d786741e271cd0855d52741e6387d6064ed
6
+ metadata.gz: 7379070d5df5642e4d9c45dcd3b935784278b409dde546dd9d8e334d54c473f5b3daf1b0061edc9dcabf2b15d3e1b0a6cf4fb9e75ce7d3bf2bf527f0af29dd85
7
+ data.tar.gz: 65dde5afa09ef3a862a19928cd76ead9c5f2755c4c15d22c3b978882ae58393ffbbe8799c4e1e6641301fcd20bb82342220029679443249bf8f1671b91c25c83
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
- ## [1.10.0]
2
- [Compare]: https://github.com/shakacode/cypress-on-rails/compare/v1.9.1...v1.10.0
1
+ ## [1.11.0]
2
+ [Compare]: https://github.com/shakacode/cypress-on-rails/compare/v1.10.1...v1.11.0
3
+
4
+ ### Changed
5
+ * improve app command logging on cypress
6
+ * Allow build and build_list commands to be executed against factory bot [PR 87](https://github.com/shakacode/cypress-on-rails/pull/87) by [Alexander-Blair]
7
+
8
+ ## [1.10.1]
9
+ [Compare]: https://github.com/shakacode/cypress-on-rails/compare/v1.9.1...v1.10.1
3
10
 
4
11
  ### Changed
5
12
  * improve error message received from failed command
data/README.md CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  ----
6
6
 
7
- This project is sponsored by the software consulting firm [ShakaCode](https://www.shakacode.com), creator of the [React on Rails Gem](https://github.com/shakacode/react_on_rails). We focus on React front-ends, often with Ruby on Rails or Gatsby. The best way to see what we do is to see the details of [our recent work](https://www.shakacode.com/recent-work). Feel free to engage in discussions around this gem at our [forum category for Cypress](https://forum.shakacode.com/c/cypress-on-rails/55).
7
+ This project is sponsored by the software consulting firm [ShakaCode](https://www.shakacode.com), creator of the [React on Rails Gem](https://github.com/shakacode/react_on_rails). We focus on React (with TS or ReScript) front-ends, often with Ruby on Rails or Gatsby. See [our recent work](https://www.shakacode.com/recent-work) and [client engagement model](https://www.shakacode.com/blog/client-engagement-model/). Feel free to engage in discussions around this gem at our [Slack Channel](https://join.slack.com/t/reactrails/shared_invite/enQtNjY3NTczMjczNzYxLTlmYjdiZmY3MTVlMzU2YWE0OWM0MzNiZDI0MzdkZGFiZTFkYTFkOGVjODBmOWEyYWQ3MzA2NGE1YWJjNmVlMGE) or our [forum category for Cypress](https://forum.shakacode.com/c/cypress-on-rails/55).
8
+
9
+ Interested in joining a small team that loves open source? Check our [careers page](https://www.shakacode.com/career/).
8
10
 
9
11
  ----
10
12
 
@@ -164,6 +166,42 @@ describe('My First Test', function() {
164
166
  })
165
167
  ```
166
168
 
169
+ In some cases, using static Cypress fixtures may not provide sufficient flexibility when mocking HTTP response bodies - it's possible to use `FactoryBot.build` to generate Ruby hashes that can then be used as mock JSON responses:
170
+ ```ruby
171
+ FactoryBot.define do
172
+ factory :some_web_response, class: Hash do
173
+ initialize_with { attributes.deep_stringify_keys }
174
+
175
+ id { 123 }
176
+ name { 'Mr Blobby' }
177
+ occupation { 'Evil pink clown' }
178
+ end
179
+ end
180
+
181
+ FactoryBot.build(:some_web_response) => { 'id' => 123, 'name' => 'Mr Blobby', 'occupation' => 'Evil pink clown' }
182
+ ```
183
+
184
+ This can then be combined with Cypress mocks:
185
+ ```js
186
+ describe('My First Test', function() {
187
+ it('visit root', function() {
188
+ // This calls to the backend to generate the mocked response
189
+ cy.appFactories([
190
+ ['build', 'some_web_response', { name: 'Baby Blobby' }]
191
+ ]).then(([responseBody]) => {
192
+ cy.intercept('http://some-external-url.com/endpoint', {
193
+ body: responseBody
194
+ });
195
+
196
+ // Visit the application under test
197
+ cy.visit('/')
198
+ })
199
+
200
+ cy.contains("Hello World")
201
+ })
202
+ })
203
+ ```
204
+
167
205
  ### Example of loading rails test fixtures
168
206
  ```ruby
169
207
  # spec/cypress/app_commands/activerecord_fixtures.rb
@@ -19,6 +19,14 @@ module CypressOnRails
19
19
  instance.create_list(*args)
20
20
  end
21
21
 
22
+ def self.build(*args)
23
+ instance.build(*args)
24
+ end
25
+
26
+ def self.build_list(*args)
27
+ instance.build_list(*args)
28
+ end
29
+
22
30
  # @return [Array]
23
31
  attr_accessor :factory
24
32
  attr_accessor :always_reload
@@ -51,6 +59,22 @@ module CypressOnRails
51
59
  factory.create_list(*args)
52
60
  end
53
61
 
62
+ def build(*options)
63
+ load_files
64
+ factory_name = options.shift
65
+ if options.last.is_a?(Hash)
66
+ args = options.pop
67
+ else
68
+ args = {}
69
+ end
70
+ factory.build(factory_name, *options.map(&:to_sym), args.symbolize_keys)
71
+ end
72
+
73
+ def build_list(*args)
74
+ load_files
75
+ factory.build_list(*args)
76
+ end
77
+
54
78
  private
55
79
 
56
80
  # @param [String,Array] arg
@@ -84,4 +108,4 @@ module CypressOnRails
84
108
  @always_reload || @latest_mtime.nil? || @latest_mtime < current_latest_mtime
85
109
  end
86
110
  end
87
- end
111
+ end
@@ -1,3 +1,3 @@
1
1
  module CypressOnRails
2
- VERSION = '1.10.1'.freeze
2
+ VERSION = '1.11.0'.freeze
3
3
  end
@@ -1,16 +1,18 @@
1
1
  // CypressOnRails: dont remove these command
2
2
  Cypress.Commands.add('appCommands', function (body) {
3
- cy.log("APP: " + JSON.stringify(body))
3
+ Object.keys(body).forEach(key => body[key] === undefined ? delete body[key] : {});
4
+ const log = Cypress.log({ name: "APP", message: body, autoEnd: false })
4
5
  return cy.request({
5
6
  method: 'POST',
6
7
  url: "/__cypress__/command",
7
8
  body: JSON.stringify(body),
8
- log: true,
9
+ log: false,
9
10
  failOnStatusCode: false
10
11
  }).then((response) => {
11
- if (response.status != 201) {
12
+ log.end();
13
+ if (response.status !== 201) {
12
14
  expect(response.body.message).to.be.empty
13
- expect(response.body.status).to.be.equal(201)
15
+ expect(response.status).to.be.equal(201)
14
16
  }
15
17
  return response.body
16
18
  });
@@ -12,7 +12,7 @@ RSpec.describe CypressOnRails::SmartFactoryWrapper do
12
12
  let(:mtime_hash) { {'file1.rb' => time_now, 'file2.rb' => time_now } }
13
13
  let(:files) { %w(file1.rb file2.rb) }
14
14
  let(:factory_double) do
15
- class_double(FactoryBot, create: nil, create_list: nil, "definition_file_paths=": nil, reload: nil)
15
+ class_double(FactoryBot, create: nil, create_list: nil, build: nil, build_list: nil, "definition_file_paths=": nil, reload: nil)
16
16
  end
17
17
  let(:kernel_double) { class_double(Kernel, load: true) }
18
18
  let(:file_double) { FileSystemDummy.new(mtime_hash) }
@@ -67,6 +67,31 @@ RSpec.describe CypressOnRails::SmartFactoryWrapper do
67
67
  expect(factory_double).to have_received(:create_list).with(:note, 10)
68
68
  end
69
69
 
70
+ it 'delegates build to the factory' do
71
+ subject.build(:user)
72
+ expect(factory_double).to have_received(:build).with(:user, {})
73
+ end
74
+
75
+ it 'delegates build to the factory and symbolize keys' do
76
+ subject.build(:user, {'name' => "name"})
77
+ expect(factory_double).to have_received(:build).with(:user, {name: 'name'})
78
+ end
79
+
80
+ it 'delegates build to the factory and symbolize keys with trait' do
81
+ subject.build(:user, 'trait1', {'name' => "name"})
82
+ expect(factory_double).to have_received(:build).with(:user, :trait1, {name: 'name'})
83
+ end
84
+
85
+ it 'delegates build to the factory and symbolize keys with only trait' do
86
+ subject.build(:user, 'trait2')
87
+ expect(factory_double).to have_received(:build).with(:user, :trait2, {})
88
+ end
89
+
90
+ it 'delegates build_list to the factory' do
91
+ subject.build_list(:note, 10)
92
+ expect(factory_double).to have_received(:build_list).with(:note, 10)
93
+ end
94
+
70
95
  it 'wont load the files if they have not changed' do
71
96
  subject.create(:user)
72
97
  subject.create_list(:user, 2)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cypress-on-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.1
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - miceportal team
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-04-08 00:00:00.000000000 Z
12
+ date: 2021-08-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -323,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
323
323
  - !ruby/object:Gem::Version
324
324
  version: '0'
325
325
  requirements: []
326
- rubygems_version: 3.2.11
326
+ rubygems_version: 3.2.25
327
327
  signing_key:
328
328
  specification_version: 4
329
329
  summary: Integrates cypress with rails or rack applications