Skip to content

Commit 4030ab5

Browse files
abdelhamid-f-nassera7medev
authored andcommitted
feat: add session replay mode argument to reprosteps api (#398)
Jira ID: IBGCRASH-20025 Co-authored-by: Ahmed Mahmoud <[email protected]>
1 parent fc9e4e6 commit 4030ab5

File tree

9 files changed

+46
-13
lines changed

9 files changed

+46
-13
lines changed

android/src/main/java/com/instabug/flutter/modules/InstabugApi.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.instabug.library.invocation.InstabugInvocationEvent;
2727
import com.instabug.library.model.NetworkLog;
2828
import com.instabug.library.ui.onboarding.WelcomeMessage;
29-
import com.instabug.library.visualusersteps.State;
3029

3130
import org.json.JSONObject;
3231

@@ -276,7 +275,7 @@ public void run() {
276275
}
277276

278277
@Override
279-
public void setReproStepsConfig(@Nullable String bugMode, @Nullable String crashMode) {
278+
public void setReproStepsConfig(@Nullable String bugMode, @Nullable String crashMode, @Nullable String sessionReplayMode) {
280279
try {
281280
final ReproConfigurations.Builder builder = new ReproConfigurations.Builder();
282281

@@ -290,6 +289,11 @@ public void setReproStepsConfig(@Nullable String bugMode, @Nullable String crash
290289
builder.setIssueMode(IssueType.Crash, resolvedCrashMode);
291290
}
292291

292+
if (sessionReplayMode != null) {
293+
final Integer resolvedSessionReplayMode = ArgsRegistry.reproModes.get(sessionReplayMode);
294+
builder.setIssueMode(IssueType.SessionReplay, resolvedSessionReplayMode);
295+
}
296+
293297
final ReproConfigurations config = builder.build();
294298

295299
Instabug.setReproConfigurations(config);

android/src/test/java/com/instabug/flutter/ApmApiTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import com.instabug.apm.APM;
1616
import com.instabug.apm.model.ExecutionTrace;
17+
import com.instabug.apm.networking.APMNetworkLogger;
1718
import com.instabug.flutter.generated.ApmPigeon;
1819
import com.instabug.flutter.modules.ApmApi;
1920
import com.instabug.flutter.util.GlobalMocks;
@@ -205,6 +206,7 @@ public void testNetworkLogAndroid() {
205206
data.put("duration", requestDuration);
206207
data.put("serverErrorMessage", serverErrorMessage);
207208

209+
MockedConstruction<APMNetworkLogger> mAPMNetworkLogger = mockConstruction(APMNetworkLogger.class);
208210
MockedConstruction<JSONObject> mJSONObject = mockConstruction(JSONObject.class, (mock, context) -> when(mock.toString(anyInt())).thenReturn("{}"));
209211

210212
api.networkLogAndroid(data);
@@ -228,6 +230,7 @@ public void testNetworkLogAndroid() {
228230
serverErrorMessage
229231
));
230232

233+
mAPMNetworkLogger.close();
231234
mJSONObject.close();
232235
}
233236
}

android/src/test/java/com/instabug/flutter/InstabugApiTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,19 +379,21 @@ public void testGetUserAttributes() {
379379
public void testSetReproStepsConfig() {
380380
String bug = "ReproStepsMode.enabled";
381381
String crash = "ReproStepsMode.disabled";
382+
String sessionReplay = "ReproStepsMode.disabled";
382383

383384
ReproConfigurations config = mock(ReproConfigurations.class);
384385
MockedConstruction<ReproConfigurations.Builder> mReproConfigurationsBuilder = mockConstruction(ReproConfigurations.Builder.class, (mock, context) -> {
385386
when(mock.setIssueMode(anyInt(), anyInt())).thenReturn(mock);
386387
when(mock.build()).thenReturn(config);
387388
});
388389

389-
api.setReproStepsConfig(bug, crash);
390+
api.setReproStepsConfig(bug, crash, sessionReplay);
390391

391392
ReproConfigurations.Builder builder = mReproConfigurationsBuilder.constructed().get(0);
392393

393394
verify(builder).setIssueMode(IssueType.Bug, ReproMode.EnableWithScreenshots);
394395
verify(builder).setIssueMode(IssueType.Crash, ReproMode.Disable);
396+
verify(builder).setIssueMode(IssueType.SessionReplay, ReproMode.Disable);
395397
verify(builder).build();
396398

397399
mInstabug.verify(() -> Instabug.setReproConfigurations(config));

example/ios/InstabugTests/ApmApiTests.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ - (void)testStartExecutionTraceWhenTraceNotNil {
6161
NSString *name = @"trace-name";
6262
XCTestExpectation *expectation = [self expectationWithDescription:@"Call completion handler"];
6363

64-
OCMStub([self.mAPM startExecutionTraceWithName:name]).andReturn([IBGExecutionTrace new]);
64+
IBGExecutionTrace *mTrace = OCMClassMock([IBGExecutionTrace class]);
65+
OCMStub([self.mAPM startExecutionTraceWithName:name]).andReturn(mTrace);
6566

6667
[self.api startExecutionTraceId:expectedId name:name completion:^(NSString *actualId, FlutterError *error) {
6768
[expectation fulfill];
@@ -124,7 +125,7 @@ - (void)testStartUITrace {
124125

125126
- (void)testEndUITrace {
126127
FlutterError *error;
127-
128+
128129
[self.api endUITraceWithError:&error];
129130

130131
OCMVerify([self.mAPM endUITrace]);

example/ios/InstabugTests/InstabugApiTests.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,14 @@ - (void)testGetUserAttributes {
285285
- (void)testSetReproStepsConfig {
286286
NSString *bugMode = @"ReproStepsMode.enabled";
287287
NSString *crashMode = @"ReproStepsMode.disabled";
288+
NSString *sessionReplayMode = @"ReproStepsMode.disabled";
288289
FlutterError *error;
289290

290-
[self.api setReproStepsConfigBugMode:bugMode crashMode:crashMode error:&error];
291+
[self.api setReproStepsConfigBugMode:bugMode crashMode:crashMode sessionReplayMode:sessionReplayMode error:&error];
291292

292293
OCMVerify([self.mInstabug setReproStepsFor:IBGIssueTypeBug withMode:IBGUserStepsModeEnable]);
293294
OCMVerify([self.mInstabug setReproStepsFor:IBGIssueTypeCrash withMode:IBGUserStepsModeDisable]);
295+
OCMVerify([self.mInstabug setReproStepsFor:IBGIssueTypeSessionReplay withMode:IBGUserStepsModeDisable]);
294296
}
295297

296298
- (void)testReportScreenChange {

ios/Classes/Modules/InstabugApi.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ - (void)getUserAttributesWithCompletion:(nonnull void (^)(NSDictionary<NSString
149149
completion(Instabug.userAttributes, nil);
150150
}
151151

152-
- (void)setReproStepsConfigBugMode:(nullable NSString *)bugMode crashMode:(nullable NSString *)crashMode error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error {
152+
- (void)setReproStepsConfigBugMode:(nullable NSString *)bugMode crashMode:(nullable NSString *)crashMode sessionReplayMode:(nullable NSString *)sessionReplayMode error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error {
153153
if (bugMode != nil) {
154154
IBGUserStepsMode resolvedBugMode = ArgsRegistry.reproModes[bugMode].integerValue;
155155
[Instabug setReproStepsFor:IBGIssueTypeBug withMode:resolvedBugMode];
@@ -159,6 +159,11 @@ - (void)setReproStepsConfigBugMode:(nullable NSString *)bugMode crashMode:(nulla
159159
IBGUserStepsMode resolvedCrashMode = ArgsRegistry.reproModes[crashMode].integerValue;
160160
[Instabug setReproStepsFor:IBGIssueTypeCrash withMode:resolvedCrashMode];
161161
}
162+
163+
if (sessionReplayMode != nil) {
164+
IBGUserStepsMode resolvedSessionReplayMode = ArgsRegistry.reproModes[sessionReplayMode].integerValue;
165+
[Instabug setReproStepsFor:IBGIssueTypeSessionReplay withMode:resolvedSessionReplayMode];
166+
}
162167
}
163168

164169
- (UIImage *)getImageForAsset:(NSString *)assetName {

lib/src/modules/instabug.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,31 +351,36 @@ class Instabug {
351351
}
352352
}
353353

354-
/// Sets the repro steps mode for bugs and crashes.
354+
/// Sets the repro steps mode for Bug Reporting, Crash Reporting and Session Replay.
355355
///
356356
/// [bug] repro steps mode for bug reports.
357357
/// [crash] repro steps mode for crash reports.
358-
/// [all] repro steps mode for both bug and crash reports, when present it
359-
/// overrides [bug] and [crash].
358+
/// [sessionReplay] repro steps mode for session replay.
359+
/// [all] repro steps mode for bug reports, crash reports and session replay.
360+
/// If [all] is set, it will override the other modes.
360361
///
361362
/// Example:
362363
/// ```dart
363364
/// Instabug.setReproStepsConfig(
364365
/// bug: ReproStepsMode.enabled,
365366
/// crash: ReproStepsMode.disabled,
367+
/// sessionReplay: ReproStepsMode.enabled,
366368
/// );
367369
/// ```
368370
static Future<void> setReproStepsConfig({
369371
ReproStepsMode? bug,
370372
ReproStepsMode? crash,
373+
ReproStepsMode? sessionReplay,
371374
ReproStepsMode? all,
372375
}) async {
373376
var bugMode = bug;
374377
var crashMode = crash;
378+
var sessionReplayMode = sessionReplay;
375379

376380
if (all != null) {
377381
bugMode = all;
378382
crashMode = all;
383+
sessionReplayMode = all;
379384
}
380385

381386
// There's an issue with crashes repro steps with screenshots in the iOS SDK
@@ -389,6 +394,7 @@ class Instabug {
389394
return _host.setReproStepsConfig(
390395
bugMode.toString(),
391396
crashMode.toString(),
397+
sessionReplayMode.toString(),
392398
);
393399
}
394400

pigeons/instabug.api.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ abstract class InstabugHostApi {
3939
@async
4040
Map<String, String>? getUserAttributes();
4141

42-
void setReproStepsConfig(String? bugMode, String? crashMode);
42+
void setReproStepsConfig(
43+
String? bugMode,
44+
String? crashMode,
45+
String? sessionReplayMode,
46+
);
4347
void reportScreenChange(String screenName);
4448

4549
void setCustomBrandingImage(String light, String dark);

test/instabug_test.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,16 +276,22 @@ void main() {
276276
test('[setReproStepsConfig] should call host method', () async {
277277
const bug = ReproStepsMode.enabled;
278278
const crash = ReproStepsMode.enabledWithNoScreenshots;
279+
const sessionReplay = ReproStepsMode.disabled;
279280

280281
when(mBuildInfo.isIOS).thenReturn(false);
281282

282283
await Instabug.setReproStepsConfig(
283284
bug: bug,
284285
crash: crash,
286+
sessionReplay: sessionReplay,
285287
);
286288

287289
verify(
288-
mHost.setReproStepsConfig(bug.toString(), crash.toString()),
290+
mHost.setReproStepsConfig(
291+
bug.toString(),
292+
crash.toString(),
293+
sessionReplay.toString(),
294+
),
289295
).called(1);
290296
});
291297

@@ -297,7 +303,7 @@ void main() {
297303
await Instabug.setReproStepsConfig(all: all);
298304

299305
verify(
300-
mHost.setReproStepsConfig(all.toString(), all.toString()),
306+
mHost.setReproStepsConfig(all.toString(), all.toString(), all.toString()),
301307
).called(1);
302308
});
303309

0 commit comments

Comments
 (0)