Skip to content

Commit 35e9fc9

Browse files
chore: add iOS unit tests
1 parent efae20d commit 35e9fc9

File tree

5 files changed

+135
-7
lines changed

5 files changed

+135
-7
lines changed

examples/default/ios/InstabugExample.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
1212
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
1313
20E556262AC55766007416B1 /* InstabugSessionReplayTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E556252AC55766007416B1 /* InstabugSessionReplayTests.m */; };
14+
8043A0072CB66D9A00B610E7 /* InstabugNetworkLoggerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8043A0062CB66D9A00B610E7 /* InstabugNetworkLoggerTests.m */; };
1415
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
1516
C3C8CCF379347A4DF9D2A39D /* CrashReportingExampleModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C8C24386310A3120006604 /* CrashReportingExampleModule.m */; };
1617
CC3DF88E2A1DFC9A003E9914 /* InstabugCrashReportingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CC3DF8852A1DFC99003E9914 /* InstabugCrashReportingTests.m */; };
@@ -49,6 +50,7 @@
4950
20E556252AC55766007416B1 /* InstabugSessionReplayTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstabugSessionReplayTests.m; sourceTree = "<group>"; };
5051
3AF7A6E02D40E0CEEA833CC4 /* libPods-InstabugExample-InstabugTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-InstabugExample-InstabugTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
5152
4FC6A9E6B294FF9929A1423D /* Pods-InstabugExample-InstabugTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugExample-InstabugTests.debug.xcconfig"; path = "Target Support Files/Pods-InstabugExample-InstabugTests/Pods-InstabugExample-InstabugTests.debug.xcconfig"; sourceTree = "<group>"; };
53+
8043A0062CB66D9A00B610E7 /* InstabugNetworkLoggerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InstabugNetworkLoggerTests.m; sourceTree = "<group>"; };
5254
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = InstabugExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
5355
9A3D962AB03F97E25566779F /* Pods-InstabugExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-InstabugExample.debug.xcconfig"; path = "Target Support Files/Pods-InstabugExample/Pods-InstabugExample.debug.xcconfig"; sourceTree = "<group>"; };
5456
BAED0D0441A708AE2390E153 /* libPods-InstabugExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-InstabugExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -107,6 +109,7 @@
107109
CC3DF88B2A1DFC99003E9914 /* InstabugSurveysTests.m */,
108110
00E356F01AD99517003FC87E /* Supporting Files */,
109111
CCF1E4082B022CF20024802D /* RNInstabugTests.m */,
112+
8043A0062CB66D9A00B610E7 /* InstabugNetworkLoggerTests.m */,
110113
);
111114
path = InstabugTests;
112115
sourceTree = "<group>";
@@ -477,6 +480,7 @@
477480
CC3DF8932A1DFC9A003E9914 /* InstabugSurveysTests.m in Sources */,
478481
20E556262AC55766007416B1 /* InstabugSessionReplayTests.m in Sources */,
479482
CC3DF88F2A1DFC9A003E9914 /* InstabugBugReportingTests.m in Sources */,
483+
8043A0072CB66D9A00B610E7 /* InstabugNetworkLoggerTests.m in Sources */,
480484
CCF1E4092B022CF20024802D /* RNInstabugTests.m in Sources */,
481485
CC3DF88E2A1DFC9A003E9914 /* InstabugCrashReportingTests.m in Sources */,
482486
CC3DF8942A1DFC9A003E9914 /* InstabugAPMTests.m in Sources */,
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#import <XCTest/XCTest.h>
2+
#import "InstabugNetworkLoggerBridge.h"
3+
4+
@interface InstabugNetworkLoggerBridgeTests : XCTestCase
5+
6+
@property (nonatomic, strong) InstabugNetworkLoggerBridge *networkLoggerBridge;
7+
8+
@end
9+
10+
@implementation InstabugNetworkLoggerBridgeTests
11+
12+
- (void)setUp {
13+
[super setUp];
14+
self.networkLoggerBridge = [[InstabugNetworkLoggerBridge alloc] init];
15+
}
16+
17+
- (void)tearDown {
18+
self.networkLoggerBridge = nil;
19+
[super tearDown];
20+
}
21+
22+
- (void)testInitialization {
23+
XCTAssertNotNil(self.networkLoggerBridge.requestObfuscationCompletionDictionary);
24+
XCTAssertNotNil(self.networkLoggerBridge.responseObfuscationCompletionDictionary);
25+
XCTAssertNotNil(self.networkLoggerBridge.requestFilteringCompletionDictionary);
26+
XCTAssertNotNil(self.networkLoggerBridge.responseFilteringCompletionDictionary);
27+
}
28+
29+
- (void)testRequiresMainQueueSetup {
30+
XCTAssertFalse([InstabugNetworkLoggerBridge requiresMainQueueSetup]);
31+
}
32+
33+
- (void)testSupportedEvents {
34+
NSArray *events = [self.networkLoggerBridge supportedEvents];
35+
NSArray *expectedEvents = @[@"IBGpreInvocationHandler", @"IBGNetworkLoggerHandler"];
36+
XCTAssertEqualObjects(events, expectedEvents);
37+
}
38+
39+
- (void)testMethodQueue {
40+
dispatch_queue_t queue = [self.networkLoggerBridge methodQueue];
41+
XCTAssertEqual(queue, dispatch_get_main_queue());
42+
}
43+
44+
- (void)testStartObserving {
45+
[self.networkLoggerBridge startObserving];
46+
// Since `hasListeners` is private, we will assume it is true based on no errors or behavior issues
47+
XCTAssertTrue(YES); // Expect no crashes
48+
}
49+
50+
- (void)testStopObserving {
51+
[self.networkLoggerBridge stopObserving];
52+
XCTAssertTrue(YES); // Ensure the method doesn't cause issues
53+
}
54+
55+
- (void)testIsNativeInterceptionEnabled {
56+
XCTestExpectation *expectation = [self expectationWithDescription:@"isNativeInterceptionEnabled"];
57+
58+
[self.networkLoggerBridge isNativeInterceptionEnabled:^(id result) {
59+
XCTAssertNotNil(result);
60+
XCTAssertTrue([result isKindOfClass:[NSNumber class]]);
61+
[expectation fulfill];
62+
} :^(NSString *code, NSString *message, NSError *error) {
63+
XCTFail(@"Promise rejection not expected.");
64+
}];
65+
66+
[self waitForExpectationsWithTimeout:1.0 handler:nil];
67+
}
68+
69+
- (void)testRegisterNetworkLogsListenerFiltering {
70+
[self.networkLoggerBridge registerNetworkLogsListener:NetworkListenerTypeFiltering];
71+
// Expect no crashes and check that filtering handler was set
72+
XCTAssertTrue(YES); // Could add additional assertions if more visibility into handler setup is possible
73+
}
74+
75+
- (void)testRegisterNetworkLogsListenerObfuscation {
76+
[self.networkLoggerBridge registerNetworkLogsListener:NetworkListenerTypeObfuscation];
77+
XCTAssertTrue(YES); // Expect no crashes, similar reasoning
78+
}
79+
80+
- (void)testRegisterNetworkLogsListenerBoth {
81+
[self.networkLoggerBridge registerNetworkLogsListener:NetworkListenerTypeBoth];
82+
XCTAssertTrue(YES); // Same reason, ensuring no crash
83+
}
84+
85+
- (void)testUpdateNetworkLogSnapshotValidJson {
86+
NSString *jsonString = @"{\"url\":\"https://example.com\",\"requestBody\":\"bodyData\",\"requestHeader\":{\"key\":\"value\"},\"id\":\"12345\"}";
87+
88+
[self.networkLoggerBridge updateNetworkLogSnapshot:jsonString];
89+
90+
// Expect no errors or logs regarding completion issues
91+
XCTAssertTrue(YES);
92+
}
93+
94+
- (void)testUpdateNetworkLogSnapshotInvalidJson {
95+
NSString *invalidJsonString = @"invalid json string";
96+
97+
// This should fail gracefully and log an error
98+
[self.networkLoggerBridge updateNetworkLogSnapshot:invalidJsonString];
99+
XCTAssertTrue(YES); // No crash, expect graceful handling
100+
}
101+
102+
- (void)testSetNetworkLoggingRequestFilterPredicateIOS {
103+
NSString *callbackID = @"12345";
104+
105+
// Mock a completion handler
106+
self.networkLoggerBridge.requestFilteringCompletionDictionary[callbackID] = ^(BOOL shouldSave) {
107+
XCTAssertTrue(shouldSave);
108+
};
109+
110+
[self.networkLoggerBridge setNetworkLoggingRequestFilterPredicateIOS:callbackID :YES];
111+
112+
XCTAssertTrue(YES); // Ensure that the handler is invoked correctly
113+
}
114+
115+
- (void)testSetNetworkLoggingRequestFilterPredicateIOSInvalidCallback {
116+
NSString *invalidCallbackID = @"invalidID";
117+
118+
// This should fail gracefully and log an error
119+
[self.networkLoggerBridge setNetworkLoggingRequestFilterPredicateIOS:invalidCallbackID :YES];
120+
121+
XCTAssertTrue(YES); // No crash, expect graceful handling
122+
}
123+
124+
@end

examples/default/src/App.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ export const App: React.FC = () => {
3333
debugLogsLevel: LogLevel.verbose,
3434
networkInterceptionMode: NetworkInterceptionMode.native,
3535
}).then((_) => {
36-
NetworkLogger.setNetworkDataObfuscationHandler(async (networkData) => {
37-
networkData.url = networkData.url + '/iOS/obfuscated';
38-
return networkData;
39-
});
40-
// NetworkLogger.setRequestFilterExpression('false');
36+
// NetworkLogger.setNetworkDataObfuscationHandler(async (networkData) => {
37+
// networkData.url = networkData.url + '/iOS/obfuscated';
38+
// return networkData;
39+
// });
40+
NetworkLogger.setRequestFilterExpression('true');
4141
});
4242
CrashReporting.setNDKCrashesEnabled(true);
4343

ios/RNInstabug/InstabugNetworkLoggerBridge.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ typedef NS_ENUM(NSInteger, NetworkListenerType) {
1111
NetworkListenerTypeBoth
1212
};
1313

14-
@interface InstabugNtworkLoggerBridge : RCTEventEmitter <RCTBridgeModule>
14+
@interface InstabugNetworkLoggerBridge : RCTEventEmitter <RCTBridgeModule>
1515

1616
@property NSMutableDictionary<NSString *, IBGURLRequestAsyncObfuscationCompletedHandler> * _Nonnull requestObfuscationCompletionDictionary;
1717
@property NSMutableDictionary<NSString *, NetworkObfuscationCompletionBlock> * _Nonnull responseObfuscationCompletionDictionary;

ios/RNInstabug/InstabugNetworkLoggerBridge.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ @implementation RCTConvert (NetworkListenerType)
2222

2323
@end
2424

25-
@implementation InstabugNtworkLoggerBridge
25+
@implementation InstabugNetworkLoggerBridge
2626

2727

2828
- (instancetype)init {

0 commit comments

Comments
 (0)