Skip to content

Pass trigger header on commit feedback call #4632

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,12 @@ Task<Void> sendFeedback(
@Nullable Uri screenshotUri,
FeedbackTrigger trigger) {
return testerApiClient
.createFeedback(releaseName, feedbackText, trigger)
.createFeedback(releaseName, feedbackText)
.onSuccessTask(
lightweightExecutor, feedbackName -> attachScreenshot(feedbackName, screenshotUri))
.onSuccessTask(lightweightExecutor, testerApiClient::commitFeedback);
.onSuccessTask(
lightweightExecutor,
feedbackName -> testerApiClient.commitFeedback(feedbackName, trigger));
}

private Task<String> attachScreenshot(String feedbackName, @Nullable Uri screenshotUri) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,18 +139,14 @@ private String findRelease(String fid, String token, String binaryIdParam, Strin

/** Creates a new feedback from the given text, and returns the feedback name. */
@NonNull
Task<String> createFeedback(
String testerReleaseName, String feedbackText, FeedbackTrigger trigger) {
Task<String> createFeedback(String testerReleaseName, String feedbackText) {
return runWithFidAndToken(
(unused, token) -> {
LogWrapper.i(TAG, "Creating feedback for release: " + testerReleaseName);
String path = String.format("v1alpha/%s/feedbackReports", testerReleaseName);
String requestBody = buildCreateFeedbackBody(feedbackText).toString();
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put(X_APP_DISTRO_FEEDBACK_TRIGGER, trigger.toString());
JSONObject responseBody =
testerApiHttpClient.makePostRequest(
CREATE_FEEDBACK_TAG, path, token, requestBody, extraHeaders);
testerApiHttpClient.makePostRequest(CREATE_FEEDBACK_TAG, path, token, requestBody);
return parseJsonFieldFromResponse(responseBody, "name");
});
}
Expand All @@ -174,13 +170,15 @@ Task<String> attachScreenshot(String feedbackName, Uri screenshotUri) {

/** Commits the feedback with the given name. */
@NonNull
Task<Void> commitFeedback(String feedbackName) {
Task<Void> commitFeedback(String feedbackName, FeedbackTrigger trigger) {
return runWithFidAndToken(
(unused, token) -> {
LogWrapper.i(TAG, "Committing feedback: " + feedbackName);
String path = "v1alpha/" + feedbackName + ":commit";
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put(X_APP_DISTRO_FEEDBACK_TRIGGER, trigger.toString());
testerApiHttpClient.makePostRequest(
COMMIT_FEEDBACK_TAG, path, token, /* requestBody= */ "");
COMMIT_FEEDBACK_TAG, path, token, /* requestBody= */ "", extraHeaders);
return null;
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,48 +59,45 @@ public void setup() {

@Test
public void sendFeedback_success() throws Exception {
when(mockTesterApiClient.createFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM))
when(mockTesterApiClient.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT))
.thenReturn(Tasks.forResult(TEST_FEEDBACK_NAME));
when(mockTesterApiClient.attachScreenshot(TEST_FEEDBACK_NAME, TEST_SCREENSHOT_URI))
.thenReturn(Tasks.forResult(TEST_FEEDBACK_NAME));
when(mockTesterApiClient.commitFeedback(TEST_FEEDBACK_NAME)).thenReturn(Tasks.forResult(null));
when(mockTesterApiClient.commitFeedback(TEST_FEEDBACK_NAME, FeedbackTrigger.CUSTOM))
.thenReturn(Tasks.forResult(null));

Task<Void> task =
feedbackSender.sendFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, TEST_SCREENSHOT_URI, FeedbackTrigger.CUSTOM);
TestUtils.awaitTask(task);

verify(mockTesterApiClient)
.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM);
verify(mockTesterApiClient).createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT);
verify(mockTesterApiClient).attachScreenshot(TEST_FEEDBACK_NAME, TEST_SCREENSHOT_URI);
verify(mockTesterApiClient).commitFeedback(TEST_FEEDBACK_NAME);
verify(mockTesterApiClient).commitFeedback(TEST_FEEDBACK_NAME, FeedbackTrigger.CUSTOM);
}

@Test
public void sendFeedback_withoutScreenshot_success() throws Exception {
when(mockTesterApiClient.createFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM))
when(mockTesterApiClient.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT))
.thenReturn(Tasks.forResult(TEST_FEEDBACK_NAME));
when(mockTesterApiClient.commitFeedback(TEST_FEEDBACK_NAME)).thenReturn(Tasks.forResult(null));
when(mockTesterApiClient.commitFeedback(TEST_FEEDBACK_NAME, FeedbackTrigger.CUSTOM))
.thenReturn(Tasks.forResult(null));

Task<Void> task =
feedbackSender.sendFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, /* screenshot= */ null, FeedbackTrigger.CUSTOM);
TestUtils.awaitTask(task);

verify(mockTesterApiClient)
.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM);
verify(mockTesterApiClient).commitFeedback(TEST_FEEDBACK_NAME);
verify(mockTesterApiClient).createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT);
verify(mockTesterApiClient).commitFeedback(TEST_FEEDBACK_NAME, FeedbackTrigger.CUSTOM);
verify(mockTesterApiClient, never()).attachScreenshot(any(), any());
}

@Test
public void sendFeedback_createFeedbackFails_failsTask() {
FirebaseAppDistributionException cause =
new FirebaseAppDistributionException("test ex", Status.AUTHENTICATION_FAILURE);
when(mockTesterApiClient.createFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM))
when(mockTesterApiClient.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT))
.thenReturn(Tasks.forException(cause));

Task<Void> task =
Expand All @@ -112,8 +109,7 @@ public void sendFeedback_createFeedbackFails_failsTask() {

@Test
public void sendFeedback_attachScreenshotFails_failsTask() {
when(mockTesterApiClient.createFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM))
when(mockTesterApiClient.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT))
.thenReturn(Tasks.forResult(TEST_FEEDBACK_NAME));
FirebaseAppDistributionException cause =
new FirebaseAppDistributionException("test ex", Status.AUTHENTICATION_FAILURE);
Expand All @@ -129,14 +125,13 @@ public void sendFeedback_attachScreenshotFails_failsTask() {

@Test
public void sendFeedback_commitFeedbackFails_failsTask() {
when(mockTesterApiClient.createFeedback(
TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT, FeedbackTrigger.CUSTOM))
when(mockTesterApiClient.createFeedback(TEST_RELEASE_NAME, TEST_FEEDBACK_TEXT))
.thenReturn(Tasks.forResult(TEST_FEEDBACK_NAME));
when(mockTesterApiClient.attachScreenshot(TEST_FEEDBACK_NAME, TEST_SCREENSHOT_URI))
.thenReturn(Tasks.forResult(TEST_FEEDBACK_NAME));
FirebaseAppDistributionException cause =
new FirebaseAppDistributionException("test ex", Status.AUTHENTICATION_FAILURE);
when(mockTesterApiClient.commitFeedback(TEST_FEEDBACK_NAME))
when(mockTesterApiClient.commitFeedback(TEST_FEEDBACK_NAME, FeedbackTrigger.CUSTOM))
.thenReturn(Tasks.forException(cause));

Task<Void> task =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -305,15 +305,12 @@ public void findReleaseUsingIasArtifactId_whenClientThrowsException_failsTask()
@Test
public void createFeedback_whenResponseSuccessful_returnsFeedbackName() throws Exception {
String postBody = String.format("{\"text\":\"%s\"}", FEEDBACK_TEXT);
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("X-APP-DISTRO-FEEDBACK-TRIGGER", "custom");
when(mockTesterApiHttpClient.makePostRequest(
any(), eq(CREATE_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(postBody), eq(extraHeaders)))
any(), eq(CREATE_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(postBody)))
.thenReturn(buildFeedbackJson());

Task<String> task =
firebaseAppDistributionTesterApiClient.createFeedback(
RELEASE_NAME, FEEDBACK_TEXT, FeedbackTrigger.CUSTOM);
firebaseAppDistributionTesterApiClient.createFeedback(RELEASE_NAME, FEEDBACK_TEXT);
String result = awaitTask(task);

assertThat(result).isEqualTo(FEEDBACK_NAME);
Expand All @@ -325,8 +322,7 @@ public void createFeedback_getFidError_throwsError() {
when(mockFirebaseInstallations.getId()).thenReturn(Tasks.forException(expectedException));

Task<String> task =
firebaseAppDistributionTesterApiClient.createFeedback(
RELEASE_NAME, FEEDBACK_TEXT, FeedbackTrigger.CUSTOM);
firebaseAppDistributionTesterApiClient.createFeedback(RELEASE_NAME, FEEDBACK_TEXT);

awaitTaskFailure(task, Status.UNKNOWN, "test ex", expectedException);
}
Expand All @@ -338,43 +334,47 @@ public void createFeedback_getFisAuthTokenError_throwsError() {
.thenReturn(Tasks.forException(expectedException));

Task<String> task =
firebaseAppDistributionTesterApiClient.createFeedback(
RELEASE_NAME, FEEDBACK_TEXT, FeedbackTrigger.CUSTOM);
firebaseAppDistributionTesterApiClient.createFeedback(RELEASE_NAME, FEEDBACK_TEXT);

awaitTaskFailure(task, Status.UNKNOWN, "test ex", expectedException);
}

@Test
public void createFeedback_whenClientThrowsException_failsTask() throws Exception {
String postBody = String.format("{\"text\":\"%s\"}", FEEDBACK_TEXT);
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("X-APP-DISTRO-FEEDBACK-TRIGGER", "custom");

when(mockTesterApiHttpClient.makePostRequest(
any(), eq(CREATE_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(postBody), eq(extraHeaders)))
any(), eq(CREATE_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(postBody)))
.thenThrow(new FirebaseAppDistributionException("test ex", Status.UNKNOWN));

Task<String> task =
firebaseAppDistributionTesterApiClient.createFeedback(
RELEASE_NAME, FEEDBACK_TEXT, FeedbackTrigger.CUSTOM);
firebaseAppDistributionTesterApiClient.createFeedback(RELEASE_NAME, FEEDBACK_TEXT);

awaitTaskFailure(task, Status.UNKNOWN, "test ex");
}

@Test
public void commitFeedback_whenResponseSuccessful_makesPostRequest() throws Exception {
Task<Void> task = firebaseAppDistributionTesterApiClient.commitFeedback(FEEDBACK_NAME);
Task<Void> task =
firebaseAppDistributionTesterApiClient.commitFeedback(
FEEDBACK_NAME, FeedbackTrigger.CUSTOM);
awaitTask(task);

Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("X-APP-DISTRO-FEEDBACK-TRIGGER", "custom");
verify(mockTesterApiHttpClient)
.makePostRequest(any(), eq(COMMIT_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(""));
.makePostRequest(
any(), eq(COMMIT_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(""), eq(extraHeaders));
}

@Test
public void commitFeedback_getFidError_throwsError() {
Exception expectedException = new Exception("test ex");
when(mockFirebaseInstallations.getId()).thenReturn(Tasks.forException(expectedException));

Task<Void> task = firebaseAppDistributionTesterApiClient.commitFeedback(FEEDBACK_NAME);
Task<Void> task =
firebaseAppDistributionTesterApiClient.commitFeedback(
FEEDBACK_NAME, FeedbackTrigger.CUSTOM);

awaitTaskFailure(task, Status.UNKNOWN, "test ex", expectedException);
}
Expand All @@ -385,18 +385,24 @@ public void commitFeedback_getFisAuthTokenError_throwsError() {
when(mockFirebaseInstallations.getToken(false))
.thenReturn(Tasks.forException(expectedException));

Task<Void> task = firebaseAppDistributionTesterApiClient.commitFeedback(FEEDBACK_NAME);
Task<Void> task =
firebaseAppDistributionTesterApiClient.commitFeedback(
FEEDBACK_NAME, FeedbackTrigger.CUSTOM);

awaitTaskFailure(task, Status.UNKNOWN, "test ex", expectedException);
}

@Test
public void commitFeedback_whenClientThrowsException_failsTask() throws Exception {
Map<String, String> extraHeaders = new HashMap<>();
extraHeaders.put("X-APP-DISTRO-FEEDBACK-TRIGGER", "custom");
when(mockTesterApiHttpClient.makePostRequest(
any(), eq(COMMIT_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq("")))
any(), eq(COMMIT_FEEDBACK_PATH), eq(TEST_AUTH_TOKEN), eq(""), eq(extraHeaders)))
.thenThrow(new FirebaseAppDistributionException("test ex", Status.UNKNOWN));

Task<Void> task = firebaseAppDistributionTesterApiClient.commitFeedback(FEEDBACK_NAME);
Task<Void> task =
firebaseAppDistributionTesterApiClient.commitFeedback(
FEEDBACK_NAME, FeedbackTrigger.CUSTOM);

awaitTaskFailure(task, Status.UNKNOWN, "test ex");
}
Expand Down