(refs #241)Modify AccountService#getGroupMembers() to returns list of GroupMember instead of Tuple2

This commit is contained in:
takezoe
2014-03-06 16:17:41 +09:00
parent c65d80bc72
commit b641bfb56a
8 changed files with 32 additions and 28 deletions

View File

@@ -11,6 +11,7 @@ import org.scalatra.i18n.Messages
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.{FileMode, Constants} import org.eclipse.jgit.lib.{FileMode, Constants}
import org.eclipse.jgit.dircache.DirCache import org.eclipse.jgit.dircache.DirCache
import model.GroupMember
class AccountController extends AccountControllerBase class AccountController extends AccountControllerBase
with AccountService with RepositoryService with ActivityService with WikiService with LabelsService with AccountService with RepositoryService with ActivityService with WikiService with LabelsService
@@ -94,8 +95,8 @@ trait AccountControllerBase extends AccountManagementControllerBase {
// Members // Members
case "members" if(account.isGroupAccount) => { case "members" if(account.isGroupAccount) => {
val members = getGroupMembers(account.userName) val members = getGroupMembers(account.userName)
_root_.account.html.members(account, members.map(_._1), _root_.account.html.members(account, members.map(_.userName),
context.loginAccount.exists(x => members.exists { case (userName, isManager) => userName == x.userName && isManager })) context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager }))
} }
// Repositories // Repositories
@@ -104,7 +105,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
_root_.account.html.repositories(account, _root_.account.html.repositories(account,
if(account.isGroupAccount) Nil else getGroupsByUserName(userName), if(account.isGroupAccount) Nil else getGroupsByUserName(userName),
getVisibleRepositories(context.loginAccount, baseUrl, Some(userName)), getVisibleRepositories(context.loginAccount, baseUrl, Some(userName)),
context.loginAccount.exists(x => members.exists { case (userName, isManager) => userName == x.userName && isManager })) context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager }))
} }
} }
} getOrElse NotFound } getOrElse NotFound
@@ -182,7 +183,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
} }
get("/groups/new")(usersOnly { get("/groups/new")(usersOnly {
account.html.group(None, List((context.loginAccount.get.userName, true))) account.html.group(None, List(GroupMember("", context.loginAccount.get.userName, true)))
}) })
post("/groups/new", newGroupForm)(usersOnly { form => post("/groups/new", newGroupForm)(usersOnly { form =>
@@ -265,8 +266,8 @@ trait AccountControllerBase extends AccountManagementControllerBase {
// Add collaborators for group repository // Add collaborators for group repository
if(ownerAccount.isGroupAccount){ if(ownerAccount.isGroupAccount){
getGroupMembers(form.owner).foreach { case (userName, isManager) => getGroupMembers(form.owner).foreach { member =>
addCollaborator(form.owner, form.name, userName) addCollaborator(form.owner, form.name, member.userName)
} }
} }

View File

@@ -70,10 +70,10 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
get("/admin/users")(adminOnly { get("/admin/users")(adminOnly {
val includeRemoved = params.get("includeRemoved").map(_.toBoolean).getOrElse(false) val includeRemoved = params.get("includeRemoved").map(_.toBoolean).getOrElse(false)
val users = getAllUsers(includeRemoved) val users = getAllUsers(includeRemoved)
val members = users.collect { case account if(account.isGroupAccount) => val members = users.collect { case account if(account.isGroupAccount) =>
account.userName -> getGroupMembers(account.userName).map(_._1) account.userName -> getGroupMembers(account.userName).map(_.userName)
}.toMap }.toMap
admin.users.html.list(users, members, includeRemoved) admin.users.html.list(users, members, includeRemoved)
}) })
@@ -181,9 +181,10 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
} }
}) })
post("/admin/users/_usercheck")(adminOnly { // TODO Move to other generic controller?
post("/admin/users/_usercheck"){
getAccountByUserName(params("userName")).isDefined getAccountByUserName(params("userName")).isDefined
}) }
private def members: Constraint = new Constraint(){ private def members: Constraint = new Constraint(){
override def validate(name: String, value: String, messages: Messages): Option[String] = { override def validate(name: String, value: String, messages: Messages): Option[String] = {

View File

@@ -129,11 +129,10 @@ trait AccountService {
} }
} }
def getGroupMembers(groupName: String): List[(String, Boolean)] = def getGroupMembers(groupName: String): List[GroupMember] =
Query(GroupMembers) Query(GroupMembers)
.filter(_.groupName is groupName.bind) .filter(_.groupName is groupName.bind)
.sortBy(_.userName) .sortBy(_.userName)
.map(m => m.userName ~ m.isManager)
.list .list
def getGroupsByUserName(userName: String): List[String] = def getGroupsByUserName(userName: String): List[String] =

View File

@@ -204,7 +204,7 @@ trait RepositoryService { self: AccountService =>
private def getRepositoryManagers(userName: String): Seq[String] = private def getRepositoryManagers(userName: String): Seq[String] =
if(getAccountByUserName(userName).exists(_.isGroupAccount)){ if(getAccountByUserName(userName).exists(_.isGroupAccount)){
getGroupMembers(userName).filter(_._2).map(_._1) getGroupMembers(userName).collect { case x if(x.isManager) => x.userName }
} else { } else {
Seq(userName) Seq(userName)
} }

View File

@@ -40,8 +40,8 @@ trait OwnerAuthenticator { self: ControllerBase with RepositoryService with Acco
context.loginAccount match { context.loginAccount match {
case Some(x) if(x.isAdmin) => action(repository) case Some(x) if(x.isAdmin) => action(repository)
case Some(x) if(repository.owner == x.userName) => action(repository) case Some(x) if(repository.owner == x.userName) => action(repository)
case Some(x) if(getGroupMembers(repository.owner).exists { case Some(x) if(getGroupMembers(repository.owner).exists { member =>
case (userName, isManager) => userName == x.userName && isManager == true member.userName == x.userName && member.isManager == true
}) => action(repository) }) => action(repository)
case _ => Unauthorized() case _ => Unauthorized()
} }
@@ -170,7 +170,9 @@ trait GroupManagerAuthenticator { self: ControllerBase with AccountService =>
{ {
defining(request.paths){ paths => defining(request.paths){ paths =>
context.loginAccount match { context.loginAccount match {
case Some(x) if(getGroupMembers(paths(0)).exists { case (userName, isManager) => userName == x.userName && isManager }) => action case Some(x) if(getGroupMembers(paths(0)).exists { member =>
member.userName == x.userName && member.isManager
}) => action
case _ => Unauthorized() case _ => Unauthorized()
} }
} }

View File

@@ -1,4 +1,4 @@
@(account: Option[model.Account], members: List[(String, Boolean)])(implicit context: app.Context) @(account: Option[model.Account], members: List[model.GroupMember])(implicit context: app.Context)
@import context._ @import context._
@import view.helpers._ @import view.helpers._
@html.main(if(account.isEmpty) "Create group" else "Edit group"){ @html.main(if(account.isEmpty) "Create group" else "Edit group"){
@@ -32,7 +32,7 @@
</ul> </ul>
@helper.html.account("memberName", 200) @helper.html.account("memberName", 200)
<input type="button" class="btn" value="Add" id="addMember"/> <input type="button" class="btn" value="Add" id="addMember"/>
<input type="hidden" id="members" name="members" value="@members.map(x => x._1 + ":" + x._2).mkString(",")"/> <input type="hidden" id="members" name="members" value="@members.map(member => member.userName + ":" + member.isManager).mkString(",")"/>
<div> <div>
<span class="error" id="error-members"></span> <span class="error" id="error-members"></span>
</div> </div>
@@ -102,8 +102,8 @@ $(function(){
return confirm('Once you delete this group, there is no going back.\nAre you sure?'); return confirm('Once you delete this group, there is no going back.\nAre you sure?');
}); });
@members.map { case (userName, isManager) => @members.map { member =>
addMemberHTML('@userName', @isManager); addMemberHTML('@member.userName', @member.isManager);
} }
function addMemberHTML(userName, isManager){ function addMemberHTML(userName, isManager){

View File

@@ -1,4 +1,4 @@
@(account: Option[model.Account], members: List[(String, Boolean)])(implicit context: app.Context) @(account: Option[model.Account], members: List[model.GroupMember])(implicit context: app.Context)
@import context._ @import context._
@import view.helpers._ @import view.helpers._
@html.main(if(account.isEmpty) "New Group" else "Update Group"){ @html.main(if(account.isEmpty) "New Group" else "Update Group"){
@@ -38,7 +38,7 @@
</ul> </ul>
@helper.html.account("memberName", 200) @helper.html.account("memberName", 200)
<input type="button" class="btn" value="Add" id="addMember"/> <input type="button" class="btn" value="Add" id="addMember"/>
<input type="hidden" id="members" name="members" value="@members.map(x => x._1 + ":" + x._2).mkString(",")"/> <input type="hidden" id="members" name="members" value="@members.map(member => member.userName + ":" + member.isManager).mkString(",")"/>
<div> <div>
<span class="error" id="error-members"></span> <span class="error" id="error-members"></span>
</div> </div>
@@ -97,8 +97,8 @@ $(function(){
return !(e.keyCode == 13); return !(e.keyCode == 13);
}); });
@members.map { case (userName, isManager) => @members.map { member =>
addMemberHTML('@userName', @isManager); addMemberHTML('@member.userName', @member.isManager);
} }
function addMemberHTML(userName, isManager){ function addMemberHTML(userName, isManager){

View File

@@ -2,8 +2,9 @@ package service
import org.specs2.mutable.Specification import org.specs2.mutable.Specification
import java.util.Date import java.util.Date
import model.GroupMember
class AccountServiceServiceSpec extends Specification with ServiceSpecBase { class AccountServiceSpec extends Specification with ServiceSpecBase {
"AccountService" should { "AccountService" should {
val RootMailAddress = "root@localhost" val RootMailAddress = "root@localhost"
@@ -65,7 +66,7 @@ class AccountServiceServiceSpec extends Specification with ServiceSpecBase {
AccountService.updateGroupMembers(group1, List((user1, true))) AccountService.updateGroupMembers(group1, List((user1, true)))
AccountService.getGroupMembers(group1) must_== List((user1, true)) AccountService.getGroupMembers(group1) must_== List(GroupMember(group1, user1, true))
AccountService.getGroupsByUserName(user1) must_== List(group1) AccountService.getGroupsByUserName(user1) must_== List(group1)
AccountService.updateGroupMembers(group1, Nil) AccountService.updateGroupMembers(group1, Nil)