diff --git a/src/main/scala/codecheck/github/models/Repository.scala b/src/main/scala/codecheck/github/models/Repository.scala index 93f3570..6ec3bc4 100644 --- a/src/main/scala/codecheck/github/models/Repository.scala +++ b/src/main/scala/codecheck/github/models/Repository.scala @@ -1,5 +1,6 @@ package codecheck.github.models +import java.net.URL import org.json4s.JValue import codecheck.github.utils.ToDo @@ -46,7 +47,19 @@ case class RepositoryListOption( direction: SortDirection = SortDirection.asc ) -/*case*/ class RepositoryInput extends ToDo +case class RepositoryInput( + name: String, + description: Option[String] = None, + homepage: Option[URL] = None, + `private`: Boolean = false, + has_issues: Boolean = true, + has_wiki: Boolean = true, + has_downloads: Boolean = true, + team_id: Option[Int] = None, + auto_init: Boolean = false, + gitignore_template: Option[String] = None, + license_template: Option[String] = None +) extends AbstractInput case class Repository(value: JValue) extends AbstractJson(value) { def id = get("id").toLong @@ -65,4 +78,4 @@ case class Permissions(value: JValue) extends AbstractJson(value) { def admin = boolean("admin") def push = boolean("push") def pull = boolean("pull") -} \ No newline at end of file +} diff --git a/src/main/scala/codecheck/github/operations/RepositoryOp.scala b/src/main/scala/codecheck/github/operations/RepositoryOp.scala index a6d803c..db0fd7b 100644 --- a/src/main/scala/codecheck/github/operations/RepositoryOp.scala +++ b/src/main/scala/codecheck/github/operations/RepositoryOp.scala @@ -22,10 +22,10 @@ trait RepositoryOp { } } } - def listOwnRepositories(option: RepositoryListOption = RepositoryListOption()): Future[List[Repository]] = + def listOwnRepositories(option: RepositoryListOption = RepositoryListOption()): Future[List[Repository]] = doList("/user/repos", option) - def listUserRepositories(user: String, option: RepositoryListOption = RepositoryListOption()): Future[List[Repository]] = + def listUserRepositories(user: String, option: RepositoryListOption = RepositoryListOption()): Future[List[Repository]] = doList(s"/users/$user/repos", option) def listOrgRepositories(org: String, option: RepositoryListOption = RepositoryListOption()): Future[List[Repository]] = @@ -51,7 +51,11 @@ trait RepositoryOp { } } - def createRepository(input: RepositoryInput): Future[Repository] = ToDo[Future[Repository]] + def createUserRepository(input: RepositoryInput): Future[Repository] = { + exec("POST", s"/user/repos", input.value).map { res => + new Repository(res.body) + } + } def updateRepository(input: RepositoryInput): Future[Repository] = ToDo[Future[Repository]] /* diff --git a/src/test/scala/RepositoryOpSpec.scala b/src/test/scala/RepositoryOpSpec.scala index d8049b6..85fd8df 100644 --- a/src/test/scala/RepositoryOpSpec.scala +++ b/src/test/scala/RepositoryOpSpec.scala @@ -1,12 +1,13 @@ import org.scalatest.path.FunSpec import codecheck.github.exceptions.NotFoundException import codecheck.github.models.Repository +import codecheck.github.models.RepositoryInput import codecheck.github.exceptions.GitHubAPIException import codecheck.github.exceptions.NotFoundException import scala.concurrent.Await import scala.concurrent.ExecutionContext.Implicits.global -class RepositoryOpSpec extends FunSpec with Constants +class RepositoryOpSpec extends FunSpec with Constants { describe("listOwnRepositories") { @@ -45,7 +46,7 @@ class RepositoryOpSpec extends FunSpec with Constants assert(list.size > 0) } - + } describe("getRepository") { it("should succeed") { @@ -61,4 +62,28 @@ class RepositoryOpSpec extends FunSpec with Constants assert(Await.result(api.getRepository(organization, repoInvalid), TIMEOUT).isEmpty) } } + +/* + describe("createUserRepository") { + val createRepoName = "create-repo-name" + it("should succeed") { + val input = RepositoryInput(name = createRepoName) + val repo = Await.result(api.createUserRepository(input), TIMEOUT) + assert(repo.owner.login == user) + assert(repo.name == "create-repo-test") + } + it("should fail with existing repository name") { + val input = RepositoryInput(name = createRepoName) + try { + val repo = Await.result(api.createUserRepository(input), TIMEOUT) + fail + } catch { + case e: GitHubAPIException => + assert(e.error.errors.head.field == "name") + case e: Throwable => + fail + } + } + } +*/ }