diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/model/Team.java b/src/main/java/io/pakland/mdas/githubstats/domain/model/Team.java index d953d958..68d5fa07 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/model/Team.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/model/Team.java @@ -26,6 +26,9 @@ public class Team { @Column(name = "member_url") private String memberUrl; + @Column + private String name; + @ManyToOne(fetch = FetchType.LAZY) private Organization organization; @@ -50,6 +53,14 @@ public class Team { ) private List queries = new ArrayList<>(); + public void setName(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + public void addUser(User user) { users.add(user); user.setTeam(this); diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/ports/TeamRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/ports/TeamRepository.java index 44d52729..de26cd0b 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/ports/TeamRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/ports/TeamRepository.java @@ -4,10 +4,13 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + /** * Add jdoc about the rep */ @Repository public interface TeamRepository extends JpaRepository { + Optional findTeamByName(String name); } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java b/src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java new file mode 100644 index 00000000..34aa0c2f --- /dev/null +++ b/src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java @@ -0,0 +1,27 @@ +package io.pakland.mdas.githubstats.domain.service; + +import io.pakland.mdas.githubstats.domain.model.Organization; +import io.pakland.mdas.githubstats.domain.model.Team; +import io.pakland.mdas.githubstats.domain.ports.TeamRepository; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class GetOrganizationFromTeamName { + private final TeamRepository teamRepository; + + public GetOrganizationFromTeamName(TeamRepository teamRepo) { + this.teamRepository = teamRepo; + } + + public Organization execute(String teamName) { + Optional maybeTeam = teamRepository.findTeamByName(teamName); + if (maybeTeam.isEmpty()) { + // TODO: Add exception + return null; + } + + return maybeTeam.get().getOrganization(); + } +} diff --git a/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromIdTest.java b/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromIdTest.java index 6d031c38..753805ba 100644 --- a/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromIdTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromIdTest.java @@ -13,23 +13,21 @@ public class GetOrganizationFromIdTest { @Test public void givenValidId_shouldReturnTrue() { - OrganizationRepository orgMock = Mockito.mock(OrganizationRepository.class); - Mockito.when(orgMock.findById(Mockito.anyLong())).thenReturn(Optional.of(new Organization())); + OrganizationRepository organizationMock = Mockito.mock(OrganizationRepository.class); + Mockito.when(organizationMock.findById(Mockito.anyLong())).thenReturn(Optional.of(new Organization())); - GetOrganizationFromId useCase = new GetOrganizationFromId(orgMock); - boolean res = useCase.execute(1L); + GetOrganizationFromId useCase = new GetOrganizationFromId(organizationMock); - assertTrue(res); + assertTrue(useCase.execute(1L)); } @Test public void givenInvalidId_shouldReturnFalse() { - OrganizationRepository orgMock = Mockito.mock(OrganizationRepository.class); - Mockito.when(orgMock.findById(Mockito.anyLong())).thenReturn(Optional.empty()); + OrganizationRepository organizationMock = Mockito.mock(OrganizationRepository.class); + Mockito.when(organizationMock.findById(Mockito.anyLong())).thenReturn(Optional.empty()); - GetOrganizationFromId useCase = new GetOrganizationFromId(orgMock); - boolean res = useCase.execute(1L); + GetOrganizationFromId useCase = new GetOrganizationFromId(organizationMock); - assertFalse(res); + assertFalse(useCase.execute(1L)); } } diff --git a/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java b/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java new file mode 100644 index 00000000..55b0db20 --- /dev/null +++ b/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java @@ -0,0 +1,44 @@ +package io.pakland.mdas.githubstats.domain.service; + +import io.pakland.mdas.githubstats.domain.model.Organization; +import io.pakland.mdas.githubstats.domain.model.Team; +import io.pakland.mdas.githubstats.domain.ports.TeamRepository; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class GetOrganizationFromTeamNameTest { + @Test + public void givenTeamName_shouldReturnOrganizationFound() { + Organization organization = new Organization(); + organization.setId(1L); + Team team = new Team(); + team.setOrganization(organization); + + TeamRepository teamRepoMock = Mockito.mock(TeamRepository.class); + Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.of(team)); + + GetOrganizationFromTeamName useCase = new GetOrganizationFromTeamName(teamRepoMock); + Organization result = useCase.execute("some team"); + + Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); + assertEquals(result.getId(), organization.getId()); + } + + // Change for expecting an exception + @Test + public void givenTeamName_shouldReturnNull_ifTeamNotFound() { + TeamRepository teamRepoMock = Mockito.mock(TeamRepository.class); + Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.empty()); + + GetOrganizationFromTeamName useCase = new GetOrganizationFromTeamName(teamRepoMock); + Organization result = useCase.execute("some team"); + + Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); + assertNull(result); + } +}