Skip to content

Commit

Permalink
feat: add session replay mode argument to reprosteps api
Browse files Browse the repository at this point in the history
  • Loading branch information
abdelhamid-f-nasser authored and a7medev committed Sep 27, 2023
1 parent 5127180 commit 1047530
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 11 deletions.
Expand Up @@ -276,7 +276,7 @@ public void run() {
}

@Override
public void setReproStepsConfig(@Nullable String bugMode, @Nullable String crashMode) {
public void setReproStepsConfig(@Nullable String bugMode, @Nullable String crashMode, @Nullable String sessionReplayMode) {
try {
final ReproConfigurations.Builder builder = new ReproConfigurations.Builder();

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

if (sessionReplayMode != null) {
final Integer resolvedSessionReplayMode = ArgsRegistry.reproModes.get(sessionReplayMode);
builder.setIssueMode(IssueType.SessionReplay, resolvedSessionReplayMode);
}

final ReproConfigurations config = builder.build();

Instabug.setReproConfigurations(config);
Expand Down
Expand Up @@ -379,19 +379,21 @@ public void testGetUserAttributes() {
public void testSetReproStepsConfig() {
String bug = "ReproStepsMode.enabled";
String crash = "ReproStepsMode.disabled";
String sessionReplay = "ReproStepsMode.disabled";

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

api.setReproStepsConfig(bug, crash);
api.setReproStepsConfig(bug, crash, sessionReplay);

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

verify(builder).setIssueMode(IssueType.Bug, ReproMode.EnableWithScreenshots);
verify(builder).setIssueMode(IssueType.Crash, ReproMode.Disable);
verify(builder).setIssueMode(IssueType.SessionReplay, ReproMode.Disable);
verify(builder).build();

mInstabug.verify(() -> Instabug.setReproConfigurations(config));
Expand Down
6 changes: 3 additions & 3 deletions example/ios/InstabugTests/ApmApiTests.m
Expand Up @@ -61,11 +61,11 @@ - (void)testStartExecutionTraceWhenTraceNotNil {
NSString *name = @"trace-name";
XCTestExpectation *expectation = [self expectationWithDescription:@"Call completion handler"];

OCMStub([self.mAPM startExecutionTraceWithName:name]).andReturn([IBGExecutionTrace new]);
OCMStub([self.mAPM startExecutionTraceWithName:name]).andReturn([IBGAPM startExecutionTraceWithName:name]);

[self.api startExecutionTraceId:expectedId name:name completion:^(NSString *actualId, FlutterError *error) {
[expectation fulfill];
XCTAssertEqual(actualId, expectedId);
XCTAssertEqualObjects(actualId, expectedId);
XCTAssertNil(error);
}];

Expand Down Expand Up @@ -124,7 +124,7 @@ - (void)testStartUITrace {

- (void)testEndUITrace {
FlutterError *error;

[self.api endUITraceWithError:&error];

OCMVerify([self.mAPM endUITrace]);
Expand Down
4 changes: 3 additions & 1 deletion example/ios/InstabugTests/InstabugApiTests.m
Expand Up @@ -285,12 +285,14 @@ - (void)testGetUserAttributes {
- (void)testSetReproStepsConfig {
NSString *bugMode = @"ReproStepsMode.enabled";
NSString *crashMode = @"ReproStepsMode.disabled";
NSString *sessioNReplayMode = @"ReproStepsMode.disabled";
FlutterError *error;

[self.api setReproStepsConfigBugMode:bugMode crashMode:crashMode error:&error];
[self.api setReproStepsConfigBugMode:bugMode crashMode:crashMode sessionReplayMode:sessioNReplayMode error:&error];

OCMVerify([self.mInstabug setReproStepsFor:IBGIssueTypeBug withMode:IBGUserStepsModeEnable]);
OCMVerify([self.mInstabug setReproStepsFor:IBGIssueTypeCrash withMode:IBGUserStepsModeDisable]);
OCMVerify([self.mInstabug setReproStepsFor:IBGIssueTypeSessionReplay withMode:IBGUserStepsModeDisable]);
}

- (void)testReportScreenChange {
Expand Down
7 changes: 6 additions & 1 deletion ios/Classes/Modules/InstabugApi.m
Expand Up @@ -149,7 +149,7 @@ - (void)getUserAttributesWithCompletion:(nonnull void (^)(NSDictionary<NSString
completion(Instabug.userAttributes, nil);
}

- (void)setReproStepsConfigBugMode:(nullable NSString *)bugMode crashMode:(nullable NSString *)crashMode error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error {
- (void)setReproStepsConfigBugMode:(nullable NSString *)bugMode crashMode:(nullable NSString *)crashMode sessionReplayMode:(nullable NSString *)sessionReplayMode error:(FlutterError * _Nullable __autoreleasing * _Nonnull)error {
if (bugMode != nil) {
IBGUserStepsMode resolvedBugMode = ArgsRegistry.reproModes[bugMode].integerValue;
[Instabug setReproStepsFor:IBGIssueTypeBug withMode:resolvedBugMode];
Expand All @@ -159,6 +159,11 @@ - (void)setReproStepsConfigBugMode:(nullable NSString *)bugMode crashMode:(nulla
IBGUserStepsMode resolvedCrashMode = ArgsRegistry.reproModes[crashMode].integerValue;
[Instabug setReproStepsFor:IBGIssueTypeCrash withMode:resolvedCrashMode];
}

if (sessionReplayMode != nil) {
IBGUserStepsMode resolvedSessionReplayMode = ArgsRegistry.reproModes[sessionReplayMode].integerValue;
[Instabug setReproStepsFor:IBGIssueTypeSessionReplay withMode:resolvedSessionReplayMode];
}
}

- (UIImage *)getImageForAsset:(NSString *)assetName {
Expand Down
8 changes: 7 additions & 1 deletion lib/src/modules/instabug.dart
Expand Up @@ -351,10 +351,11 @@ class Instabug {
}
}

/// Sets the repro steps mode for bugs and crashes.
/// Sets the repro steps mode for bugs, crashes and session Replay.
///
/// [bug] repro steps mode for bug reports.
/// [crash] repro steps mode for crash reports.
/// [sessionReplay] repro steps mode for session replay.
/// [all] repro steps mode for both bug and crash reports, when present it
/// overrides [bug] and [crash].
///
Expand All @@ -363,19 +364,23 @@ class Instabug {
/// Instabug.setReproStepsConfig(
/// bug: ReproStepsMode.enabled,
/// crash: ReproStepsMode.disabled,
/// sessionReplay: ReproStepsMode.enabled,
/// );
/// ```
static Future<void> setReproStepsConfig({
ReproStepsMode? bug,
ReproStepsMode? crash,
ReproStepsMode? sessionReplay,
ReproStepsMode? all,
}) async {
var bugMode = bug;
var crashMode = crash;
var sessionReplayMode = sessionReplay;

if (all != null) {
bugMode = all;
crashMode = all;
sessionReplayMode = all;
}

// There's an issue with crashes repro steps with screenshots in the iOS SDK
Expand All @@ -389,6 +394,7 @@ class Instabug {
return _host.setReproStepsConfig(
bugMode.toString(),
crashMode.toString(),
sessionReplayMode.toString(),
);
}

Expand Down
6 changes: 5 additions & 1 deletion pigeons/instabug.api.dart
Expand Up @@ -39,7 +39,11 @@ abstract class InstabugHostApi {
@async
Map<String, String>? getUserAttributes();

void setReproStepsConfig(String? bugMode, String? crashMode);
void setReproStepsConfig(
String? bugMode,
String? crashMode,
String? sessionReplayMode,
);
void reportScreenChange(String screenName);

void setCustomBrandingImage(String light, String dark);
Expand Down
7 changes: 5 additions & 2 deletions test/instabug_test.dart
Expand Up @@ -276,16 +276,19 @@ void main() {
test('[setReproStepsConfig] should call host method', () async {
const bug = ReproStepsMode.enabled;
const crash = ReproStepsMode.enabledWithNoScreenshots;
const sessionReplay = ReproStepsMode.disabled;

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

await Instabug.setReproStepsConfig(
bug: bug,
crash: crash,
sessionReplay: sessionReplay,
);

verify(
mHost.setReproStepsConfig(bug.toString(), crash.toString()),
mHost.setReproStepsConfig(
bug.toString(), crash.toString(), sessionReplay.toString()),
).called(1);
});

Expand All @@ -297,7 +300,7 @@ void main() {
await Instabug.setReproStepsConfig(all: all);

verify(
mHost.setReproStepsConfig(all.toString(), all.toString()),
mHost.setReproStepsConfig(all.toString(), all.toString(), all.toString()),
).called(1);
});

Expand Down

0 comments on commit 1047530

Please sign in to comment.