cypress_rails 0.5.0 → 0.6.0
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
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70d8ba1c2c997e512573b35b6823f9b14f930262
|
4
|
+
data.tar.gz: b75040d5e579711328d36e3691fc92aa9361505a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6481e794afc07e83d8786feccf7883b4cf9c8f35a8a156aae299dbe31d01fe2d42d1b332f3ca4da9e1f43b2faf67a5f031a403cd0d625c0a40b655d57ee0d280
|
7
|
+
data.tar.gz: 2018f01916a2632972d136936679b39b7c8d15b90b49399d464d5a9af7ca2c73a2192443d352212cee4f5640cf4df3c1c34665b4f58a32341e9faecf13f12a06
|
data/lib/cypress_rails/cli.rb
CHANGED
@@ -5,7 +5,9 @@ require "cypress_rails/runner"
|
|
5
5
|
require "cypress_rails/server"
|
6
6
|
|
7
7
|
module CypressRails
|
8
|
-
Config = Struct.new(
|
8
|
+
Config = Struct.new(
|
9
|
+
:command, :cypress_bin_path, :host, :log_path, :tests_path, :healthcheck_url
|
10
|
+
)
|
9
11
|
|
10
12
|
class CLI < Thor
|
11
13
|
class_option :command,
|
@@ -33,6 +35,12 @@ module CypressRails
|
|
33
35
|
desc: "path to Cypress tests",
|
34
36
|
default: "./spec",
|
35
37
|
aliases: %w(-t)
|
38
|
+
class_option :healthcheck_url,
|
39
|
+
type: :string,
|
40
|
+
desc: <<~DESC,
|
41
|
+
url to ping the server before running tests (you don't need the port, it will be injected)
|
42
|
+
DESC
|
43
|
+
aliases: %w(-u)
|
36
44
|
|
37
45
|
desc "test", "Run all tests in headless mode"
|
38
46
|
def test
|
@@ -55,12 +63,14 @@ module CypressRails
|
|
55
63
|
private
|
56
64
|
|
57
65
|
def server
|
58
|
-
@server ||= Server.new(config.host, config.command, config.log_path)
|
66
|
+
@server ||= Server.new(config.host, config.command, config.healthcheck_url, config.log_path)
|
59
67
|
end
|
60
68
|
|
61
69
|
def config
|
62
70
|
@config ||= Config.new(
|
63
|
-
*options.values_at(
|
71
|
+
*options.values_at(
|
72
|
+
:command, :cypress_bin_path, :host, :log_path, :tests_path, :healthcheck_url
|
73
|
+
)
|
64
74
|
)
|
65
75
|
end
|
66
76
|
end
|
data/lib/cypress_rails/server.rb
CHANGED
@@ -1,24 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "socket"
|
4
|
+
require "uri"
|
4
5
|
|
5
6
|
module CypressRails
|
6
7
|
class Server
|
7
8
|
extend Forwardable
|
8
9
|
|
9
|
-
attr_reader :host, :port, :command, :log_path
|
10
|
+
attr_reader :host, :port, :command, :healthcheck_url, :log_path
|
10
11
|
|
11
|
-
def initialize(host, command, log_path)
|
12
|
+
def initialize(host, command, healthcheck_url, log_path)
|
12
13
|
@host = host
|
13
14
|
@port = find_free_port
|
14
15
|
@command = command
|
16
|
+
@healthcheck_url = URI(healthcheck_url || "http://#{host}").tap { |uri| uri.port = port }
|
15
17
|
@log_path = log_path
|
16
18
|
end
|
17
19
|
|
18
20
|
def start
|
19
21
|
spawn_server
|
20
22
|
until server_responsive?
|
21
|
-
|
23
|
+
puts "Pinging #{healthcheck_url.to_s}..."
|
24
|
+
sleep 1
|
22
25
|
end
|
23
26
|
yield(host, port) if block_given?
|
24
27
|
ensure
|
@@ -43,7 +46,7 @@ module CypressRails
|
|
43
46
|
end
|
44
47
|
|
45
48
|
def server_responsive?
|
46
|
-
system("curl #{
|
49
|
+
system("curl #{healthcheck_url}", [:out, :err] => "/dev/null")
|
47
50
|
end
|
48
51
|
|
49
52
|
def stop_server
|
@@ -18,7 +18,7 @@ RSpec.describe CypressRails::Runner do
|
|
18
18
|
let(:server) { "rackup #{project_path}/config.ru" }
|
19
19
|
|
20
20
|
it "runs cypress correctly" do
|
21
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
21
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
22
22
|
CypressRails::Runner.new(
|
23
23
|
host: host,
|
24
24
|
port: port,
|
@@ -36,7 +36,7 @@ RSpec.describe CypressRails::Runner do
|
|
36
36
|
|
37
37
|
it "returns status code 0" do
|
38
38
|
status = nil
|
39
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
39
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
40
40
|
status = CypressRails::Runner.new(
|
41
41
|
host: host,
|
42
42
|
port: port,
|
@@ -56,7 +56,7 @@ RSpec.describe CypressRails::Runner do
|
|
56
56
|
let(:server) { "rackup #{project_path}/config.ru" }
|
57
57
|
|
58
58
|
it "runs cypress correctly" do
|
59
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
59
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
60
60
|
CypressRails::Runner.new(
|
61
61
|
host: host,
|
62
62
|
port: port,
|
@@ -74,7 +74,7 @@ RSpec.describe CypressRails::Runner do
|
|
74
74
|
|
75
75
|
it "returns non-zero status code" do
|
76
76
|
status = nil
|
77
|
-
CypressRails::Server.new(host, server, log_path).start do |host, port|
|
77
|
+
CypressRails::Server.new(host, server, nil, log_path).start do |host, port|
|
78
78
|
status = CypressRails::Runner.new(
|
79
79
|
host: host,
|
80
80
|
port: port,
|
@@ -8,16 +8,15 @@ RSpec.describe CypressRails::Server do
|
|
8
8
|
let(:host) { "localhost" }
|
9
9
|
let(:command) { "rackup spec/support/dummy_passing/config.ru" }
|
10
10
|
let(:log_path) { "/dev/null" }
|
11
|
+
let(:server) { described_class.new(host, command, nil, log_path) }
|
11
12
|
|
12
13
|
describe "#port" do
|
13
|
-
subject(:port) {
|
14
|
+
subject(:port) { server.port }
|
14
15
|
|
15
16
|
it { is_expected.to be_open_port }
|
16
17
|
end
|
17
18
|
|
18
19
|
describe "#start" do
|
19
|
-
subject(:server) { described_class.new(host, command, log_path) }
|
20
|
-
|
21
20
|
it "starts the server and blocks until it is ready" do
|
22
21
|
response = nil
|
23
22
|
server.start {
|
@@ -26,6 +25,19 @@ RSpec.describe CypressRails::Server do
|
|
26
25
|
expect(response.status).to include "200"
|
27
26
|
end
|
28
27
|
|
28
|
+
context "when a healthcheck url is passed" do
|
29
|
+
let(:command) { "rackup spec/support/dummy_healthcheck/config.ru" }
|
30
|
+
let(:server) { described_class.new(host, command, "http://localhost/foobar", log_path) }
|
31
|
+
|
32
|
+
it "pings the provided url" do
|
33
|
+
response = nil
|
34
|
+
server.start {
|
35
|
+
response = open("http://localhost:#{server.port}/foobar")
|
36
|
+
}
|
37
|
+
expect(response.status).to include "200"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
29
41
|
it "yields the port number and host into the block" do
|
30
42
|
expect { |b| server.start(&b) }.to yield_with_args("localhost", server.port)
|
31
43
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
run ->(env) {
|
4
|
+
sleep 0.2
|
5
|
+
request = Rack::Request.new(env)
|
6
|
+
if request.path == "/foobar"
|
7
|
+
[
|
8
|
+
200,
|
9
|
+
{ "Content-Type" => "text/html" },
|
10
|
+
[
|
11
|
+
<<~HTML
|
12
|
+
<html>
|
13
|
+
<head><title>Dummy app</title></head>
|
14
|
+
<body>
|
15
|
+
<h1>Hello Dummy!</h1>
|
16
|
+
</body>
|
17
|
+
</html>
|
18
|
+
HTML
|
19
|
+
]
|
20
|
+
]
|
21
|
+
else
|
22
|
+
[
|
23
|
+
404,
|
24
|
+
{ "Content-Type" => "text/html" },
|
25
|
+
[""]
|
26
|
+
]
|
27
|
+
end
|
28
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cypress_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Szymon Szeliga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- spec/support/dummy_failing/cypress/support/index.js
|
219
219
|
- spec/support/dummy_failing/package.json
|
220
220
|
- spec/support/dummy_failing/yarn.lock
|
221
|
+
- spec/support/dummy_healthcheck/config.ru
|
221
222
|
- spec/support/dummy_passing/config.ru
|
222
223
|
- spec/support/dummy_passing/cypress.json
|
223
224
|
- spec/support/dummy_passing/cypress/integration/basic_spec.js
|
@@ -264,6 +265,7 @@ test_files:
|
|
264
265
|
- spec/support/dummy_failing/cypress/support/index.js
|
265
266
|
- spec/support/dummy_failing/package.json
|
266
267
|
- spec/support/dummy_failing/yarn.lock
|
268
|
+
- spec/support/dummy_healthcheck/config.ru
|
267
269
|
- spec/support/dummy_passing/config.ru
|
268
270
|
- spec/support/dummy_passing/cypress.json
|
269
271
|
- spec/support/dummy_passing/cypress/integration/basic_spec.js
|