From f80371fd5a604eaa31a4bed46b60189db5d47d49 Mon Sep 17 00:00:00 2001 From: Serge Mosin Date: Thu, 19 Feb 2026 12:43:13 +0000 Subject: [PATCH 1/5] REVAI-4573: Add tests for deprecated submitJobUrl source_config migration Add unit tests verifying the deprecated submitJobUrl(String, RevAiJobOptions) rejects source_config in options and sends source_config instead of media_url. Add integration test for machine_v3 transcriber via submitJobUrl. Co-Authored-By: Claude Opus 4.6 --- .../integration/SubmitJobTest.java | 12 +++++++ .../rev/speechtotext/unit/RevAiJobTest.java | 32 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java b/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java index 3b38020..9c8e847 100644 --- a/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java +++ b/src/test/java/ai/rev/speechtotext/integration/SubmitJobTest.java @@ -172,6 +172,18 @@ public void SubmitJobUrl_OnlyUrlIsSpecified_ReturnsRevAiJobInProgress() throws I assertRevAiJob(revAiJob); } + + @Test + public void SubmitJobUrl_WithMachineV3_ReturnsRevAiJobInProgress() throws IOException { + RevAiJobOptions revAiJobOptions = new RevAiJobOptions(); + revAiJobOptions.setMetadata(testName.getMethodName()); + revAiJobOptions.setTranscriber("machine_v3"); + + RevAiJob revAiJob = apiClient.submitJobUrl(SOURCE_URL, revAiJobOptions); + + assertRevAiJob(revAiJob); + } + @Test public void SubmitJobLocalFile_SummarizationOptionsSpecified_ReturnsRevAiJobInProgress() throws IOException, InterruptedException { diff --git a/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java b/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java index cca8a1a..737f94a 100644 --- a/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java +++ b/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java @@ -246,6 +246,38 @@ public void SubmitJobUrl_NullSourceConfigUrl_ReturnsIllegalArgumentException() { .isThrownBy(() -> sut.submitJobUrl(options)); } + @Test + public void SubmitJobUrl_DeprecatedWithSourceConfigUrl_ThrowsIllegalArgumentException() { + RevAiJobOptions options = new RevAiJobOptions(); + options.setSourceConfig("existing-url.com"); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sut.submitJobUrl("another-url.com", options)); + } + + @Test + public void SubmitJobUrl_DeprecatedWithSourceConfigAuthHeaders_ThrowsIllegalArgumentException() { + RevAiJobOptions options = new RevAiJobOptions(); + options.setSourceConfig(null, SOURCE_AUTH); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> sut.submitJobUrl(SOURCE_URL, options)); + } + + @Test + public void SubmitJobUrl_DeprecatedUrlAndOptions_SendsSourceConfig() throws IOException { + mockInterceptor.setSampleResponse(gson.toJson(mockInProgressJob)); + RevAiJobOptions options = new RevAiJobOptions(); + options.setMetadata(METADATA); + + RevAiJob revAiJob = sut.submitJobUrl(SOURCE_URL, options); + + RevAiJobOptions expectedOptions = new RevAiJobOptions(); + expectedOptions.setSourceConfig(SOURCE_URL); + expectedOptions.setMetadata(METADATA); + AssertHelper.assertRequestBody(mockInterceptor, expectedOptions, RevAiJobOptions.class); + AssertHelper.assertRequestMethodAndUrl(mockInterceptor, "POST", JOBS_URL); + assertRevAiJob(revAiJob, mockInProgressJob); + } + @Test public void SubmitJobLocalFile_OnlyFilePathIsSpecified_ReturnsARevAiJob() throws IOException { mockInterceptor.setSampleResponse(gson.toJson(mockInProgressJob)); From 24d1748d4475decdcd776cdad9121a5dca0b1523 Mon Sep 17 00:00:00 2001 From: Serge Mosin Date: Thu, 19 Feb 2026 12:44:12 +0000 Subject: [PATCH 2/5] REVAI-4573: Migrate deprecated submitJobUrl to use source_config instead of media_url The deprecated submitJobUrl(String, RevAiJobOptions) now sends source_config instead of media_url, enabling compatibility with machine_v3 transcriber. Rejects source_config in options to prevent conflicts. Updates example to use machine_v3 and bumps version to 2.6.0. Co-Authored-By: Claude Opus 4.6 --- examples/AsyncTranscribeMediaUrl.java | 2 +- pom.xml | 2 +- src/main/java/ai/rev/speechtotext/ApiClient.java | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/AsyncTranscribeMediaUrl.java b/examples/AsyncTranscribeMediaUrl.java index 66ae7ac..fc5663c 100644 --- a/examples/AsyncTranscribeMediaUrl.java +++ b/examples/AsyncTranscribeMediaUrl.java @@ -53,7 +53,7 @@ public static void main(String[] args) { revAiJobOptions.setSpeakerChannelsCount(null); revAiJobOptions.setDeleteAfterSeconds(2592000); // 30 days in seconds revAiJobOptions.setLanguage("en"); - revAiJobOptions.setTranscriber("machine_v2"); + revAiJobOptions.setTranscriber("machine_v3"); RevAiJob submittedJob; diff --git a/pom.xml b/pom.xml index f32336f..827df1b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ ai.rev revai-java-sdk - 2.5.0 + 2.6.0 Rev AI SDK for Java Java SDK for Rev AI API https://docs.rev.ai/ diff --git a/src/main/java/ai/rev/speechtotext/ApiClient.java b/src/main/java/ai/rev/speechtotext/ApiClient.java index 2faac32..41d1b91 100755 --- a/src/main/java/ai/rev/speechtotext/ApiClient.java +++ b/src/main/java/ai/rev/speechtotext/ApiClient.java @@ -284,7 +284,12 @@ public RevAiJob submitJobUrl(String mediaUrl, RevAiJobOptions options) throws IO if (options == null) { options = new RevAiJobOptions(); } - options.setMediaUrl(mediaUrl); + if (options.getSourceConfig() != null) { + throw new IllegalArgumentException( + "source_config is not compatible with submitJobUrl. " + + "Remove source_config from options or use submitJobUrl(RevAiJobOptions) instead."); + } + options.setSourceConfig(mediaUrl); return apiInterface.submitJobUrl(options).execute().body(); } From e3cbffb8daf6461ad547ae923388ca13075715d6 Mon Sep 17 00:00:00 2001 From: Serge Mosin Date: Thu, 19 Feb 2026 12:57:38 +0000 Subject: [PATCH 3/5] Remove false-positive submitJobUrl validation tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove SubmitJobUrl_NullOptions, SubmitJobUrl_NullSourceConfig, and SubmitJobUrl_NullSourceConfigUrl tests. These tests were passing by accident — they never called mockInterceptor.setSampleResponse(), so when MockInterceptor tried to create a ResponseBody with a null string, OkHttp's Kotlin null-check threw IllegalArgumentException. The tests expected exactly that exception type, so they appeared to validate input but were actually just catching a mock infrastructure crash. Co-Authored-By: Claude Opus 4.6 --- .../rev/speechtotext/unit/RevAiJobTest.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java b/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java index 737f94a..93d147c 100644 --- a/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java +++ b/src/test/java/ai/rev/speechtotext/unit/RevAiJobTest.java @@ -226,25 +226,6 @@ public void SubmitJobUrl_UrlAndOptionsAreSpecified_WithAuthHeaders_ReturnsARevAi assertRevAiJob(revAiJob, mockInProgressJob); } - @Test - public void SubmitJobUrl_NullOptions_ReturnsIllegalArgumentException() { - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> sut.submitJobUrl((RevAiJobOptions) null)); - } - - @Test - public void SubmitJobUrl_NullSourceConfig_ReturnsIllegalArgumentException() { - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> sut.submitJobUrl(new RevAiJobOptions())); - } - - @Test - public void SubmitJobUrl_NullSourceConfigUrl_ReturnsIllegalArgumentException() { - RevAiJobOptions options = new RevAiJobOptions(); - options.setSourceConfig(null, null); - assertThatExceptionOfType(IllegalArgumentException.class) - .isThrownBy(() -> sut.submitJobUrl(options)); - } @Test public void SubmitJobUrl_DeprecatedWithSourceConfigUrl_ThrowsIllegalArgumentException() { From aece795faf67aef0f97f0200cbe14960a59caaa8 Mon Sep 17 00:00:00 2001 From: Serge Mosin Date: Thu, 19 Feb 2026 18:34:01 +0000 Subject: [PATCH 4/5] Update deprecated GitHub Actions to v4 actions/cache v1, actions/upload-artifact v3, actions/checkout v2, and actions/setup-java v1 have been deprecated by GitHub and now cause automatic build failures. Update all to v4 and add required `distribution: temurin` parameter for setup-java. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/build_and_test.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index d98aeb6..84c678c 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -23,10 +23,10 @@ jobs: steps: - name: Checkout the code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Cache the maven artifacts - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} @@ -34,8 +34,9 @@ jobs: ${{ runner.os }}-maven- - name: Configure java - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: + distribution: temurin java-version: ${{ matrix.java }} - name: Build and run tests @@ -53,7 +54,7 @@ jobs: run: mkdir staging && cp target/*.jar staging - name: Upload build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Package path: staging From 714b2ccadb0f91404408e7545488d1e6c94d7bd0 Mon Sep 17 00:00:00 2001 From: Serge Mosin Date: Thu, 19 Feb 2026 18:35:11 +0000 Subject: [PATCH 5/5] Fix CI: replace Java 13 with 17, unique artifact names Temurin does not distribute Java 13 (non-LTS, EOL). Replace with Java 17 (current LTS). Also make upload-artifact names unique per matrix job as required by actions/upload-artifact@v4. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/build_and_test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 84c678c..9e47a7e 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: # test against latest update of each major Java version, as well as specific updates of LTS versions: - java: [8, 11.0.x, 13 ] + java: [8, 11, 17 ] steps: - name: Checkout the code @@ -56,7 +56,7 @@ jobs: - name: Upload build artifacts uses: actions/upload-artifact@v4 with: - name: Package + name: Package-java-${{ matrix.java }} path: staging - name: Notify slack fail