@startuml
skinparam DefaultFontSize 20

participant ":Test"
participant ":US007CreateGroupAccountController"
participant ":US007CreateGroupAccountService"
participant ":PersonRepository"
participant "person:Person"
participant ":GroupsRepository"
participant "group:Group"
participant ":AccountsRepository"
participant ":Account"

== Act ==

":Test" -> ":US007CreateGroupAccountController" : accountCreated = createGroupAccount\n(personEmail, groupDescription, \naccountDenomination, accountDescription)
activate ":US007CreateGroupAccountController"  #FFBBBB

":US007CreateGroupAccountController" -> ":US007CreateGroupAccountService" : accountCreated = createGroupAccount\n(personEmail, groupDescription, \naccountDenomination, accountDescription)
activate ":US007CreateGroupAccountService"  #FFBBBB

":US007CreateGroupAccountService" -> ":PersonRepository" : person = findPersonByEmail (personEmail)
activate ":PersonRepository"  #FFBBBB
deactivate ":PersonRepository"  #FFBBBB

":US007CreateGroupAccountService" -> "person:Person" : personID = getID ()
activate "person:Person"  #FFBBBB
deactivate "person:Person"  #FFBBBB

":US007CreateGroupAccountService" -> ":GroupsRepository" : group = findGroupByID (groupID)
activate ":GroupsRepository"  #FFBBBB
deactivate ":GroupsRepository"  #FFBBBB

":US007CreateGroupAccountService" -> "group:Group" : personIsGroupAdmin = isGroupAdmin (personID)
activate "group:Group" #FFBBBB
deactivate "group:Group" #FFBBBB



":US007CreateGroupAccountService" -> ":AccountsRepository" : accountCreated = createAccount(groupID, denomination,description)
activate ":AccountsRepository" #FFBBBB

":AccountsRepository" -> ":AccountsRepository" : accountNotInRepository = \n isAccountIDOnRepository(accountDenomination, groupID)


create ":Account"
":AccountsRepository" -> ":Account" : new Account (accountDenomination, \n   accountDescription, groupID)

deactivate ":AccountsRepository" #FFBBBB
deactivate "group:Group" #FFBBBB
deactivate ":PersonRepository" #FFBBBB
deactivate ":GroupsRepository" #FFBBBB
deactivate ":US007CreateGroupAccountService"  #FFBBBB
deactivate ":US007CreateGroupAccountController" #FFBBBB

== Assert ==

":Test" -> ":Test" : assertTrue(accountCreated)

@enduml