Skip to content

Commit cf19cfc

Browse files
committed
Move tests about #send_metrics in payload specs
Up until now I've made the mistake of testing the "writes to file if file://" and "sends to server if http[s]://" cases in the tests for `ios_send_app_size_metrics_spec.rb`, and thus having to cover both cases (file and server as destination) and also testing both cases of compressed and uncompressed… all for each of the test cases the iOS action. But the logic of writing to file or sending to server is ported by the `AppSizeMetricsPayload` model object, not by the fastlane action. So those tests about writing the payload to disk properly compressed or uncompressed, or sending the payload to server with proper headers and body for both cases… should really be tested at the level of `app_size_metrics_payload_spec.rb` instead That allowed me to simplify the tests for `ios_send_app_size_metrics_spec` greatly — as they now only have to test one of each case of the action's input parameters, rather than multiplying that by 4 (file vs server, gzip vs not). As a bonus, it makes those tests simpler to write as we can always use the "write to file://" mode for testing those fastlane actions instead of having to mock network requests. And it will also make it way simpler to write the `android_send_app_size_metrics_spec.rb` file as well.
1 parent e2ca116 commit cf19cfc

File tree

2 files changed

+160
-232
lines changed

2 files changed

+160
-232
lines changed

spec/app_size_metrics_payload_spec.rb

Lines changed: 88 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,97 @@
11
require_relative './spec_helper'
22

33
describe Fastlane::WPMRT::AppSizeMetricsPayload do
4-
it 'generates the right payload from raw data' do
5-
payload = described_class.new({
6-
'Group Metadata 1': 'Group Value 1',
7-
'Group Metadata 2': 'Group Value 2'
8-
})
9-
payload.add_metric(name: 'Metric 1', value: 12_345, meta: { m1a: 'Metric 1 Metadata A' })
10-
payload.add_metric(name: 'Metric 2', value: 67_890)
11-
payload.add_metric(name: 'Metric 3', value: 13_579, meta: { m3a: 'Metric 3 Metadata A', m3b: 'Metric 3 Metadata B' })
4+
describe '#to_h' do
5+
it 'generates the right payload from raw data' do
6+
payload = described_class.new({
7+
'Group Metadata 1': 'Group Value 1',
8+
'Group Metadata 2': 'Group Value 2'
9+
})
10+
payload.add_metric(name: 'Metric 1', value: 12_345, meta: { m1a: 'Metric 1 Metadata A' })
11+
payload.add_metric(name: 'Metric 2', value: 67_890)
12+
payload.add_metric(name: 'Metric 3', value: 13_579, meta: { m3a: 'Metric 3 Metadata A', m3b: 'Metric 3 Metadata B' })
1213

13-
expected_hash = {
14-
meta: [
15-
{ name: 'Group Metadata 1', value: 'Group Value 1' },
16-
{ name: 'Group Metadata 2', value: 'Group Value 2' },
17-
],
18-
metrics: [
19-
{
20-
name: 'Metric 1',
21-
value: 12_345,
22-
meta: [
23-
{ name: 'm1a', value: 'Metric 1 Metadata A' },
24-
]
25-
},
26-
{
27-
name: 'Metric 2',
28-
value: 67_890
29-
},
30-
{
31-
name: 'Metric 3',
32-
value: 13_579,
33-
meta: [
34-
{ name: 'm3a', value: 'Metric 3 Metadata A' },
35-
{ name: 'm3b', value: 'Metric 3 Metadata B' },
36-
]
37-
},
38-
]
39-
}
40-
expect(payload.to_h).to eq(expected_hash)
14+
expected_hash = {
15+
meta: [
16+
{ name: 'Group Metadata 1', value: 'Group Value 1' },
17+
{ name: 'Group Metadata 2', value: 'Group Value 2' },
18+
],
19+
metrics: [
20+
{
21+
name: 'Metric 1',
22+
value: 12_345,
23+
meta: [
24+
{ name: 'm1a', value: 'Metric 1 Metadata A' },
25+
]
26+
},
27+
{
28+
name: 'Metric 2',
29+
value: 67_890
30+
},
31+
{
32+
name: 'Metric 3',
33+
value: 13_579,
34+
meta: [
35+
{ name: 'm3a', value: 'Metric 3 Metadata A' },
36+
{ name: 'm3b', value: 'Metric 3 Metadata B' },
37+
]
38+
},
39+
]
40+
}
41+
expect(payload.to_h).to eq(expected_hash)
42+
end
43+
44+
it 'removes `nil` values in metadata' do
45+
payload = described_class.new({
46+
'Group Metadata 1': 'Group Value 1',
47+
'Group Metadata 2': nil,
48+
'Group Metadata 3': 'Group Value 3'
49+
})
50+
payload.add_metric(name: 'Metric 1', value: 12_345, meta: { m1a: 'Metric 1 Metadata A', m1b: nil, m1c: 'Metric 1 Metadata C' })
51+
payload.add_metric(name: 'Metric 2', value: 67_890, meta: { m2a: nil })
52+
payload.add_metric(name: 'Metric 3', value: 13_579, meta: { m3a: 'Metric 3 Metadata A', m3b: 'Metric 3 Metadata B' })
53+
54+
expected_hash = {
55+
meta: [
56+
{ name: 'Group Metadata 1', value: 'Group Value 1' },
57+
{ name: 'Group Metadata 3', value: 'Group Value 3' },
58+
],
59+
metrics: [
60+
{
61+
name: 'Metric 1',
62+
value: 12_345,
63+
meta: [
64+
{ name: 'm1a', value: 'Metric 1 Metadata A' },
65+
{ name: 'm1c', value: 'Metric 1 Metadata C' },
66+
]
67+
},
68+
{
69+
name: 'Metric 2',
70+
value: 67_890
71+
},
72+
{
73+
name: 'Metric 3',
74+
value: 13_579,
75+
meta: [
76+
{ name: 'm3a', value: 'Metric 3 Metadata A' },
77+
{ name: 'm3b', value: 'Metric 3 Metadata B' },
78+
]
79+
},
80+
]
81+
}
82+
expect(payload.to_h).to eq(expected_hash)
83+
end
4184
end
4285

43-
it 'removes `nil` values in metadata' do
44-
payload = described_class.new({
45-
'Group Metadata 1': 'Group Value 1',
46-
'Group Metadata 2': nil,
47-
'Group Metadata 3': 'Group Value 3'
48-
})
49-
payload.add_metric(name: 'Metric 1', value: 12_345, meta: { m1a: 'Metric 1 Metadata A', m1c: nil, m1c: 'Metric 1 Metadata C' })
50-
payload.add_metric(name: 'Metric 2', value: 67_890, meta: { m2a: nil })
51-
payload.add_metric(name: 'Metric 3', value: 13_579, meta: { m3a: 'Metric 3 Metadata A', m3b: 'Metric 3 Metadata B' })
86+
describe '#send_metrics' do
87+
context 'when using file:// scheme for the URL' do
88+
xit 'writes the payload uncompressed to a file when disabling gzip'
89+
xit 'writes the payload compressed to a file when enabling gzip'
90+
end
5291

53-
expected_hash = {
54-
meta: [
55-
{ name: 'Group Metadata 1', value: 'Group Value 1' },
56-
{ name: 'Group Metadata 3', value: 'Group Value 3' },
57-
],
58-
metrics: [
59-
{
60-
name: 'Metric 1',
61-
value: 12_345,
62-
meta: [
63-
{ name: 'm1a', value: 'Metric 1 Metadata A' },
64-
{ name: 'm1c', value: 'Metric 1 Metadata C' },
65-
]
66-
},
67-
{
68-
name: 'Metric 2',
69-
value: 67_890
70-
},
71-
{
72-
name: 'Metric 3',
73-
value: 13_579,
74-
meta: [
75-
{ name: 'm3a', value: 'Metric 3 Metadata A' },
76-
{ name: 'm3b', value: 'Metric 3 Metadata B' },
77-
]
78-
},
79-
]
80-
}
81-
expect(payload.to_h).to eq(expected_hash)
92+
context 'when using non-file:// scheme for the URL' do
93+
xit 'sends the payload uncompressed to the server and with the right headers when disabling gzip'
94+
xit 'writes the payload compressed to the server and with the right headers when enabling gzip'
95+
end
8296
end
8397
end

0 commit comments

Comments
 (0)