Skip to content

Commit

Permalink
As a reviewer, I want to see the list of my open requested reviews un…
Browse files Browse the repository at this point in the history
…der the reviewer tab (#21)
  • Loading branch information
duxtinto committed Feb 16, 2018
1 parent 023e3f1 commit a6c2f6b
Show file tree
Hide file tree
Showing 55 changed files with 844 additions and 150 deletions.
56 changes: 36 additions & 20 deletions gradle/scripts/intellij.build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,45 @@ intellij {
}

patchPluginXml {
version '1.0.0'
version '1.0.1'
sinceBuild 162
untilBuild '181.*'
changeNotes '''
Use cases implemented by the v1.0.0 release:
- As a reviewee, before moving the caret into the comment line, I want to checkout the pull request branch if it's not checked out yet (#15)
- As a reviewee, I want to visually see whenever a review comment is outdated (#16)
- [bug] As a reviewee, only my open pull request should be displayed in the pull request list (#17)
- [bug] As a reviewee, if I authenticate myself by using a token, the list of my PRs is not loaded (#18)
- As a reviewee, I want to be able of refreshing the pull request list (#19)
Use cases implemented by the v0.0.2 pre-release:
- As a reviewee, I want to see a list of the reviews related to my open pull requests (#7)
- As a reviewer, I want to be able of changing the plugin into reviewer mode (#10)
- As a reviewee, I want to see a list of comments under each item on the review list (#11)
- As a reviewee, I want to see the list of pull request after making visible the tool window (#12)
- As a reviewee, I want to be able of setting the caret in the proper line after clicking on a comment (#14)
Use cases implemented by the v0.0.1 pre-release:
- As a reviewee, I want to see the list of my open reviews in a tool window (#1)
- As a reviewee, I want to be able of opening in my browser any of my open PRs (#2)
- As a reviewee, I want to see the issue number (if any) associated to the PR (#3)
- As a reviewee, I want to be able of switching task context by clicking on the issue's column (#6)
<p>
<ul>
<li>Use cases implemented by the v1.0.1 release:</li>
<ul>
<li>As a reviewer, I want to see the list of my open requested reviews under the reviewer tab</li>
</ul>
<li>Use cases implemented by the v1.0.0 release:</li>
<ul>
<li>As a reviewee, before moving the caret into the comment line, I want to checkout the pull request branch if it's not checked out yet (#15)</li>
<li>As a reviewee, I want to visually see whenever a review comment is outdated (#16)</li>
<li>[bug] As a reviewee, only my open pull request should be displayed in the pull request list (#17)</li>
<li>[bug] As a reviewee, if I authenticate myself by using a token, the list of my PRs is not loaded (#18)</li>
<li>As a reviewee, I want to be able of refreshing the pull request list (#19)</li>
</ul>
<li>Use cases implemented by the v0.0.2 pre-release:</li>
<ul>
<li>As a reviewee, I want to see a list of the reviews related to my open pull requests (#7)</li>
<li>As a reviewer, I want to be able of changing the plugin into reviewer mode (#10)</li>
<li>As a reviewee, I want to see a list of comments under each item on the review list (#11)</li>
<li>As a reviewee, I want to see the list of pull request after making visible the tool window (#12)</li>
<li>As a reviewee, I want to be able of setting the caret in the proper line after clicking on a comment (#14)</li>
<li></li>
</ul>
<li>Use cases implemented by the v0.0.1 pre-release:</li>
<ul>
<li>As a reviewee, I want to see the list of my open reviews in a tool window (#1)</li>
<li>As a reviewee, I want to be able of opening in my browser any of my open PRs (#2)</li>
<li>As a reviewee, I want to see the issue number (if any) associated to the PR (#3)</li>
<li>As a reviewee, I want to be able of switching task context by clicking on the issue's column (#6)</li>
</ul>
</ul>
</p>
'''
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures

import com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.builders.*
import com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.builders.domain.CodeRevieweeFixtureBuilder
import com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.builders.domain.CodeReviewerFixtureBuilder
import com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.builders.domain.UserFixtureBuilder

object Fixture {
Expand Down Expand Up @@ -44,4 +45,8 @@ object Fixture {
fun user(): UserFixtureBuilder {
return UserFixtureBuilder()
}

fun reviewer(): CodeReviewerFixtureBuilder {
return CodeReviewerFixtureBuilder()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@ package com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.builder
import com.duxtinto.intellij.plugin.github.codereviews.domain.issues.IssueEntity
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullRequestEntity
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.reviews.CodeRevieweeEntity
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.reviews.CodeReviewerEntity
import com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.FixtureBuilder
import com.duxtinto.intellij.plugin.github.codereviews.helpers.random.RandomGenerator

class PullRequestFixtureBuilder : FixtureBuilder<PullRequestEntity> {
private var number: Long = RandomGenerator.next()
private var state: PullRequestEntity.State = RandomGenerator.next()
private var reviewee: CodeRevieweeEntity = RandomGenerator.next()
private var closableIssues = arrayListOf<IssueEntity>()
private val reviewers = ArrayList<CodeReviewerEntity>()
private var closableIssues = ArrayList<IssueEntity>()

override fun build(): PullRequestEntity {
return RandomGenerator
Expand All @@ -19,6 +21,7 @@ class PullRequestFixtureBuilder : FixtureBuilder<PullRequestEntity> {
number = number,
state = state,
reviewee = reviewee,
reviewers = reviewers,
closeableIssues = closableIssues)
}

Expand All @@ -41,4 +44,9 @@ class PullRequestFixtureBuilder : FixtureBuilder<PullRequestEntity> {
closableIssues.add(issue)
return this
}

fun reviewedBy(reviewer: CodeReviewerEntity): PullRequestFixtureBuilder {
reviewers.add(reviewer)
return this
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.builders.domain

import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.reviews.CodeReviewerEntity
import com.duxtinto.intellij.plugin.github.codereviews.helpers.fixtures.FixtureBuilder
import com.duxtinto.intellij.plugin.github.codereviews.helpers.random.RandomGenerator

class CodeReviewerFixtureBuilder: FixtureBuilder<CodeReviewerEntity> {
private var username: String = RandomGenerator.next()

override fun build(): CodeReviewerEntity {
return RandomGenerator
.next<CodeReviewerEntity>()
.copy(username = username)
}

fun withUsername(username: String): CodeReviewerFixtureBuilder {
this.username = username
return this
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
package com.duxtinto.intellij.plugin.github.codereviews.data

import com.duxtinto.intellij.plugin.github.codereviews.domain.User.UserEntity
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullRequestEntity
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.reviews.CodeReviewerEntity

interface DataContract {
interface User {
interface Fetcher {
fun fetchAuthenticated(): UserEntity?
}
}

interface CodeReview {
interface Reviewer {
interface Fetcher {
fun fetchAllByPullRequest(pullRequest: PullRequestEntity): List<CodeReviewerEntity>
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,38 @@ import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullR
import com.duxtinto.intellij.plugin.github.codereviews.net.pullrequests.apiv3.PullRequestQueryParameters
import com.duxtinto.intellij.plugin.github.codereviews.net.pullrequests.apiv3.PullRequestQueryParameters.State
import javax.inject.Inject
import java.io.IOException

class PullRequestRepository
@Inject
constructor(
private val userFetcher: DataContract.User.Fetcher,
private val fetcher: PullRequestDomainContract.Fetcher)
private val pullRequestFetcher: PullRequestDomainContract.Fetcher,
private val requestedReviewsFetcher: DataContract.CodeReview.Reviewer.Fetcher)
: PullRequestDomainContract.Repository {

override fun getOneById(userName: String, repoName: String, id: Long): PullRequestEntity? {
return fetcher.fetchOneForRepository(userName, repoName, id)
return pullRequestFetcher.fetchOneForRepository(userName, repoName, id)
}

@Throws(IOException::class)
override fun getAllMyOpenBy(userName: String, repoName: String): List<PullRequestEntity> {
override fun getAllMyAssignedBy(userName: String, repoName: String): List<PullRequestEntity> {
val parameters = PullRequestQueryParameters(state = State.OPEN)
val username = userFetcher.fetchAuthenticated()?.username
return fetcher
val authUser = userFetcher.fetchAuthenticated()
return pullRequestFetcher
.fetchAllForRepository(userName, repoName, parameters)
.filter {
it.reviewee?.username == username
it.reviewee?.username == authUser?.username
}
}

override fun getAllMyRequestedBy(userName: String, repoName: String): List<PullRequestEntity> {
val parameters = PullRequestQueryParameters(state = State.OPEN)
val authUser = userFetcher.fetchAuthenticated()
return pullRequestFetcher
.fetchAllForRepository(userName, repoName, parameters)
.filter {
requestedReviewsFetcher.fetchAllByPullRequest(it).any {
it.username == authUser?.username
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.duxtinto.intellij.plugin.github.codereviews.di.impl.dagger.modules

import com.duxtinto.intellij.plugin.github.codereviews.data.DataContract
import com.duxtinto.intellij.plugin.github.codereviews.data.codereviews.CodeReviewsDataContract
import com.duxtinto.intellij.plugin.github.codereviews.data.codereviews.CodeReviewsRepository
import com.duxtinto.intellij.plugin.github.codereviews.data.codereviews.comments.CommentsRepository
import com.duxtinto.intellij.plugin.github.codereviews.di.scopes.ProjectScoped
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.reviews.CodeReviewsDomainContract
import com.duxtinto.intellij.plugin.github.codereviews.net.codereviews.apiv3.CodeReviewerFetcher
import com.duxtinto.intellij.plugin.github.codereviews.net.codereviews.apiv3.CodeReviewsFetcher
import com.duxtinto.intellij.plugin.github.codereviews.presentation.codereviews.CodeReviews
import com.duxtinto.intellij.plugin.github.codereviews.presentation.codereviews.CodeReviewsPresenter
Expand Down Expand Up @@ -48,4 +50,7 @@ abstract class CodeReviewModule {
@Binds
@ProjectScoped
abstract fun provideCodeReviewsPresenter(presenter: CodeReviewsPresenter): CodeReviews.Presenter

@Binds
abstract fun provideCodeReviewReviewerFetcher(fetcher: CodeReviewerFetcher): DataContract.CodeReview.Reviewer.Fetcher
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package com.duxtinto.intellij.plugin.github.codereviews.di.impl.dagger.modules

import com.duxtinto.intellij.plugin.github.codereviews.di.impl.dagger.modules.pullrequest.PullRequestModule
import com.duxtinto.intellij.plugin.github.codereviews.di.scopes.ProjectScoped
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullRequestEntity
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.entities.ProjectExt
import com.duxtinto.intellij.plugin.github.codereviews.presentation.pullrequestlist.columns.ColumnInfoFactory
import com.intellij.openapi.progress.EmptyProgressIndicator
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.util.ui.ColumnInfo
import dagger.Module
import dagger.Provides

import javax.inject.Named

@Module(includes = [
AntiCorruptionLayerModule::class,
UserModule::class,
Expand All @@ -35,11 +31,4 @@ class ProjectModule(private val project: ProjectExt) {
fun provideProgressIndicator(): ProgressIndicator {
return EmptyProgressIndicator()
}

@Provides
@ProjectScoped
@Named("default")
fun providePullRequestColumnInfoDefaultArray(columnInfoFactory: ColumnInfoFactory): Array<ColumnInfo<PullRequestEntity, *>> {
return columnInfoFactory.createDefaultColumns()
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.duxtinto.intellij.plugin.github.codereviews.di.impl.dagger.modules.idea

import com.duxtinto.intellij.plugin.github.codereviews.di.qualifiers.Reviewee
import com.duxtinto.intellij.plugin.github.codereviews.di.qualifiers.Reviewer
import com.duxtinto.intellij.plugin.github.codereviews.di.scopes.ProjectScoped
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.GetAllMyOpenForRepoInteractor
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullRequestsByRepositoryInteractor
import com.duxtinto.intellij.plugin.github.codereviews.domain.repositories.FindGithubRepoForRootFolderInteractor
import com.duxtinto.intellij.plugin.github.codereviews.domain.repositories.RepositoriesDomainContract.Git
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.entities.ProjectExt
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.events.repositories.GitChangeListener
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.services.git.IdeaBranchOperator
import com.duxtinto.intellij.plugin.github.codereviews.presentation.pullrequestlist.PullRequestList
import com.duxtinto.intellij.plugin.github.codereviews.presentation.reviewee.RevieweeContent
import com.duxtinto.intellij.plugin.github.codereviews.presentation.reviewer.ReviewerContent
import com.intellij.dvcs.repo.VcsRepositoryMappingListener
import dagger.Module
import dagger.Provides
Expand All @@ -20,9 +23,12 @@ class IdeaGitModule {
@ProjectScoped
fun provideVcsRepositoryMappingListener(
repoFinder: FindGithubRepoForRootFolderInteractor,
prFetcher: GetAllMyOpenForRepoInteractor,
prPresenter: PullRequestList.Presenter): VcsRepositoryMappingListener {
return GitChangeListener(repoFinder, prFetcher, prPresenter)
@Reviewee assignedPrFetcher: PullRequestsByRepositoryInteractor,
@Reviewer requestedPrFetcher: PullRequestsByRepositoryInteractor,
revieweePresenter: RevieweeContent.Presenter,
reviewerPresenter: ReviewerContent.Presenter)
: VcsRepositoryMappingListener {
return GitChangeListener(repoFinder, assignedPrFetcher, requestedPrFetcher, revieweePresenter, reviewerPresenter)
}

@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.duxtinto.intellij.plugin.github.codereviews.domain.User.UserEntity
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullRequestEntity
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.entities.GithubConnectionExt
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.entities.ProjectExt
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.services.github.codereviews.IdeaCodeReviewerLoader
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.services.github.pullrequests.IdeaPullRequestLoader
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.services.github.users.IdeaUserLoader
import com.duxtinto.intellij.plugin.github.codereviews.net.NetContract
Expand Down Expand Up @@ -58,4 +59,12 @@ class IdeaGithubModule {
): NetContract.User.Loader {
return IdeaUserLoader(connection, mapper)
}

@Provides
@ProjectScoped
fun provideCodeReviewReviewerLoader(
connection: GithubConnectionExt
): NetContract.CodeReview.Reviewer.Loader {
return IdeaCodeReviewerLoader(connection)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import dagger.Module
import dagger.Provides

@Module(includes = [
IdeaRevieweeActionModule::class
IdeaRevieweeActionModule::class,
IdeaReviewerActionModule::class
])
class IdeaActionModule {
@Provides
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.duxtinto.intellij.plugin.github.codereviews.di.impl.dagger.modules.idea.actions

import com.duxtinto.intellij.plugin.github.codereviews.di.qualifiers.Reviewee
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.GetAllMyOpenForRepoInteractor
import com.duxtinto.intellij.plugin.github.codereviews.domain.pullrequests.PullRequestsByRepositoryInteractor
import com.duxtinto.intellij.plugin.github.codereviews.domain.repositories.FindGithubRepoForRootFolderInteractor
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.presentation.toolwindow.toolbar.RevieweeToolbarFactory
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.presentation.toolwindow.toolbar.reviewee.RefreshPullRequestListAction
Expand All @@ -17,7 +17,7 @@ class IdeaRevieweeActionModule {
@Provides
fun provideRefreshPullRequestListAction(
findRepoInteractor: FindGithubRepoForRootFolderInteractor,
getPullRequestsInteractor: GetAllMyOpenForRepoInteractor,
@Reviewee getPullRequestsInteractor: PullRequestsByRepositoryInteractor,
presenter: RevieweeContent.Presenter
): RefreshPullRequestListAction {
return RefreshPullRequestListAction(findRepoInteractor, getPullRequestsInteractor, presenter)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.duxtinto.intellij.plugin.github.codereviews.di.impl.dagger.modules.idea.actions

import com.duxtinto.intellij.plugin.github.codereviews.di.qualifiers.Reviewee
import com.duxtinto.intellij.plugin.github.codereviews.di.qualifiers.Reviewer
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.presentation.toolwindow.toolbar.RevieweeToolbarFactory
import com.duxtinto.intellij.plugin.github.codereviews.ide.acl.presentation.toolwindow.toolbar.reviewee.RefreshPullRequestListAction
import com.duxtinto.intellij.plugin.github.codereviews.presentation.Toolbar
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.AnAction
import dagger.Module
import dagger.Provides

@Module
class IdeaReviewerActionModule {
@Provides
@Reviewer
fun provideRevieweeToolbarActions(
refreshPullRequestsAction: RefreshPullRequestListAction
): List<AnAction> {
return listOf(
refreshPullRequestsAction
)
}

@Provides
@Reviewer
fun provideToolbarFactory(
actionManager: ActionManager,
@Reviewee actions: @JvmSuppressWildcards List<AnAction>
): Toolbar.Factory {
return RevieweeToolbarFactory(actionManager, actions)
}

@Provides
@Reviewer
fun provideToolbar(@Reviewee toolbar: Toolbar.Factory): Toolbar {
return toolbar.create()
}
}
Loading

0 comments on commit a6c2f6b

Please sign in to comment.