diff --git a/.circleci/config.yml b/.circleci/config.yml index e11ca02..c80d2b3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,10 @@ version: 2.1 orbs: - codacy: codacy/base@10.9.0 + codacy: codacy/base@11.2.0 + +references: + cache_prefix: &cache_prefix sbt-cache-20240918 workflows: version: 2 @@ -9,8 +12,13 @@ workflows: jobs: - codacy/checkout_and_version: write_sbt_version: true - - codacy/sbt_docker: + - codacy/sbt: name: test + context: ExternalSystems + cache_prefix: *cache_prefix + save_cache: true + aws_profile: maven + use_sbt_native_client: true persist_to_workspace: true steps: - run: @@ -22,9 +30,6 @@ workflows: - run: name: Check scalafmt on sbt files command: sbt scalafmtSbtCheck - - run: - name: Check scalafmt on sbt files - command: sbt scalafmtSbtCheck - run: name: Run tests command: sbt crossTest @@ -45,7 +50,7 @@ workflows: branches: only: - master - - codacy/sbt_docker: + - codacy/sbt: name: publish_sonatype context: CodacyAWS use_sbt_native_client: false @@ -64,7 +69,7 @@ workflows: command: sbt sonatypeBundleRelease requires: - tag_version - - codacy/sbt_docker: + - codacy/sbt: name: publish_s3 aws_profile: maven context: CodacyAWS diff --git a/src/main/scala/com/codacy/client/bitbucket/v2/Project.scala b/src/main/scala/com/codacy/client/bitbucket/v2/Project.scala new file mode 100644 index 0000000..879b402 --- /dev/null +++ b/src/main/scala/com/codacy/client/bitbucket/v2/Project.scala @@ -0,0 +1,13 @@ +package com.codacy.client.bitbucket.v2 + +import play.api.libs.functional.syntax._ +import play.api.libs.json._ + +case class Project(name: String, key: String) + +object Project { + implicit val reads: Reads[Project] = ( + (__ \ "name").read[String] and + (__ \ "key").read[String] + )(Project.apply _) +} diff --git a/src/main/scala/com/codacy/client/bitbucket/v2/service/WorkspaceServices.scala b/src/main/scala/com/codacy/client/bitbucket/v2/service/WorkspaceServices.scala index 5d16879..3bae9d7 100644 --- a/src/main/scala/com/codacy/client/bitbucket/v2/service/WorkspaceServices.scala +++ b/src/main/scala/com/codacy/client/bitbucket/v2/service/WorkspaceServices.scala @@ -3,7 +3,7 @@ package com.codacy.client.bitbucket.v2.service import java.net.URLEncoder import com.codacy.client.bitbucket.util.UrlHelper._ import com.codacy.client.bitbucket.client.{BitbucketClient, PageRequest, RequestResponse} -import com.codacy.client.bitbucket.v2.{UserIdentifiers, UserIdentifiersApi, Workspace, WorkspacePermission} +import com.codacy.client.bitbucket.v2.{Project, UserIdentifiers, UserIdentifiersApi, Workspace, WorkspacePermission} class WorkspaceServices(client: BitbucketClient) { @@ -102,4 +102,22 @@ class WorkspaceServices(client: BitbucketClient) { val requestResponse = client.executePaginated[WorkspacePermission](baseRequestUrl) requestResponse.map(_.headOption) } + + def getWorkspaceProjects( + workspace: String, + pageRequest: Option[PageRequest] = None, + pageLength: Option[Int] = None + ): RequestResponse[Seq[Project]] = { + val url = s"${client.workspacesBaseUrl}/$workspace/projects" + + pageRequest match { + case Some(request) => + client.executeWithCursor[Project](url, request, pageLength) + case None => + val length = pageLength.fold("")(pagelen => s"pagelen=$pagelen") + val urlWithPageLength = joinQueryParameters(url, length) + client.executePaginated[Project](urlWithPageLength) + } + } + } diff --git a/src/test/scala/com/codacy/client/bitbucket/v2/WorkspaceSpecs.scala b/src/test/scala/com/codacy/client/bitbucket/v2/WorkspaceSpecs.scala new file mode 100644 index 0000000..4cb62bd --- /dev/null +++ b/src/test/scala/com/codacy/client/bitbucket/v2/WorkspaceSpecs.scala @@ -0,0 +1,48 @@ +package com.codacy.client.bitbucket.v2 + +import org.scalatest.{FlatSpec, Matchers} +import play.api.libs.json.Json + +class WorkspaceSpecs extends FlatSpec with Matchers { + + "WorkspaceSpecs" should "successfully parse Projects" in { + val input = + """ + | { + | "type":"", + | "links":{ + | "html":{ + | "href":"", + | "name":"" + | }, + | "avatar":{ + | "href":"", + | "name":"" + | } + | }, + | "uuid":"", + | "key":"some key", + | "owner":{ + | "type":"" + | }, + | "name":"Pluto", + | "description":"", + | "is_private":true, + | "created_on":"", + | "updated_on":"", + | "has_publicly_visible_repos":true + | } + | + + """.stripMargin + + val json = Json.parse(input) + val value = json.validate[Project] + + value.fold(e => fail(s"$e"), p => { + p.name shouldBe "Pluto" + p.key shouldBe "some key" + }) + } + +}