rspec-twirp 0.2.0 → 0.3.1
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 +4 -4
- data/CHANGELOG.md +34 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +81 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/lib/rspec/twirp/error_matcher.rb +34 -12
- data/lib/rspec/twirp/message_matcher.rb +2 -61
- data/lib/rspec/twirp/response_matcher.rb +2 -20
- data/lib/rspec/twirp/version.rb +1 -1
- data/lib/rspec/twirp.rb +3 -48
- data/rspec-twirp.gemspec +23 -0
- data/service.rb +26 -0
- metadata +42 -21
- data/lib/rspec/twirp/helpers.rb +0 -16
- data/lib/rspec/twirp/make_request_matcher.rb +0 -169
- data/lib/rspec/twirp/mock_client.rb +0 -59
- data/lib/rspec/twirp/mock_connection.rb +0 -54
- data/spec/error_spec.rb +0 -116
- data/spec/make_request_spec.rb +0 -181
- data/spec/message_spec.rb +0 -83
- data/spec/mock_connection_spec.rb +0 -103
- data/spec/response_spec.rb +0 -124
@@ -1,103 +0,0 @@
|
|
1
|
-
describe :mock_twirp_connection do
|
2
|
-
subject { client.bye(request) }
|
3
|
-
|
4
|
-
let(:client) { GoodbyeClient.new(conn) }
|
5
|
-
let(:request) { GoodbyeRequest.new }
|
6
|
-
let(:response) { GoodbyeResponse.new(**response_attrs) }
|
7
|
-
let(:response_attrs) { { message: "bye" } }
|
8
|
-
|
9
|
-
context "without a mock" do
|
10
|
-
let(:conn) { "http://localhost:3000/twirp/Goodbye/Bye" }
|
11
|
-
|
12
|
-
it { expect { subject }.to raise_error(Faraday::Error) }
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "with a response instance" do
|
16
|
-
let(:conn) { mock_twirp_connection(response) }
|
17
|
-
|
18
|
-
it { is_expected.to be_a(Twirp::ClientResp) }
|
19
|
-
it { is_expected.to be_a_twirp_response }
|
20
|
-
it { is_expected.to be_a_twirp_response(response) }
|
21
|
-
it { is_expected.to be_a_twirp_response(message: "bye") }
|
22
|
-
|
23
|
-
it "catches mismatches" do
|
24
|
-
expect {
|
25
|
-
is_expected.to be_a_twirp_response(message: "nope")
|
26
|
-
}.to fail
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "with a response type" do
|
31
|
-
let(:conn) { mock_twirp_connection(GoodbyeResponse) }
|
32
|
-
|
33
|
-
it { is_expected.to be_a_twirp_response(GoodbyeResponse) }
|
34
|
-
|
35
|
-
it "catches mismatches" do
|
36
|
-
expect {
|
37
|
-
is_expected.to be_a_twirp_response(HelloResponse)
|
38
|
-
}.to fail
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "with default response" do
|
43
|
-
let(:conn) { mock_twirp_connection }
|
44
|
-
|
45
|
-
it { is_expected.to be_a_twirp_response(GoodbyeResponse) }
|
46
|
-
|
47
|
-
context "and with attrs" do
|
48
|
-
let(:conn) { mock_twirp_connection(message: "adios") }
|
49
|
-
|
50
|
-
it { is_expected.to be_a_twirp_response(message: "adios") }
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "with an error" do
|
55
|
-
let(:conn) { mock_twirp_connection(error) }
|
56
|
-
let(:error) { Twirp::Error.not_found("nope") }
|
57
|
-
|
58
|
-
it { is_expected.to be_a_twirp_response.with_error(error) }
|
59
|
-
|
60
|
-
context "when error is symbol" do
|
61
|
-
let(:error) { :not_found }
|
62
|
-
|
63
|
-
it { is_expected.to be_a_twirp_response.with_error(404) }
|
64
|
-
it { is_expected.to be_a_twirp_response.with_error(:not_found) }
|
65
|
-
end
|
66
|
-
|
67
|
-
context "when error is integer" do
|
68
|
-
let(:error) { 500 }
|
69
|
-
|
70
|
-
it { is_expected.to be_a_twirp_response.with_error(500) }
|
71
|
-
it { is_expected.to be_a_twirp_response.with_error(:internal) }
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe "with a block" do
|
76
|
-
context "with a response object" do
|
77
|
-
let(:conn) { mock_twirp_connection { response } }
|
78
|
-
|
79
|
-
it { is_expected.to be_a_twirp_response(response) }
|
80
|
-
end
|
81
|
-
|
82
|
-
context "with response attrs" do
|
83
|
-
let(:conn) { mock_twirp_connection { response_attrs } }
|
84
|
-
|
85
|
-
it "determines the correct response type and incorporates the attrs" do
|
86
|
-
is_expected.to be_a_twirp_response(GoodbyeResponse, **response_attrs)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context "with error" do
|
91
|
-
let(:conn) { mock_twirp_connection { error } }
|
92
|
-
let(:error) { Twirp::Error.not_found("nope") }
|
93
|
-
|
94
|
-
it { is_expected.to be_a_twirp_response.with_error(error) }
|
95
|
-
end
|
96
|
-
|
97
|
-
context "with error code" do
|
98
|
-
let(:conn) { mock_twirp_connection { :not_found } }
|
99
|
-
|
100
|
-
it { is_expected.to be_a_twirp_response.with_error(:not_found) }
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
data/spec/response_spec.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
describe "be_a_twirp_response" do
|
2
|
-
context "with a response" do
|
3
|
-
subject { Twirp::ClientResp.new(response, nil) }
|
4
|
-
|
5
|
-
let(:response) { GoodbyeResponse.new }
|
6
|
-
|
7
|
-
it { is_expected.to be_a_twirp_response }
|
8
|
-
|
9
|
-
it "catches non-twirp response" do
|
10
|
-
expect {
|
11
|
-
expect(Object).to be_a_twirp_response
|
12
|
-
}.to fail_with /found Object/
|
13
|
-
end
|
14
|
-
|
15
|
-
it "matches a specific response type" do
|
16
|
-
is_expected.to be_a_twirp_response(GoodbyeResponse)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "matches a specific response" do
|
20
|
-
is_expected.to be_a_twirp_response(response)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "catches type mismatches" do
|
24
|
-
expect {
|
25
|
-
is_expected.to be_a_twirp_response(HelloResponse)
|
26
|
-
}.to fail_with /of type HelloResponse/
|
27
|
-
end
|
28
|
-
|
29
|
-
it "catches erroneous response types" do
|
30
|
-
expect {
|
31
|
-
is_expected.to be_a_twirp_response(Object)
|
32
|
-
}.to raise_error(ArgumentError, /Object/)
|
33
|
-
end
|
34
|
-
|
35
|
-
context "with attributes" do
|
36
|
-
subject { Twirp::ClientResp.new(GoodbyeResponse.new(**attrs), nil) }
|
37
|
-
|
38
|
-
let(:attrs) { { message: "bye", name: "Bob" } }
|
39
|
-
|
40
|
-
it "can match attributes" do
|
41
|
-
is_expected.to be_a_twirp_response(GoodbyeResponse, **attrs)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "supports regex matches" do
|
45
|
-
is_expected.to be_a_twirp_response(name: /^B/)
|
46
|
-
end
|
47
|
-
|
48
|
-
it "catches mismatches" do
|
49
|
-
expect {
|
50
|
-
is_expected.to be_a_twirp_response(name: "nope")
|
51
|
-
}.to fail_with /to have name: "nope"/
|
52
|
-
|
53
|
-
expect {
|
54
|
-
is_expected.to be_a_twirp_response(name: /no/)
|
55
|
-
}.to fail_with /to have name: \/no\//
|
56
|
-
end
|
57
|
-
|
58
|
-
it "catches the erroneous attributes" do
|
59
|
-
expect {
|
60
|
-
is_expected.to be_a_twirp_response(namezzz: "Bob")
|
61
|
-
}.to raise_error(ArgumentError, /namezzz/)
|
62
|
-
end
|
63
|
-
|
64
|
-
it "catches type mismatches" do
|
65
|
-
expect {
|
66
|
-
is_expected.to be_a_twirp_response(name: 123)
|
67
|
-
}.to raise_error(TypeError, /string field.*given Integer/)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "can't also match a specific response" do
|
71
|
-
expect {
|
72
|
-
is_expected.to be_a_twirp_response(response, name: "Bob")
|
73
|
-
}.to raise_error(ArgumentError, /but not both/)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "with error" do
|
79
|
-
subject { Twirp::ClientResp.new(nil, error) }
|
80
|
-
|
81
|
-
let(:error) { Twirp::Error.new(code, msg, meta) }
|
82
|
-
let(:code) { :not_found }
|
83
|
-
let(:msg) { "Not Found" }
|
84
|
-
let(:meta) { { is_meta: "true" } }
|
85
|
-
|
86
|
-
it { is_expected.to be_a_twirp_response.with_error }
|
87
|
-
it { is_expected.to be_a_twirp_response.with_error(code) }
|
88
|
-
it { is_expected.to be_a_twirp_response.with_error(msg) }
|
89
|
-
it { is_expected.to be_a_twirp_response.with_error(**meta) }
|
90
|
-
it { is_expected.to be_a_twirp_response.with_error(/Not/) }
|
91
|
-
|
92
|
-
it "catches mismatches" do
|
93
|
-
expect {
|
94
|
-
is_expected.to be_a_twirp_response.with_error(:internal)
|
95
|
-
}.to fail_with /code: :internal/
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
context "with neither response nor error" do
|
100
|
-
subject { Twirp::ClientResp.new(nil, nil) }
|
101
|
-
|
102
|
-
it "fails the response match" do
|
103
|
-
expect {
|
104
|
-
is_expected.to be_a_twirp_response
|
105
|
-
}.to fail_with /to have data/
|
106
|
-
end
|
107
|
-
|
108
|
-
it "fails the error match" do
|
109
|
-
expect {
|
110
|
-
is_expected.to be_a_twirp_response.with_error
|
111
|
-
}.to fail_with /to have an error/
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context "with both response and error" do
|
116
|
-
subject { Twirp::ClientResp.new(GoodbyeResponse.new, Twirp::Error.not_found("Not Found")) }
|
117
|
-
|
118
|
-
it "fails" do
|
119
|
-
expect {
|
120
|
-
is_expected.to be_a_twirp_response(name: "Bob").with_error
|
121
|
-
}.to raise_error(ArgumentError, /but not both/)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|