@@ -22,8 +22,8 @@ def test_app_size_action(fake_ipa_size:, expected_json:, **other_action_args)
22
22
expected_headers = {
23
23
Authorization : "Bearer #{ mocked_token } " ,
24
24
'Content-Type' : 'application/json' ,
25
- 'Content-Encoding' : 'gzip'
26
- }
25
+ 'Content-Encoding' : ( 'gzip' unless other_action_args [ :use_gzip_content_encoding ] === false )
26
+ } . compact
27
27
last_received_body = nil
28
28
stub = stub_request ( :post , mocked_endpoint ) . with ( headers : expected_headers ) do |req |
29
29
last_received_body = req . body
@@ -41,82 +41,147 @@ def test_app_size_action(fake_ipa_size:, expected_json:, **other_action_args)
41
41
expect ( stub ) . to have_been_made . once
42
42
expect ( code ) . to eq ( 200 )
43
43
last_received_body_uncompressed = nil
44
- expect do
45
- last_received_body_uncompressed = Zlib . gunzip ( last_received_body )
46
- end . not_to raise_error , 'Payload was not valid GZipped data'
44
+ puts other_action_args . inspect
45
+ if other_action_args [ :use_gzip_content_encoding ] === false
46
+ last_received_body_uncompressed = last_received_body
47
+ else
48
+ expect do
49
+ last_received_body_uncompressed = Zlib . gunzip ( last_received_body )
50
+ end . not_to raise_error , 'Payload was not valid GZipped data'
51
+ end
47
52
# Compare the payloads as pretty-formatted JSON, to make the diff in test failures more readable if one happen
48
53
expect ( pretty_json ( last_received_body_uncompressed ) ) . to eq ( pretty_json ( expected_json ) ) , 'Decompressed JSON payload was not as expected'
49
54
# Compare the payloads as raw uncompressed data as a final check
50
55
expect ( last_received_body_uncompressed ) . to eq ( expected_json )
51
56
end
52
57
end
53
58
54
- it 'sends the right payload from just an ipa file' do
55
- expected_json = {
56
- meta : [
57
- { name : 'Platform' , value : 'iOS' } ,
58
- { name : 'App Name' , value : 'my-app' } ,
59
- { name : 'App Version' , value : '1.2.3' } ,
60
- { name : 'Build Type' , value : 'beta' } ,
61
- { name : 'Source' , value : 'unit-test' } ,
62
- ] ,
63
- metrics : [
64
- { name : 'File Size' , value : 123_456 } ,
65
- ]
66
- } . to_json
67
-
68
- test_app_size_action (
69
- fake_ipa_size : 123_456 ,
70
- expected_json : expected_json ,
71
- app_name : 'my-app' ,
72
- build_type : 'beta' ,
73
- app_version : '1.2.3' ,
74
- source : 'unit-test'
75
- )
76
- end
59
+ context 'when using using a non-file:// url' do
60
+ it 'sends the right payload from just an ipa file' do
61
+ expected_json = {
62
+ meta : [
63
+ { name : 'Platform' , value : 'iOS' } ,
64
+ { name : 'App Name' , value : 'my-app' } ,
65
+ { name : 'App Version' , value : '1.2.3' } ,
66
+ { name : 'Build Type' , value : 'beta' } ,
67
+ { name : 'Source' , value : 'unit-test' } ,
68
+ ] ,
69
+ metrics : [
70
+ { name : 'File Size' , value : 123_456 } ,
71
+ ]
72
+ } . to_json
77
73
78
- it 'sends the right payload from an ipa file and an app-thinning.plist' do
79
- app_thinning_plist_path = File . join ( test_data_dir , 'app-thinning.plist' )
80
- expected_fixture = File . join ( test_data_dir , 'ios-metrics-payload.json' )
81
- # Parse as Hash then reconvert to JSON, in order to get the 'minified' JSON version
82
- expected_json = JSON . parse ( File . read ( expected_fixture ) ) . to_json
83
-
84
- test_app_size_action (
85
- fake_ipa_size : fake_ipa_size ,
86
- expected_json : expected_json ,
87
- app_thinning_plist_path : app_thinning_plist_path ,
88
- app_name : 'wordpress' ,
89
- build_type : 'internal' ,
90
- app_version : '19.8.0.2'
91
- )
92
- end
74
+ test_app_size_action (
75
+ fake_ipa_size : 123_456 ,
76
+ expected_json : expected_json ,
77
+ app_name : 'my-app' ,
78
+ build_type : 'beta' ,
79
+ app_version : '1.2.3' ,
80
+ source : 'unit-test'
81
+ )
82
+ end
93
83
94
- it 'writes the payload to a file if provided a file:// base URL' do
95
- in_tmp_dir do |tmp_dir |
96
- # Arrange: Generate a fake `.ipa` file with the expected size
97
- ipa_path = File . join ( tmp_dir , 'fake.ipa' )
98
- File . write ( ipa_path , SecureRandom . random_bytes ( fake_ipa_size ) )
99
- output_path = File . join ( tmp_dir , 'payload.json' )
84
+ it 'sends the uncompressed payload from just an ipa file if disabling gzip' do
85
+ expected_json = {
86
+ meta : [
87
+ { name : 'Platform' , value : 'iOS' } ,
88
+ { name : 'App Name' , value : 'my-app' } ,
89
+ { name : 'App Version' , value : '1.2.3' } ,
90
+ { name : 'Build Type' , value : 'beta' } ,
91
+ { name : 'Source' , value : 'unit-test' } ,
92
+ ] ,
93
+ metrics : [
94
+ { name : 'File Size' , value : 123_456 } ,
95
+ ]
96
+ } . to_json
97
+
98
+ test_app_size_action (
99
+ fake_ipa_size : 123_456 ,
100
+ expected_json : expected_json ,
101
+ app_name : 'my-app' ,
102
+ build_type : 'beta' ,
103
+ app_version : '1.2.3' ,
104
+ source : 'unit-test' ,
105
+ use_gzip_content_encoding : false
106
+ )
107
+ end
100
108
109
+ it 'sends the right payload from an ipa file and an app-thinning.plist' do
101
110
app_thinning_plist_path = File . join ( test_data_dir , 'app-thinning.plist' )
102
111
expected_fixture = File . join ( test_data_dir , 'ios-metrics-payload.json' )
103
112
# Parse as Hash then reconvert to JSON, in order to get the 'minified' JSON version
104
113
expected_json = JSON . parse ( File . read ( expected_fixture ) ) . to_json
105
114
106
- # Act
107
- code = run_described_fastlane_action (
108
- api_base_url : File . join ( 'file://localhost/' , output_path ) ,
115
+ test_app_size_action (
116
+ fake_ipa_size : fake_ipa_size ,
117
+ expected_json : expected_json ,
118
+ app_thinning_plist_path : app_thinning_plist_path ,
109
119
app_name : 'wordpress' ,
110
120
build_type : 'internal' ,
111
- app_version : '19.8.0.2' ,
112
- ipa_path : ipa_path ,
113
- app_thinning_plist_path : app_thinning_plist_path
121
+ app_version : '19.8.0.2'
114
122
)
123
+ end
124
+ end
115
125
116
- # Assert
117
- expect ( code ) . to eq ( 200 )
118
- expect ( File ) . to exist ( output_path )
119
- expect ( JSON . parse ( File . read ( output_path ) ) ) . to eq ( JSON . parse ( expected_json ) )
126
+ context 'when using a file:// URL' do
127
+ it 'writes the payload uncompressed to a file' do
128
+ in_tmp_dir do |tmp_dir |
129
+ # Arrange: Generate a fake `.ipa` file with the expected size
130
+ ipa_path = File . join ( tmp_dir , 'fake.ipa' )
131
+ File . write ( ipa_path , SecureRandom . random_bytes ( fake_ipa_size ) )
132
+ output_path = File . join ( tmp_dir , 'payload.json.gz' )
133
+
134
+ app_thinning_plist_path = File . join ( test_data_dir , 'app-thinning.plist' )
135
+ expected_fixture = File . join ( test_data_dir , 'ios-metrics-payload.json' )
136
+ # Parse as Hash then reconvert to JSON, in order to get the 'minified' JSON version
137
+ expected_json = JSON . parse ( File . read ( expected_fixture ) ) . to_json
138
+
139
+ # Act
140
+ code = run_described_fastlane_action (
141
+ api_base_url : File . join ( 'file://localhost/' , output_path ) ,
142
+ app_name : 'wordpress' ,
143
+ build_type : 'internal' ,
144
+ app_version : '19.8.0.2' ,
145
+ ipa_path : ipa_path ,
146
+ app_thinning_plist_path : app_thinning_plist_path ,
147
+ use_gzip_content_encoding : true ,
148
+ )
149
+
150
+ # Assert
151
+ expect ( code ) . to eq ( 200 )
152
+ expect ( File ) . to exist ( output_path )
153
+ expect ( JSON . parse ( Zlib . gunzip ( File . read ( output_path ) ) ) ) . to eq ( JSON . parse ( expected_json ) )
154
+ end
155
+ end
156
+
157
+ it 'writes the payload uncompressed to a file when disabling gzip' do
158
+ in_tmp_dir do |tmp_dir |
159
+ # Arrange: Generate a fake `.ipa` file with the expected size
160
+ ipa_path = File . join ( tmp_dir , 'fake.ipa' )
161
+ File . write ( ipa_path , SecureRandom . random_bytes ( fake_ipa_size ) )
162
+ output_path = File . join ( tmp_dir , 'payload.json' )
163
+
164
+ app_thinning_plist_path = File . join ( test_data_dir , 'app-thinning.plist' )
165
+ expected_fixture = File . join ( test_data_dir , 'ios-metrics-payload.json' )
166
+ # Parse as Hash then reconvert to JSON, in order to get the 'minified' JSON version
167
+ expected_json = JSON . parse ( File . read ( expected_fixture ) ) . to_json
168
+
169
+ # Act
170
+ code = run_described_fastlane_action (
171
+ api_base_url : File . join ( 'file://localhost/' , output_path ) ,
172
+ app_name : 'wordpress' ,
173
+ build_type : 'internal' ,
174
+ app_version : '19.8.0.2' ,
175
+ ipa_path : ipa_path ,
176
+ app_thinning_plist_path : app_thinning_plist_path ,
177
+ use_gzip_content_encoding : false ,
178
+ )
179
+
180
+ # Assert
181
+ expect ( code ) . to eq ( 200 )
182
+ expect ( File ) . to exist ( output_path )
183
+ expect ( JSON . parse ( File . read ( output_path ) ) ) . to eq ( JSON . parse ( expected_json ) )
184
+ end
120
185
end
121
186
end
122
187
end
0 commit comments