From aa415fbb55a664bc91e3588fa35ad30295ce8db2 Mon Sep 17 00:00:00 2001 From: Miquel de Domingo Date: Wed, 30 Nov 2022 16:17:01 +0100 Subject: [PATCH 1/3] feat: get organization from a team name --- .../mdas/githubstats/domain/model/Team.java | 11 +++++ .../domain/ports/TeamRepository.java | 3 ++ .../service/GetOrganizationFromTeamName.java | 25 +++++++++++ .../GetOrganizationFromTeamNameTest.java | 44 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java create mode 100644 src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java 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..6757b55f --- /dev/null +++ b/src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java @@ -0,0 +1,25 @@ +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 java.util.Optional; + +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/GetOrganizationFromTeamNameTest.java b/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java new file mode 100644 index 00000000..576f31f2 --- /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 org = new Organization(); + org.setId(1L); + Team t = new Team(); + t.setOrganization(org); + + TeamRepository teamRepoMock = Mockito.mock(TeamRepository.class); + Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.of(t)); + + GetOrganizationFromTeamName useCase = new GetOrganizationFromTeamName(teamRepoMock); + Organization res = useCase.execute("some team"); + + Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); + assertEquals(res.getId(), org.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 res = useCase.execute("some team"); + + Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); + assertNull(res); + } +} From 13195e51ad360c553a229cf6db503a75b97a3b54 Mon Sep 17 00:00:00 2001 From: Miquel de Domingo Date: Wed, 30 Nov 2022 18:16:22 +0100 Subject: [PATCH 2/3] refactor: rename variables --- .../service/GetOrganizationFromIdTest.java | 18 ++++++++---------- .../GetOrganizationFromTeamNameTest.java | 18 +++++++++--------- 2 files changed, 17 insertions(+), 19 deletions(-) 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 index 576f31f2..55b0db20 100644 --- a/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamNameTest.java @@ -14,19 +14,19 @@ public class GetOrganizationFromTeamNameTest { @Test public void givenTeamName_shouldReturnOrganizationFound() { - Organization org = new Organization(); - org.setId(1L); - Team t = new Team(); - t.setOrganization(org); + 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(t)); + Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.of(team)); GetOrganizationFromTeamName useCase = new GetOrganizationFromTeamName(teamRepoMock); - Organization res = useCase.execute("some team"); + Organization result = useCase.execute("some team"); Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); - assertEquals(res.getId(), org.getId()); + assertEquals(result.getId(), organization.getId()); } // Change for expecting an exception @@ -36,9 +36,9 @@ public void givenTeamName_shouldReturnNull_ifTeamNotFound() { Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.empty()); GetOrganizationFromTeamName useCase = new GetOrganizationFromTeamName(teamRepoMock); - Organization res = useCase.execute("some team"); + Organization result = useCase.execute("some team"); Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); - assertNull(res); + assertNull(result); } } From 5ecec0bbf2ce9f04f696877e18710182fbe9b47d Mon Sep 17 00:00:00 2001 From: Miquel de Domingo Date: Wed, 30 Nov 2022 18:17:10 +0100 Subject: [PATCH 3/3] fix: add missing `Service` annotation --- .../githubstats/domain/service/GetOrganizationFromTeamName.java | 2 ++ 1 file changed, 2 insertions(+) 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 index 6757b55f..34aa0c2f 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/service/GetOrganizationFromTeamName.java @@ -3,9 +3,11 @@ 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;