diff --git a/.github/workflows/autoupdate-pr.yml b/.github/workflows/autoupdate-pr.yml new file mode 100644 index 000000000..e387b2d40 --- /dev/null +++ b/.github/workflows/autoupdate-pr.yml @@ -0,0 +1,39 @@ +name: Autoupdate PR +on: + push: + branches: + - combined-sdk + +jobs: + update_pull_requests: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.DISPATCH_ACCESS_TOKEN }} + + - name: Set up Git + run: | + git config --global user.name 'box-sdk-build' + git config --global user.email 'box-sdk-build@box.com' + + - name: Fetch all branches and tags + run: git fetch --prune --unshallow + + - name: Auto update pull requests + run: | + PR_LIST=$(curl -s -H "Authorization: Bearer ${{ secrets.DISPATCH_ACCESS_TOKEN }}" "https://api.github.com/repos/$GITHUB_REPOSITORY/pulls?state=open" | jq -r '.[] | .head.ref') + for pr_branch in $PR_LIST; do + git checkout "$pr_branch" + if git merge origin/combined-sdk; then + git push + else + # Conflict occurred, resolve by keeping our changes + git checkout --ours . + git add . + git commit -m "Auto resolve conflict by keeping our changes" + git push + fi + done diff --git a/.github/workflows/integration-tests-sdk.yml b/.github/workflows/integration-tests-sdk.yml new file mode 100644 index 000000000..1162827a4 --- /dev/null +++ b/.github/workflows/integration-tests-sdk.yml @@ -0,0 +1,34 @@ +name: Integration tests sdk +on: + pull_request: + branches: + - combined-sdk +jobs: + core: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '8' + - name: All Tests + if: startsWith(github.head_ref, 'codegen-release') + env: + JAVA_COLLABORATOR_ID: ${{ secrets.JAVA_COLLABORATOR_ID }} + JAVA_COLLABORATOR: ${{ secrets.JAVA_COLLABORATOR }} + JAVA_ENTERPRISE_ID: ${{ secrets.JAVA_ENTERPRISE_ID }} + JAVA_JWT_CONFIG: ${{ secrets.JAVA_JWT_CONFIG }} + JAVA_USER_ID: ${{ secrets.JAVA_USER_ID }} + run: ./gradlew integrationTest --stacktrace + - name: Smoke Tests + if: "!startsWith(github.head_ref, 'codegen-release')" + env: + JAVA_COLLABORATOR_ID: ${{ secrets.JAVA_COLLABORATOR_ID }} + JAVA_COLLABORATOR: ${{ secrets.JAVA_COLLABORATOR }} + JAVA_ENTERPRISE_ID: ${{ secrets.JAVA_ENTERPRISE_ID }} + JAVA_JWT_CONFIG: ${{ secrets.JAVA_JWT_CONFIG }} + JAVA_USER_ID: ${{ secrets.JAVA_USER_ID }} + run: ./gradlew smokeTest --stacktrace diff --git a/.github/workflows/build-and-test-daily.yml b/.github/workflows/integration-tests-sdkgen.yml similarity index 55% rename from .github/workflows/build-and-test-daily.yml rename to .github/workflows/integration-tests-sdkgen.yml index ed50019ae..0d2489acb 100644 --- a/.github/workflows/build-and-test-daily.yml +++ b/.github/workflows/integration-tests-sdkgen.yml @@ -1,28 +1,28 @@ -name: Build and Test daily (sdk-gen) +name: Integration tests sdkgen on: - schedule: - - cron: "20 1 * * 1-5" + pull_request: + branches: + - combined-sdk jobs: build-and-test: runs-on: ubuntu-latest strategy: max-parallel: 1 matrix: - distribution: ["zulu", "temurin"] - java: ["8", "17"] + distribution: ['zulu', 'temurin'] + java: ['8', '17'] name: Java ${{ matrix.java }} (${{ matrix.distribution }}) steps: - name: Checkout uses: actions/checkout@v4 - with: - ref: sdk-gen - name: Setup Java uses: actions/setup-java@v4 with: distribution: ${{ matrix.distribution }} java-version: ${{ matrix.java }} - cache: "gradle" + cache: 'gradle' - name: All Tests + if: startsWith(github.head_ref, 'codegen-release') env: JWT_CONFIG_BASE_64: ${{ secrets.JWT_CONFIG_BASE_64 }} ADMIN_USER_ID: ${{ secrets.ADMIN_USER_ID }} @@ -40,28 +40,13 @@ jobs: SLACK_AUTOMATION_USER_ID: ${{ secrets.SLACK_AUTOMATION_USER_ID }} SLACK_ORG_ID: ${{ secrets.SLACK_ORG_ID }} SLACK_PARTNER_ITEM_ID: ${{ secrets.SLACK_PARTNER_ITEM_ID }} - run: ./gradlew check --stacktrace - - name: Coverage + run: ./gradlew integrationTestGen --stacktrace + - name: Smoke Tests + if: "!startsWith(github.head_ref, 'codegen-release')" env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./gradlew jacocoTestReport coverallsJacoco - notify: - name: Send Slack Notification - runs-on: ubuntu-latest - needs: [build-and-test] - if: always() - steps: - - name: Send Slack Notification - env: - SLACK_WEBHOOK_TEST_NOTIFICATION_URL: ${{ secrets.SLACK_WEBHOOK_TEST_NOTIFICATION_URL }} - BUILD_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - run: | - if [ "${{ needs.build-and-test.result }}" != "success" ]; then - STATUS="Failure ❌" - else - STATUS="Success ✅" - fi - - curl -X POST -H "Content-Type: application/json" \ - --data "{\"text\":\"<${BUILD_URL}|Daily Tests Job> in *${GITHUB_REPOSITORY}* finished with status: ${STATUS}\"}" \ - "$SLACK_WEBHOOK_TEST_NOTIFICATION_URL" + JWT_CONFIG_BASE_64: ${{ secrets.JWT_CONFIG_BASE_64 }} + CLIENT_ID: ${{ secrets.CLIENT_ID }} + CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} + USER_ID: ${{ secrets.USER_ID }} + ENTERPRISE_ID: ${{ secrets.ENTERPRISE_ID }} + run: ./gradlew smokeTestGen --stacktrace \ No newline at end of file diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml deleted file mode 100644 index 9c2a80b84..000000000 --- a/.github/workflows/integration-tests.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Integration tests - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - core: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '8' - - name: Run Tests - env: - JAVA_COLLABORATOR_ID: ${{ secrets.JAVA_COLLABORATOR_ID }} - JAVA_COLLABORATOR: ${{ secrets.JAVA_COLLABORATOR }} - JAVA_ENTERPRISE_ID: ${{ secrets.JAVA_ENTERPRISE_ID }} - JAVA_JWT_CONFIG: ${{ secrets.JAVA_JWT_CONFIG }} - JAVA_USER_ID: ${{ secrets.JAVA_USER_ID }} - run: ./gradlew integrationTest diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml deleted file mode 100644 index 58c874f10..000000000 --- a/.github/workflows/releases.yml +++ /dev/null @@ -1,28 +0,0 @@ -# A GitHub action that notifies the developer -# changelog repository of any new releases. - -name: Notify changelog - -on: - # Only trigger for a full release, - # ignoring pre-releases and drafts - release: - types: - - released - -jobs: - notify: - # This job can run on the latest Ubuntu - # and it should not take more than 3 minutes - runs-on: ubuntu-latest - timeout-minutes: 3 - - steps: - # There's really only 1 step, and i - - name: Notify changelog of new release - uses: peter-evans/repository-dispatch@v1 - with: - token: ${{ secrets.DISPATCH_ACCESS_TOKEN }} - repository: box/box-developer-changelog - event-type: new-release-note - client-payload: '{"ref": "${{ github.ref }}", "repository": "${{github.repository}}", "labels": "sdks,java", "repo_display_name": "Box Java SDK"}' diff --git a/.github/workflows/semantic-pr.yml b/.github/workflows/semantic-pr.yml index cbff636c5..67d2bb018 100644 --- a/.github/workflows/semantic-pr.yml +++ b/.github/workflows/semantic-pr.yml @@ -6,6 +6,8 @@ on: - opened - edited - synchronize + branches: + - combined-sdk jobs: main: diff --git a/.github/workflows/spell-check-lint.yml b/.github/workflows/spell-check-lint.yml index 3283b9f04..d7526ef62 100644 --- a/.github/workflows/spell-check-lint.yml +++ b/.github/workflows/spell-check-lint.yml @@ -1,9 +1,9 @@ name: spell-check-lint on: pull_request_target: - types: [ opened, synchronize, edited ] + types: [opened, synchronize, edited] branches: - - main + - combined-sdk jobs: spellcheck-request-title: runs-on: ubuntu-latest diff --git a/.github/workflows/build-main.yml b/.github/workflows/unit-tests.yml similarity index 74% rename from .github/workflows/build-main.yml rename to .github/workflows/unit-tests.yml index 9df466a28..48669b935 100644 --- a/.github/workflows/build-main.yml +++ b/.github/workflows/unit-tests.yml @@ -1,10 +1,10 @@ -name: build-main +name: Unit tests and Coverage on: pull_request: types: [ opened, synchronize ] push: branches: - - main + - combined-sdk jobs: build-and-test: runs-on: ubuntu-latest @@ -24,7 +24,9 @@ jobs: cache: 'gradle' - name: Build and test run: ./gradlew check --stacktrace - - name: Coverage + - name: Generate JaCoCo report + run: ./gradlew jacocoTestReport --stacktrace + - name: Upload coverage to Coveralls env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./gradlew jacocoTestReport coverallsJacoco + run: ./gradlew coverallsJacoco --stacktrace diff --git a/CHANGELOG.md b/CHANGELOG.md index 8017bf864..f9f6a94cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -288,7 +288,7 @@ The most important change this release includes is the replacement of the HTTP l * `BoxEvent.Type` is replaced with `EventType` * Removing deprecated methods from `BoxFile`, `BoxFileVersionRetention`, `BoxFolder`, `BoxGroup`, `BoxGroupMembership`,`BoxItem`, `BoxRetentionPolicy`, `BoxTask`, `BoxUser`, `BoxWebLink`, `EventLog`, `Metadata` and `MetadataTemplate`. -Migration details can be found [here](doc/upgrades/3.x.x%20to%204.x.x.md). +Migration details can be found [here](migration-guides/3.x.x%20to%204.x.x.md). ### New Features and Enhancements: diff --git a/build.gradle b/build.gradle index 9bf31e02d..1b4923f7f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,6 @@ plugins { id "com.github.nbaztec.coveralls-jacoco" version "1.2.14" id "com.diffplug.spotless" version "6.2.0" - id "checkstyle" id "jacoco" id "java" id "maven-publish" @@ -9,6 +8,7 @@ plugins { id "eclipse" id "idea" id 'org.jreleaser' version '1.18.0' + id "org.gradle.test-retry" version "1.5.6" } sourceCompatibility = 1.8 @@ -47,24 +47,28 @@ configurations { testsCommonImplementation.extendsFrom(implementation) testImplementation.extendsFrom(testsCommonImplementation) intTestImplementation.extendsFrom(testsCommonImplementation) - intTestRuntimeOnly.extendsFrom(runtimeOnly) + intTestRuntimeOnly.extendsFrom(testRuntimeOnly) } dependencies { implementation "com.eclipsesource.minimal-json:minimal-json:0.9.5" + implementation "com.fasterxml.jackson.core:jackson-annotations:2.17.2" + implementation "com.fasterxml.jackson.core:jackson-core:2.17.2" + implementation "com.fasterxml.jackson.core:jackson-databind:2.17.2" implementation "org.bitbucket.b_c:jose4j:0.9.4" implementation "org.bouncycastle:bcprov-jdk18on:1.78.1" implementation "org.bouncycastle:bcpkix-jdk18on:1.78.1" implementation "com.squareup.okhttp3:okhttp:4.12.0" implementation "com.github.luben:zstd-jni:1.5.7-2" testsCommonImplementation "junit:junit:4.13.2" + testsCommonImplementation "org.junit.jupiter:junit-jupiter-api:5.10.0" testsCommonImplementation "org.hamcrest:hamcrest-library:2.2" testsCommonImplementation "org.mockito:mockito-core:4.8.0" testsCommonImplementation "org.slf4j:slf4j-nop:2.0.3" + testRuntimeOnly "org.junit.vintage:junit-vintage-engine:5.10.0" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.10.0" testImplementation "com.github.tomakehurst:wiremock:2.27.2" exampleImplementation "com.eclipsesource.minimal-json:minimal-json:0.9.5" - // this is last version working under java 8 - checkstyle "com.puppycrawl.tools:checkstyle:9.3" } compileJava { @@ -75,7 +79,7 @@ compileJava { javadoc { options.windowTitle "Box Java SDK" options.noQualifiers "all" - options.stylesheetFile file("doc/css/javadoc.css") + options.stylesheetFile file("docs/sdk/css/javadoc.css") options.noTree true options.noIndex true options.noHelp true @@ -88,27 +92,125 @@ javadoc { options.links "https://docs.oracle.com/javase/8/docs/api/" } -task runExample(type: JavaExec, dependsOn: "exampleClasses") { +tasks.register('runExample', JavaExec) { + dependsOn "exampleClasses" classpath = sourceSets.example.runtimeClasspath mainClass = "com.box.sdk.example.Main" } -task runCreateAppUser(type: JavaExec, dependsOn: "exampleClasses") { +tasks.register('runCreateAppUser', JavaExec) { + dependsOn "exampleClasses" classpath = sourceSets.example.runtimeClasspath mainClass = "com.box.sdk.example.CreateAppUser" } -task runAccessAsAppUser(type: JavaExec, dependsOn: "exampleClasses") { +tasks.register('runAccessAsAppUser', JavaExec) { + dependsOn "exampleClasses" classpath = sourceSets.example.runtimeClasspath mainClass = "com.box.sdk.example.AccessAsAppUser" } -task integrationTest(type: Test) { - description = "Runs the integration tests." +tasks.register('integrationTest', Test) { + description = "Runs the integration tests in com.box.sdk" group = "Verification" testLogging.showStandardStreams = true testClassesDirs = sourceSets.intTest.output.classesDirs classpath = sourceSets.intTest.runtimeClasspath + useJUnitPlatform() + include '**/com/box/sdk/**' + retry { + maxRetries = 2 + failOnPassedAfterRetry = false + } +} + +tasks.register('integrationTestGen', Test) { + description = "Runs integration tests in com.box.sdkgen" + group = "Verification" + testLogging.showStandardStreams = true + testClassesDirs = sourceSets.intTest.output.classesDirs + classpath = sourceSets.intTest.runtimeClasspath + useJUnitPlatform() + include '**/com/box/sdkgen/**' + retry { + maxRetries = 2 + failOnPassedAfterRetry = false + } + + filter { + // Socket timeout + excludeTestsMatching 'com.box.sdkgen.transfer.TransferITest.testTransferUserContent' + } + + testLogging { + events = ['passed', 'failed', 'skipped'] + showStandardStreams = true + } +} + +tasks.register('smokeTest', Test) { + description = "Runs smoke integration tests in com.box.sdk" + group = "Verification" + testLogging.showStandardStreams = true + testClassesDirs = sourceSets.intTest.output.classesDirs + classpath = sourceSets.intTest.runtimeClasspath + useJUnitPlatform() + + filter { + includeTestsMatching 'com.box.sdk.BoxAPIConnectionIT' + includeTestsMatching 'com.box.sdk.BoxFileIT' + } + + retry { + maxRetries = 2 + failOnPassedAfterRetry = false + } +} + +tasks.register('smokeTestGen', Test) { + description = "Runs integration tests in com.box.sdkgen" + group = "Verification" + testLogging.showStandardStreams = true + testClassesDirs = sourceSets.intTest.output.classesDirs + classpath = sourceSets.intTest.runtimeClasspath + useJUnitPlatform() + include '**/com/box/sdkgen/**' + retry { + maxRetries = 2 + failOnPassedAfterRetry = false + } + + filter { + includeTestsMatching 'com.box.sdkgen.auth.AuthITest' + includeTestsMatching 'com.box.sdkgen.files.FilesITest' + includeTestsMatching 'com.box.sdkgen.uploads.UploadsITest' + includeTestsMatching 'com.box.sdkgen.downloads.DownloadsITest' + } + + testLogging { + events = ['passed', 'failed', 'skipped'] + showStandardStreams = true + } +} + +tasks.withType(Test) { + testLogging { + exceptionFormat = "full" + } + + jacoco { + destinationFile = file("$buildDir/jacoco/test.exec") + } + + outputs.upToDateWhen { false } +} + + +// Combined task to run both sets +tasks.register('integrationTestsAll') { + dependsOn['integrationTest', 'integrationTestGen'] + description = "Runs all integration tests" + group = "Verification" } jacoco { @@ -116,12 +218,14 @@ jacoco { } jacocoTestReport { + dependsOn test reports { xml.required = true // coveralls plugin depends on xml format report html.required = true } } + tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:all" @@ -132,18 +236,11 @@ tasks.withType(JavaCompile) { } } -tasks.withType(Test) { - testLogging { - exceptionFormat = "full" - } - - jacoco { - destinationFile = file("$buildDir/jacoco/test.exec") - } - - outputs.upToDateWhen { false } +test { + useJUnit() } + tasks.withType(GenerateModuleMetadata) { enabled = false } @@ -159,17 +256,6 @@ spotless { } } -test { - useJUnit { - excludeCategories "com.box.sdk.IntegrationTestJWT" - } -} - -checkstyle { - ignoreFailures = false - maxWarnings = 0 -} - publishing { publications { boxJavaSdk(MavenPublication) { @@ -177,7 +263,7 @@ publishing { pom { artifactId = project.getArchivesBaseName() name = "Box Java SDK" - description = "The Box SDK for Java." + description = "Official Box Java SDK." url = "https://opensource.box.com/box-java-sdk/" packaging = "jar" licenses { @@ -189,7 +275,7 @@ publishing { developers { developer { id = "box" - name = "Box" + name = "box" email = "sdks@box.com" } } @@ -213,12 +299,12 @@ signing { required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("publish") } // we are switching to gpg-agent and not using Java-based implementation because of // org.bouncycastle:bc-fips:1.0.2.1 libray preset in our Docker machines which is - // not comaptible with Gradle implementation + // not compatible with Gradle implementation useGpgCmd() sign publishing.publications.boxJavaSdk } -def centralUsername = project.findProperty("centralUsername") +def centralUsername = project.findProperty("centralUsername") def centralPassword = project.findProperty("centralPassword") jreleaser { signing { @@ -228,9 +314,9 @@ jreleaser { maven { mavenCentral { sonatype { + active = "ALWAYS" + url = "https://central.sonatype.com/api/v1/publisher" sign = false - active = 'RELEASE' - url = 'https://central.sonatype.com/api/v1/publisher' stagingRepository('build/staging-deploy') username = centralUsername password = centralPassword diff --git a/doc/sdk/ai.md b/docs/sdk/ai.md similarity index 100% rename from doc/sdk/ai.md rename to docs/sdk/ai.md diff --git a/doc/sdk/android.md b/docs/sdk/android.md similarity index 100% rename from doc/sdk/android.md rename to docs/sdk/android.md diff --git a/doc/sdk/authentication.md b/docs/sdk/authentication.md similarity index 100% rename from doc/sdk/authentication.md rename to docs/sdk/authentication.md diff --git a/doc/sdk/classifications.md b/docs/sdk/classifications.md similarity index 100% rename from doc/sdk/classifications.md rename to docs/sdk/classifications.md diff --git a/doc/sdk/collaboration_allowlists.md b/docs/sdk/collaboration_allowlists.md similarity index 100% rename from doc/sdk/collaboration_allowlists.md rename to docs/sdk/collaboration_allowlists.md diff --git a/doc/sdk/collaborations.md b/docs/sdk/collaborations.md similarity index 100% rename from doc/sdk/collaborations.md rename to docs/sdk/collaborations.md diff --git a/doc/sdk/collections.md b/docs/sdk/collections.md similarity index 100% rename from doc/sdk/collections.md rename to docs/sdk/collections.md diff --git a/doc/sdk/comments.md b/docs/sdk/comments.md similarity index 100% rename from doc/sdk/comments.md rename to docs/sdk/comments.md diff --git a/doc/sdk/configuration.md b/docs/sdk/configuration.md similarity index 100% rename from doc/sdk/configuration.md rename to docs/sdk/configuration.md diff --git a/doc/sdk/css/javadoc.css b/docs/sdk/css/javadoc.css similarity index 100% rename from doc/sdk/css/javadoc.css rename to docs/sdk/css/javadoc.css diff --git a/doc/sdk/devices.md b/docs/sdk/devices.md similarity index 100% rename from doc/sdk/devices.md rename to docs/sdk/devices.md diff --git a/doc/sdk/events.md b/docs/sdk/events.md similarity index 100% rename from doc/sdk/events.md rename to docs/sdk/events.md diff --git a/doc/sdk/file_requests.md b/docs/sdk/file_requests.md similarity index 100% rename from doc/sdk/file_requests.md rename to docs/sdk/file_requests.md diff --git a/doc/sdk/files.md b/docs/sdk/files.md similarity index 100% rename from doc/sdk/files.md rename to docs/sdk/files.md diff --git a/doc/sdk/folders.md b/docs/sdk/folders.md similarity index 100% rename from doc/sdk/folders.md rename to docs/sdk/folders.md diff --git a/doc/sdk/groups.md b/docs/sdk/groups.md similarity index 100% rename from doc/sdk/groups.md rename to docs/sdk/groups.md diff --git a/doc/sdk/legal_holds.md b/docs/sdk/legal_holds.md similarity index 100% rename from doc/sdk/legal_holds.md rename to docs/sdk/legal_holds.md diff --git a/doc/sdk/logging.md b/docs/sdk/logging.md similarity index 100% rename from doc/sdk/logging.md rename to docs/sdk/logging.md diff --git a/doc/sdk/metadata_template.md b/docs/sdk/metadata_template.md similarity index 100% rename from doc/sdk/metadata_template.md rename to docs/sdk/metadata_template.md diff --git a/doc/sdk/overview.md b/docs/sdk/overview.md similarity index 100% rename from doc/sdk/overview.md rename to docs/sdk/overview.md diff --git a/doc/sdk/recent_items.md b/docs/sdk/recent_items.md similarity index 100% rename from doc/sdk/recent_items.md rename to docs/sdk/recent_items.md diff --git a/doc/sdk/retention_policies.md b/docs/sdk/retention_policies.md similarity index 100% rename from doc/sdk/retention_policies.md rename to docs/sdk/retention_policies.md diff --git a/doc/sdk/search.md b/docs/sdk/search.md similarity index 100% rename from doc/sdk/search.md rename to docs/sdk/search.md diff --git a/doc/sdk/shared-items.md b/docs/sdk/shared-items.md similarity index 100% rename from doc/sdk/shared-items.md rename to docs/sdk/shared-items.md diff --git a/doc/sdk/sign_requests.md b/docs/sdk/sign_requests.md similarity index 100% rename from doc/sdk/sign_requests.md rename to docs/sdk/sign_requests.md diff --git a/doc/sdk/sign_templates.md b/docs/sdk/sign_templates.md similarity index 100% rename from doc/sdk/sign_templates.md rename to docs/sdk/sign_templates.md diff --git a/doc/sdk/storage_policy.md b/docs/sdk/storage_policy.md similarity index 100% rename from doc/sdk/storage_policy.md rename to docs/sdk/storage_policy.md diff --git a/doc/sdk/tasks.md b/docs/sdk/tasks.md similarity index 100% rename from doc/sdk/tasks.md rename to docs/sdk/tasks.md diff --git a/doc/sdk/terms_of_service.md b/docs/sdk/terms_of_service.md similarity index 100% rename from doc/sdk/terms_of_service.md rename to docs/sdk/terms_of_service.md diff --git a/doc/sdk/trash.md b/docs/sdk/trash.md similarity index 100% rename from doc/sdk/trash.md rename to docs/sdk/trash.md diff --git a/doc/sdk/upgrading.md b/docs/sdk/upgrading.md similarity index 100% rename from doc/sdk/upgrading.md rename to docs/sdk/upgrading.md diff --git a/doc/sdk/users.md b/docs/sdk/users.md similarity index 100% rename from doc/sdk/users.md rename to docs/sdk/users.md diff --git a/doc/sdk/watermarking.md b/docs/sdk/watermarking.md similarity index 100% rename from doc/sdk/watermarking.md rename to docs/sdk/watermarking.md diff --git a/doc/sdk/webhooks.md b/docs/sdk/webhooks.md similarity index 100% rename from doc/sdk/webhooks.md rename to docs/sdk/webhooks.md diff --git a/doc/sdk/weblinks.md b/docs/sdk/weblinks.md similarity index 100% rename from doc/sdk/weblinks.md rename to docs/sdk/weblinks.md diff --git a/doc/sdk/zip_download.md b/docs/sdk/zip_download.md similarity index 100% rename from doc/sdk/zip_download.md rename to docs/sdk/zip_download.md diff --git a/src/intTest/java/com/box/sdk/BoxAIIT.java b/src/intTest/java/com/box/sdk/BoxAIIT.java index 25465058e..46eef47d2 100644 --- a/src/intTest/java/com/box/sdk/BoxAIIT.java +++ b/src/intTest/java/com/box/sdk/BoxAIIT.java @@ -55,7 +55,7 @@ public void askAISingleItem() throws InterruptedException { Collections.singletonList( new BoxAIItem(uploadedFileInfo.getID(), BoxAIItem.Type.FILE)), BoxAI.Mode.SINGLE_ITEM_QA); - assertThat(response.getAnswer(), containsString("Test file")); + assertThat(response.getAnswer(), containsString("Test File")); assert response.getCreatedAt().before(new Date(System.currentTimeMillis())); assertThat(response.getCompletionReason(), equalTo("done")); }, @@ -190,7 +190,7 @@ public void askAISingleItemWithAgent() throws InterruptedException { null, askAgent, true); - assertThat(response.getAnswer(), containsString("Test file")); + assertThat(response.getAnswer(), containsString("Test File")); assert response.getCreatedAt().before(new Date(System.currentTimeMillis())); assertThat(response.getCompletionReason(), equalTo("done")); }, diff --git a/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java b/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java index fdc879f8b..9b7cfd6ce 100644 --- a/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java +++ b/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java @@ -75,7 +75,7 @@ public void getUpdateClassificationTemplate() { api, Metadata.ENTERPRISE_METADATA_SCOPE, Metadata.CLASSIFICATION_TEMPLATE_KEY, updates); MetadataTemplate.Option updatedOption = updatedTemplate.getFields().get(0).getOptionsObjects().get(0); - assertEquals(updatedOption.getKey(), "Sensitive"); + assertEquals(optionKey, updatedOption.getKey()); assertEquals( updatedOption .getStaticConfig() @@ -111,7 +111,7 @@ public void getUpdateClassificationTemplate() { MetadataTemplate.updateMetadataTemplate( api, Metadata.ENTERPRISE_METADATA_SCOPE, Metadata.CLASSIFICATION_TEMPLATE_KEY, updates); updatedOption = updatedTemplate.getFields().get(0).getOptionsObjects().get(0); - assertEquals(updatedOption.getKey(), "Sensitive"); + assertEquals(optionKey, updatedOption.getKey()); assertEquals( updatedOption .getStaticConfig() diff --git a/src/intTest/java/com/box/sdk/BoxFileIT.java b/src/intTest/java/com/box/sdk/BoxFileIT.java index c2bc26934..a236705b5 100644 --- a/src/intTest/java/com/box/sdk/BoxFileIT.java +++ b/src/intTest/java/com/box/sdk/BoxFileIT.java @@ -228,8 +228,7 @@ public void uploadAndDownloadFileSucceeds() throws IOException { folder, hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID())))); verify(mockUploadListener, atLeastOnce()) .onProgressChanged(anyLong(), longThat(is(equalTo(fileSize)))); - verify(mockDownloadListener, atLeastOnce()) - .onProgressChanged(anyLong(), longThat(is(equalTo(fileSize)))); + verify(mockDownloadListener, atLeastOnce()).onProgressChanged(anyLong(), anyLong()); } finally { deleteFile(uploadedFile); } diff --git a/src/intTest/resources/junit-platform.properties b/src/intTest/resources/junit-platform.properties new file mode 100644 index 000000000..82de190bf --- /dev/null +++ b/src/intTest/resources/junit-platform.properties @@ -0,0 +1,2 @@ +junit.jupiter.execution.parallel.enabled = true +junit.jupiter.execution.parallel.mode.default = concurrent \ No newline at end of file diff --git a/src/main/java/com/box/sdk/BoxAPIConnection.java b/src/main/java/com/box/sdk/BoxAPIConnection.java index fd5d69a61..b1fb86fb8 100644 --- a/src/main/java/com/box/sdk/BoxAPIConnection.java +++ b/src/main/java/com/box/sdk/BoxAPIConnection.java @@ -1272,7 +1272,7 @@ public void asSelf() { /** * Used to override default SSL certification handling. For example, you can provide your own * trust manager or hostname verifier to allow self-signed certificates. You can check examples here. + * href="https://github.com/box/box-java-sdk/blob/combined-sdk/docs/sdk/configuration.md#ssl-configuration">here. * * @param trustManager TrustManager that verifies certificates are valid. * @param hostnameVerifier HostnameVerifier that allows you to specify what hostnames are allowed.