Skip to content

Commit a1f7812

Browse files
committed
Tests and lib updates.
1 parent 512664b commit a1f7812

File tree

5 files changed

+559
-21
lines changed

5 files changed

+559
-21
lines changed

pubspec.lock

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ packages:
55
dependency: transitive
66
description:
77
name: _fe_analyzer_shared
8-
sha256: dd3d2ad434b9510001d089e8de7556d50c834481b9abc2891a0184a8493a19dc
8+
sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f
99
url: "https://pub.dev"
1010
source: hosted
11-
version: "89.0.0"
11+
version: "85.0.0"
1212
analyzer:
1313
dependency: transitive
1414
description:
1515
name: analyzer
16-
sha256: c22b6e7726d1f9e5db58c7251606076a71ca0dbcf76116675edfadbec0c9e875
16+
sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d"
1717
url: "https://pub.dev"
1818
source: hosted
19-
version: "8.2.0"
19+
version: "7.7.1"
2020
args:
2121
dependency: "direct main"
2222
description:
@@ -45,18 +45,18 @@ packages:
4545
dependency: transitive
4646
description:
4747
name: build
48-
sha256: "5b887c55a0f734b433b3b2d89f9cd1f99eb636b17e268a5b4259258bc916504b"
48+
sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
4949
url: "https://pub.dev"
5050
source: hosted
51-
version: "4.0.0"
51+
version: "2.4.2"
5252
build_config:
5353
dependency: transitive
5454
description:
5555
name: build_config
56-
sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187"
56+
sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
5757
url: "https://pub.dev"
5858
source: hosted
59-
version: "1.2.0"
59+
version: "1.1.2"
6060
build_daemon:
6161
dependency: transitive
6262
description:
@@ -65,14 +65,30 @@ packages:
6565
url: "https://pub.dev"
6666
source: hosted
6767
version: "4.0.4"
68+
build_resolvers:
69+
dependency: transitive
70+
description:
71+
name: build_resolvers
72+
sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0
73+
url: "https://pub.dev"
74+
source: hosted
75+
version: "2.4.4"
6876
build_runner:
6977
dependency: "direct dev"
7078
description:
7179
name: build_runner
72-
sha256: a9461b8e586bf018dd4afd2e13b49b08c6a844a4b226c8d1d10f3a723cdd78c3
80+
sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99"
81+
url: "https://pub.dev"
82+
source: hosted
83+
version: "2.4.15"
84+
build_runner_core:
85+
dependency: transitive
86+
description:
87+
name: build_runner_core
88+
sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021"
7389
url: "https://pub.dev"
7490
source: hosted
75-
version: "2.10.1"
91+
version: "8.0.0"
7692
built_collection:
7793
dependency: transitive
7894
description:
@@ -93,10 +109,10 @@ packages:
93109
dependency: transitive
94110
description:
95111
name: checked_yaml
96-
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
112+
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
97113
url: "https://pub.dev"
98114
source: hosted
99-
version: "2.0.4"
115+
version: "2.0.3"
100116
code_builder:
101117
dependency: transitive
102118
description:
@@ -141,10 +157,10 @@ packages:
141157
dependency: transitive
142158
description:
143159
name: dart_style
144-
sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697
160+
sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
145161
url: "https://pub.dev"
146162
source: hosted
147-
version: "3.1.2"
163+
version: "3.0.1"
148164
file:
149165
dependency: transitive
150166
description:
@@ -237,10 +253,10 @@ packages:
237253
dependency: "direct dev"
238254
description:
239255
name: lints
240-
sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0
256+
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
241257
url: "https://pub.dev"
242258
source: hosted
243-
version: "6.0.0"
259+
version: "5.1.1"
244260
logging:
245261
dependency: transitive
246262
description:
@@ -277,10 +293,10 @@ packages:
277293
dependency: "direct dev"
278294
description:
279295
name: mockito
280-
sha256: "4feb43bc4eb6c03e832f5fcd637d1abb44b98f9cfa245c58e27382f58859f8f6"
296+
sha256: f99d8d072e249f719a5531735d146d8cf04c580d93920b04de75bef6dfb2daf6
281297
url: "https://pub.dev"
282298
source: hosted
283-
version: "5.5.1"
299+
version: "5.4.5"
284300
node_preamble:
285301
dependency: transitive
286302
description:
@@ -365,10 +381,10 @@ packages:
365381
dependency: transitive
366382
description:
367383
name: source_gen
368-
sha256: ccf30b0c9fbcd79d8b6f5bfac23199fb354938436f62475e14aea0f29ee0f800
384+
sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
369385
url: "https://pub.dev"
370386
source: hosted
371-
version: "4.0.1"
387+
version: "2.0.0"
372388
source_map_stack_trace:
373389
dependency: transitive
374390
description:
@@ -457,6 +473,14 @@ packages:
457473
url: "https://pub.dev"
458474
source: hosted
459475
version: "0.6.12"
476+
timing:
477+
dependency: transitive
478+
description:
479+
name: timing
480+
sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
481+
url: "https://pub.dev"
482+
source: hosted
483+
version: "1.0.2"
460484
typed_data:
461485
dependency: transitive
462486
description:
@@ -522,4 +546,4 @@ packages:
522546
source: hosted
523547
version: "3.1.3"
524548
sdks:
525-
dart: ">=3.8.0 <4.0.0"
549+
dart: ">=3.6.0 <4.0.0"

test/dsym/dsym_api_test.dart

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
import 'dart:convert';
2+
import 'dart:io';
3+
4+
import 'package:http/http.dart' as http;
5+
import 'package:mockito/annotations.dart';
6+
import 'package:mockito/mockito.dart';
7+
import 'package:raygun_cli/src/dsym/dsym_api.dart';
8+
import 'package:test/test.dart';
9+
10+
import 'dsym_api_test.mocks.dart';
11+
12+
@GenerateMocks([http.Client])
13+
void main() {
14+
group('DsymApi', () {
15+
late MockClient mockClient;
16+
late DsymApi dsymApi;
17+
18+
setUp(() {
19+
mockClient = MockClient();
20+
dsymApi = DsymApi(mockClient);
21+
});
22+
23+
group('uploadDsym', () {
24+
test('returns true when upload is successful (200)', () async {
25+
// Create a temporary test file
26+
final testFile = File('test_dsym.zip');
27+
testFile.writeAsStringSync('test dsym content');
28+
29+
final response = http.StreamedResponse(
30+
Stream.value(utf8.encode('Upload successful')),
31+
200,
32+
);
33+
34+
when(mockClient.send(any)).thenAnswer((_) async => response);
35+
36+
final result = await dsymApi.uploadDsym(
37+
appId: 'test-app-id',
38+
externalAccessToken: 'test-token',
39+
path: 'test_dsym.zip',
40+
);
41+
42+
expect(result, true);
43+
verify(mockClient.send(any)).called(1);
44+
45+
// Clean up
46+
testFile.deleteSync();
47+
});
48+
49+
test('returns false when upload fails', () async {
50+
final testFile = File('test_dsym.zip');
51+
testFile.writeAsStringSync('test dsym content');
52+
53+
final response = http.StreamedResponse(
54+
Stream.value(utf8.encode('Bad request')),
55+
400,
56+
);
57+
58+
when(mockClient.send(any)).thenAnswer((_) async => response);
59+
60+
final result = await dsymApi.uploadDsym(
61+
appId: 'test-app-id',
62+
externalAccessToken: 'test-token',
63+
path: 'test_dsym.zip',
64+
);
65+
66+
expect(result, false);
67+
68+
testFile.deleteSync();
69+
});
70+
71+
test('returns false when file does not exist', () async {
72+
final result = await dsymApi.uploadDsym(
73+
appId: 'test-app-id',
74+
externalAccessToken: 'test-token',
75+
path: 'nonexistent_file.zip',
76+
);
77+
78+
expect(result, false);
79+
verifyNever(mockClient.send(any));
80+
});
81+
82+
test('handles network exceptions and returns false', () async {
83+
final testFile = File('test_dsym.zip');
84+
testFile.writeAsStringSync('test dsym content');
85+
86+
when(mockClient.send(any)).thenThrow(Exception('Network error'));
87+
88+
final result = await dsymApi.uploadDsym(
89+
appId: 'test-app-id',
90+
externalAccessToken: 'test-token',
91+
path: 'test_dsym.zip',
92+
);
93+
94+
expect(result, false);
95+
96+
testFile.deleteSync();
97+
});
98+
99+
test('returns false for 401 unauthorized', () async {
100+
final testFile = File('test_dsym.zip');
101+
testFile.writeAsStringSync('test dsym content');
102+
103+
final response = http.StreamedResponse(
104+
Stream.value(utf8.encode('Unauthorized')),
105+
401,
106+
);
107+
108+
when(mockClient.send(any)).thenAnswer((_) async => response);
109+
110+
final result = await dsymApi.uploadDsym(
111+
appId: 'test-app-id',
112+
externalAccessToken: 'invalid-token',
113+
path: 'test_dsym.zip',
114+
);
115+
116+
expect(result, false);
117+
118+
testFile.deleteSync();
119+
});
120+
121+
test('returns false for 500 internal server error', () async {
122+
final testFile = File('test_dsym.zip');
123+
testFile.writeAsStringSync('test dsym content');
124+
125+
final response = http.StreamedResponse(
126+
Stream.value(utf8.encode('Internal server error')),
127+
500,
128+
);
129+
130+
when(mockClient.send(any)).thenAnswer((_) async => response);
131+
132+
final result = await dsymApi.uploadDsym(
133+
appId: 'test-app-id',
134+
externalAccessToken: 'test-token',
135+
path: 'test_dsym.zip',
136+
);
137+
138+
expect(result, false);
139+
140+
testFile.deleteSync();
141+
});
142+
});
143+
});
144+
}

0 commit comments

Comments
 (0)