diff --git a/src/main/java/io/pakland/mdas/githubstats/FetchUsersFromTeam.java b/src/main/java/io/pakland/mdas/githubstats/FetchUsersFromTeam.java new file mode 100644 index 00000000..941bc252 --- /dev/null +++ b/src/main/java/io/pakland/mdas/githubstats/FetchUsersFromTeam.java @@ -0,0 +1,20 @@ +package io.pakland.mdas.githubstats; + +import io.pakland.mdas.githubstats.application.dto.UserDTO; +import io.pakland.mdas.githubstats.application.exceptions.HttpException; +import io.pakland.mdas.githubstats.domain.repository.UserExternalRepository; + +import java.util.List; + +public class FetchUsersFromTeam { + private UserExternalRepository userExternalRepository; + + + public FetchUsersFromTeam(UserExternalRepository userExternalRepository) { + this.userExternalRepository = userExternalRepository; + } + + public List execute(Integer organizationId, Integer teamId) throws HttpException { + return this.userExternalRepository.fetchUsersFromTeam(organizationId, teamId); + } +} diff --git a/src/main/java/io/pakland/mdas/githubstats/application/FetchAvailableOrganizations.java b/src/main/java/io/pakland/mdas/githubstats/application/FetchAvailableOrganizations.java index dff484ea..15183f2a 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/FetchAvailableOrganizations.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/FetchAvailableOrganizations.java @@ -8,13 +8,13 @@ public class FetchAvailableOrganizations { - private OrganizationExternalRepository organizationRESTRepository; + private final OrganizationExternalRepository organizationRESTRepository; public FetchAvailableOrganizations(OrganizationExternalRepository organizationRESTRepository) { this.organizationRESTRepository = organizationRESTRepository; } - public List fetch() throws HttpException { + public List execute() throws HttpException { return organizationRESTRepository.fetchAvailableOrganizations(); } } diff --git a/src/main/java/io/pakland/mdas/githubstats/application/FetchRepositoriesFromTeam.java b/src/main/java/io/pakland/mdas/githubstats/application/FetchRepositoriesFromTeam.java new file mode 100644 index 00000000..e0f9f950 --- /dev/null +++ b/src/main/java/io/pakland/mdas/githubstats/application/FetchRepositoriesFromTeam.java @@ -0,0 +1,20 @@ +package io.pakland.mdas.githubstats.application; + +import io.pakland.mdas.githubstats.application.dto.RepositoryDTO; +import io.pakland.mdas.githubstats.application.exceptions.HttpException; +import io.pakland.mdas.githubstats.domain.repository.RepositoryExternalRepository; + +import java.util.List; + +public class FetchRepositoriesFromTeam { + + private final RepositoryExternalRepository repositoryExternalRepository; + + public FetchRepositoriesFromTeam(RepositoryExternalRepository repositoryExternalRepository) { + this.repositoryExternalRepository = repositoryExternalRepository; + } + + public List execute(Integer organizationId, Integer teamId) throws HttpException { + return this.repositoryExternalRepository.fetchTeamRepositories(organizationId, teamId); + } +} diff --git a/src/main/java/io/pakland/mdas/githubstats/application/FetchTeamsFromOrganization.java b/src/main/java/io/pakland/mdas/githubstats/application/FetchTeamsFromOrganization.java index cea1a123..7d051131 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/FetchTeamsFromOrganization.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/FetchTeamsFromOrganization.java @@ -7,13 +7,13 @@ import java.util.List; public class FetchTeamsFromOrganization { - private TeamExternalRepository teamRESTRepository; + private final TeamExternalRepository teamRESTRepository; public FetchTeamsFromOrganization(TeamExternalRepository teamRESTRepository) { this.teamRESTRepository = teamRESTRepository; } - public List execute(String organizationName) throws HttpException { - return teamRESTRepository.fetchTeamsFromOrganization(organizationName); + public List execute(Integer organizationId) throws HttpException { + return teamRESTRepository.fetchTeamsFromOrganization(organizationId); } } diff --git a/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromId.java b/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromId.java index 4e81db3b..2b0e2d69 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromId.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromId.java @@ -20,7 +20,7 @@ public GetOrganizationFromId(OrganizationRepository organizationRepository) { // For tests sake, we return boolean to know if the code works properly @Transactional(readOnly = true) - public boolean execute(Long id) throws OrganizationNotFound { + public boolean execute(Integer id) throws OrganizationNotFound { Optional org = organizationRepository.findById(id); if (org.isPresent()) { return true; diff --git a/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamName.java b/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamName.java index dbf48a58..5a62d790 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamName.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamName.java @@ -17,7 +17,7 @@ public GetOrganizationFromTeamName(TeamRepository teamRepo) { } public Organization execute(String teamName) throws TeamNotFound { - Optional maybeTeam = teamRepository.findTeamByName(teamName); + Optional maybeTeam = teamRepository.findTeamBySlug(teamName); if (maybeTeam.isEmpty()) { throw new TeamNotFound(teamName); } diff --git a/src/main/java/io/pakland/mdas/githubstats/application/exceptions/OrganizationNotFound.java b/src/main/java/io/pakland/mdas/githubstats/application/exceptions/OrganizationNotFound.java index e63cee81..e2592df7 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/exceptions/OrganizationNotFound.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/exceptions/OrganizationNotFound.java @@ -1,7 +1,7 @@ package io.pakland.mdas.githubstats.application.exceptions; public class OrganizationNotFound extends Exception { - public OrganizationNotFound(Long id) { + public OrganizationNotFound(Integer id) { super("Organization with id: " + id + " not found"); } } diff --git a/src/main/java/io/pakland/mdas/githubstats/application/mappers/RepositoryMapper.java b/src/main/java/io/pakland/mdas/githubstats/application/mappers/RepositoryMapper.java index e4a256cd..7292f794 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/mappers/RepositoryMapper.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/mappers/RepositoryMapper.java @@ -5,6 +5,6 @@ public class RepositoryMapper { public static Repository dtoToEntity(RepositoryDTO dto) { - return Repository.builder().id(dto.getId().longValue()).name(dto.getName()).build(); + return Repository.builder().id(dto.getId()).name(dto.getName()).build(); } } diff --git a/src/main/java/io/pakland/mdas/githubstats/application/mappers/TeamMapper.java b/src/main/java/io/pakland/mdas/githubstats/application/mappers/TeamMapper.java index aa32235c..7c00ed3c 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/mappers/TeamMapper.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/mappers/TeamMapper.java @@ -5,6 +5,6 @@ public final class TeamMapper { public static Team dtoToEntity(TeamDTO teamDTO) { - return Team.builder().id(teamDTO.getId().longValue()).name(teamDTO.getName()).slug(teamDTO.getSlug()).build(); + return Team.builder().id(teamDTO.getId()).slug(teamDTO.getSlug()).build(); } } diff --git a/src/main/java/io/pakland/mdas/githubstats/application/mappers/UserMapper.java b/src/main/java/io/pakland/mdas/githubstats/application/mappers/UserMapper.java index 0166e718..b383740a 100644 --- a/src/main/java/io/pakland/mdas/githubstats/application/mappers/UserMapper.java +++ b/src/main/java/io/pakland/mdas/githubstats/application/mappers/UserMapper.java @@ -5,6 +5,6 @@ public class UserMapper { public static User dtoToEntity(UserDTO dto) { - return User.builder().id(dto.getId().longValue()).login(dto.getLogin()).build(); + return User.builder().id(dto.getId()).login(dto.getLogin()).build(); } } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/Comment.java b/src/main/java/io/pakland/mdas/githubstats/domain/Comment.java index 1e799847..11f6c9b2 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/Comment.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/Comment.java @@ -16,7 +16,7 @@ public class Comment { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; @ManyToOne(fetch = FetchType.LAZY) private UserReview userReview; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java b/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java index 39aad848..32653412 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/Commit.java @@ -17,7 +17,7 @@ public class Commit { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; @ManyToOne(fetch = FetchType.LAZY) private User user; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/HistoricQueries.java b/src/main/java/io/pakland/mdas/githubstats/domain/HistoricQueries.java index 8b56c0d6..c73ebbc2 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/HistoricQueries.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/HistoricQueries.java @@ -14,7 +14,7 @@ public class HistoricQueries { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; @ManyToOne(fetch = FetchType.LAZY) private Team team; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/Organization.java b/src/main/java/io/pakland/mdas/githubstats/domain/Organization.java index f536bdb6..c59f3700 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/Organization.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/Organization.java @@ -19,7 +19,7 @@ public class Organization { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; private String name; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/PullRequest.java b/src/main/java/io/pakland/mdas/githubstats/domain/PullRequest.java index 7cdf398e..d4ee71de 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/PullRequest.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/PullRequest.java @@ -19,7 +19,7 @@ public class PullRequest { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; @OneToMany( mappedBy = "pullRequest", diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/Repository.java b/src/main/java/io/pakland/mdas/githubstats/domain/Repository.java index d148498a..6fa0076d 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/Repository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/Repository.java @@ -23,7 +23,7 @@ public class Repository { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; private String name; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/Team.java b/src/main/java/io/pakland/mdas/githubstats/domain/Team.java index a0b4e0d3..1962af69 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/Team.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/Team.java @@ -20,16 +20,13 @@ public class Team { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; private String slug; @Column(name = "member_url") private String memberUrl; - @Column - private String name; - @ManyToOne(fetch = FetchType.LAZY) private Organization organization; @@ -54,12 +51,12 @@ public class Team { ) private List queries = new ArrayList<>(); - public void setName(String name) { - this.name = name; + public void setSlug(String slug) { + this.slug = slug; } - public String getName() { - return this.name; + public String getSlug() { + return this.slug; } public void addUser(User user) { diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/User.java b/src/main/java/io/pakland/mdas/githubstats/domain/User.java index 7906e5c5..d1ffac7f 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/User.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/User.java @@ -23,7 +23,7 @@ public class User { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; private String login; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/UserReview.java b/src/main/java/io/pakland/mdas/githubstats/domain/UserReview.java index cf4cdcfa..1dc6a987 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/UserReview.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/UserReview.java @@ -19,7 +19,7 @@ public class UserReview { @Id @Column(updatable = false, nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + private Integer id; @ManyToOne(fetch = FetchType.LAZY) private User user; diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommentRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommentRepository.java index b4cf956e..fb90339a 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommentRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommentRepository.java @@ -9,5 +9,5 @@ */ @Repository -public interface CommentRepository extends JpaRepository { +public interface CommentRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommitRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommitRepository.java index 9a7d6687..6fc88db8 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommitRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/CommitRepository.java @@ -9,5 +9,5 @@ */ @Repository -public interface CommitRepository extends JpaRepository { +public interface CommitRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/HistoricQueriesRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/HistoricQueriesRepository.java index 986b9a1b..84467c03 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/HistoricQueriesRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/HistoricQueriesRepository.java @@ -3,5 +3,5 @@ import io.pakland.mdas.githubstats.domain.HistoricQueries; import org.springframework.data.jpa.repository.JpaRepository; -public interface HistoricQueriesRepository extends JpaRepository { +public interface HistoricQueriesRepository extends JpaRepository { } \ No newline at end of file diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/OrganizationRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/OrganizationRepository.java index b3dcd7d9..50b5578e 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/OrganizationRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/OrganizationRepository.java @@ -9,5 +9,5 @@ */ @Repository -public interface OrganizationRepository extends JpaRepository { +public interface OrganizationRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/PullRequestsRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/PullRequestsRepository.java index 7d3f7e9f..7aeb4fe4 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/PullRequestsRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/PullRequestsRepository.java @@ -10,5 +10,5 @@ @Repository -public interface PullRequestsRepository extends JpaRepository { +public interface PullRequestsRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryExternalRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryExternalRepository.java index 4368a910..29c8403a 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryExternalRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryExternalRepository.java @@ -6,5 +6,5 @@ import java.util.List; public interface RepositoryExternalRepository { - List fetchTeamRepositories(Integer orgId, Integer teamId) throws HttpException; + List fetchTeamRepositories(Integer organizationId, Integer teamId) throws HttpException; } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryRepository.java index e80eb056..0ed0fff3 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/RepositoryRepository.java @@ -3,10 +3,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -/** - * Add jdoc about the rep - */ - @Repository -public interface RepositoryRepository extends JpaRepository { +public interface RepositoryRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamExternalRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamExternalRepository.java index 813866bd..ec09f78d 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamExternalRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamExternalRepository.java @@ -7,6 +7,5 @@ import java.util.List; public interface TeamExternalRepository { - List fetchTeamsFromOrganization(String organizationName) throws HttpException; - List fetchMembersOfTeam(String orgName, String teamSlug) throws HttpException; + List fetchTeamsFromOrganization(Integer organizationId) throws HttpException; } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamRepository.java index 986d468b..dc83e6b6 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/TeamRepository.java @@ -11,6 +11,6 @@ */ @Repository -public interface TeamRepository extends JpaRepository { - Optional findTeamByName(String name); +public interface TeamRepository extends JpaRepository { + Optional findTeamBySlug(String name); } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserExternalRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserExternalRepository.java index 663ec207..ae25cb61 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserExternalRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserExternalRepository.java @@ -6,5 +6,5 @@ import java.util.List; public interface UserExternalRepository { - List fetchUsersFromTeam(String organizationName, String teamSlug) throws HttpException; + List fetchUsersFromTeam(Integer organizationId, Integer teamId) throws HttpException; } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserRepository.java index 02374e82..1e96fb79 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserRepository.java @@ -9,6 +9,6 @@ */ @Repository -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserReviewRepository.java b/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserReviewRepository.java index af1c4dd1..9783801c 100644 --- a/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserReviewRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/domain/repository/UserReviewRepository.java @@ -9,5 +9,5 @@ */ @Repository -public interface UserReviewRepository extends JpaRepository { +public interface UserReviewRepository extends JpaRepository { } diff --git a/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepository.java b/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepository.java index db572051..fc17571f 100644 --- a/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepository.java @@ -20,10 +20,10 @@ public TeamGitHubRepository(WebClientConfiguration webClientConfiguration) { } @Override - public List fetchTeamsFromOrganization(String organizationName) throws HttpException { + public List fetchTeamsFromOrganization(Integer organizationId) throws HttpException { try { return this.webClientConfiguration.getWebClient().get() - .uri(String.format("/orgs/%s/teams", organizationName)) + .uri(String.format("/orgs/%s/teams", organizationId)) .retrieve() .bodyToFlux(TeamDTO.class) .collectList() @@ -33,19 +33,4 @@ public List fetchTeamsFromOrganization(String organizationName) throws throw new HttpException(ex.getRawStatusCode(), ex.getMessage()); } } - - @Override - public List fetchMembersOfTeam(String orgName, String teamSlug) throws HttpException { - try { - return this.webClientConfiguration.getWebClient().get() - .uri(String.format("/orgs/%s/teams/%s/members", orgName, teamSlug)) - .retrieve() - .bodyToFlux(UserDTO.class) - .collectList() - .block(); - } catch (WebClientResponseException ex) { - logger.error(ex.toString()); - throw new HttpException(ex.getRawStatusCode(), ex.getMessage()); - } - } } diff --git a/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepository.java b/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepository.java index d865cfed..443f5d2a 100644 --- a/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepository.java +++ b/src/main/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepository.java @@ -21,10 +21,10 @@ public UserGitHubRepository(WebClientConfiguration webClientConfiguration) { } @Override - public List fetchUsersFromTeam(String organizationName, String teamSlug) throws HttpException { + public List fetchUsersFromTeam(Integer organizationId, Integer teamId) throws HttpException { try { return this.webClientConfiguration.getWebClient().get() - .uri(String.format("/orgs/%s/teams/%s/members", organizationName, teamSlug)) + .uri(String.format("/orgs/%s/teams/%s/members", organizationId, teamId)) .retrieve() .bodyToFlux(UserDTO.class) .collectList() diff --git a/src/main/java/io/pakland/mdas/githubstats/infrastructure/shell/controller/UserOptionController.java b/src/main/java/io/pakland/mdas/githubstats/infrastructure/shell/controller/UserOptionController.java index 88220fa8..f7ea48cc 100644 --- a/src/main/java/io/pakland/mdas/githubstats/infrastructure/shell/controller/UserOptionController.java +++ b/src/main/java/io/pakland/mdas/githubstats/infrastructure/shell/controller/UserOptionController.java @@ -1,23 +1,17 @@ package io.pakland.mdas.githubstats.infrastructure.shell.controller; +import io.pakland.mdas.githubstats.FetchUsersFromTeam; import io.pakland.mdas.githubstats.application.FetchAvailableOrganizations; +import io.pakland.mdas.githubstats.application.FetchRepositoriesFromTeam; import io.pakland.mdas.githubstats.application.FetchTeamsFromOrganization; -import io.pakland.mdas.githubstats.application.dto.OrganizationDTO; -import io.pakland.mdas.githubstats.application.dto.RepositoryDTO; -import io.pakland.mdas.githubstats.application.dto.TeamDTO; -import io.pakland.mdas.githubstats.application.dto.UserDTO; +import io.pakland.mdas.githubstats.application.dto.*; import io.pakland.mdas.githubstats.application.exceptions.HttpException; import io.pakland.mdas.githubstats.application.mappers.RepositoryMapper; import io.pakland.mdas.githubstats.application.mappers.TeamMapper; import io.pakland.mdas.githubstats.application.mappers.UserMapper; -import io.pakland.mdas.githubstats.domain.Organization; -import io.pakland.mdas.githubstats.domain.Repository; -import io.pakland.mdas.githubstats.domain.Team; -import io.pakland.mdas.githubstats.domain.User; -import io.pakland.mdas.githubstats.infrastructure.github.repository.WebClientConfiguration; -import io.pakland.mdas.githubstats.infrastructure.github.repository.OrganizationGitHubRepository; -import io.pakland.mdas.githubstats.infrastructure.github.repository.RepositoryGitHubRepository; -import io.pakland.mdas.githubstats.infrastructure.github.repository.TeamGitHubRepository; +import io.pakland.mdas.githubstats.domain.*; +import io.pakland.mdas.githubstats.domain.repository.UserExternalRepository; +import io.pakland.mdas.githubstats.infrastructure.github.repository.*; import io.pakland.mdas.githubstats.domain.repository.OrganizationExternalRepository; import io.pakland.mdas.githubstats.domain.repository.RepositoryExternalRepository; import io.pakland.mdas.githubstats.domain.repository.TeamExternalRepository; @@ -35,69 +29,83 @@ public class UserOptionController { Logger logger = LoggerFactory.getLogger(UserOptionController.class); private UserOptionRequest userOptionRequest; - private OrganizationExternalRepository organizationRESTRepository; - private TeamExternalRepository teamRESTRepository; - private RepositoryExternalRepository repositoryRESTRepository; + private OrganizationExternalRepository organizationExternalRepository; + private TeamExternalRepository teamExternalRepository; + + private UserExternalRepository userExternalRepository; + private RepositoryExternalRepository repositoryExternalRepository; public UserOptionController(UserOptionRequest userOptionRequest) { this.userOptionRequest = userOptionRequest; WebClientConfiguration webClientConfiguration = new WebClientConfiguration( "https://api.github.com", userOptionRequest.getApiKey()); - this.organizationRESTRepository = new OrganizationGitHubRepository(webClientConfiguration); - this.teamRESTRepository = new TeamGitHubRepository(webClientConfiguration); - this.repositoryRESTRepository = new RepositoryGitHubRepository(webClientConfiguration); + this.organizationExternalRepository = new OrganizationGitHubRepository(webClientConfiguration); + this.teamExternalRepository = new TeamGitHubRepository(webClientConfiguration); + this.userExternalRepository = new UserGitHubRepository(webClientConfiguration); + this.repositoryExternalRepository = new RepositoryGitHubRepository(webClientConfiguration); } public void execute() { try { // dto coming from the backend List organizationDTOList = new FetchAvailableOrganizations( - this.organizationRESTRepository).fetch(); + this.organizationExternalRepository).execute(); // entities that we will store in the database - List organizations = new ArrayList<>(); + List userAvaliableOrganizationList = new ArrayList<>(); for (OrganizationDTO organizationDTO : organizationDTOList) { // fetch the organization Organization organization = new Organization(); - organization.setId(organizationDTO.getId().longValue()); + organization.setId(organizationDTO.getId()); organization.setName(organizationDTO.getLogin()); // with the organization, get the teams and map them to the entities - List teams = fetchTeamsFromOrganization(organizationDTO.getLogin()); - organization.setTeams(teams); - organizations.add(organization); - + List teams = fetchTeamsFromOrganization(organization.getId()); for (Team team : teams) { // obtain the members of each team - List users = fetchUsersFromTeam(organizationDTO.getLogin(), - team.getSlug()); - team.setUsers(users); + List users = fetchUsersFromTeam(organization.getId(), + team.getId()); // also obtain the repositories for each team List repositories = fetchRepositoriesFromTeam( - organizationDTO.getId(), team.getId().intValue()); + organization.getId(), team.getId()); + for (Repository repository : repositories) { + //TODO: obtain pull requests + List pullRequests = fetchPullRequestsFromRepository(); + //TODO: for each pr: + // TODO: if the user of the PR belongs to the team, increment prs_executed. + // TODO: fetch commits from PR + //TODO: add + } + team.setUsers(users); + team.setRepositories(repositories); } + userAvaliableOrganizationList.add(organization); } } catch (HttpException e) { throw new RuntimeException(e); } } - private List fetchTeamsFromOrganization(String organization) throws HttpException { + private List fetchTeamsFromOrganization(Integer organizationId) throws HttpException { List teamDTOList = new FetchTeamsFromOrganization( - teamRESTRepository - ).execute(organization); + teamExternalRepository + ).execute(organizationId); // we only need the teams of the current user return teamDTOList.stream().map(TeamMapper::dtoToEntity).toList(); } - private List fetchUsersFromTeam(String orgLogin, String teamSlug) throws HttpException { - List users = teamRESTRepository.fetchMembersOfTeam(orgLogin, teamSlug); + private List fetchUsersFromTeam(Integer organizationId, Integer teamId) throws HttpException { + List users = new FetchUsersFromTeam(userExternalRepository).execute(organizationId, teamId); return users.stream().map(UserMapper::dtoToEntity).toList(); } - private List fetchRepositoriesFromTeam(Integer orgId, Integer teamId) + private List fetchRepositoriesFromTeam(Integer organizationId, Integer teamId) throws HttpException { - List repositoryDTOS = repositoryRESTRepository.fetchTeamRepositories( - orgId, teamId); + List repositoryDTOS = new FetchRepositoriesFromTeam(repositoryExternalRepository).execute(organizationId, teamId); return repositoryDTOS.stream().map(RepositoryMapper::dtoToEntity).toList(); } + + private List fetchPullRequestsFromRepository() + throws HttpException { + return null; + } } diff --git a/src/main/resources/db/changelog/changes/000_initial_schema.yaml b/src/main/resources/db/changelog/changes/000_initial_schema.yaml index 866a332b..3c111760 100644 --- a/src/main/resources/db/changelog/changes/000_initial_schema.yaml +++ b/src/main/resources/db/changelog/changes/000_initial_schema.yaml @@ -6,13 +6,13 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: comment_pkey name: id - type: BIGINT + type: INT - column: constraints: nullable: false @@ -20,7 +20,7 @@ databaseChangeLog: type: INTEGER - column: name: user_review_id - type: BIGINT + type: INT tableName: comment - changeSet: id: 1669767244074-2 @@ -29,13 +29,13 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: commit_pkey name: id - type: BIGINT + type: INT - column: constraints: nullable: false @@ -51,10 +51,10 @@ databaseChangeLog: type: INTEGER - column: name: pull_request_id - type: BIGINT + type: INT - column: name: user_id - type: BIGINT + type: INT tableName: commit - changeSet: id: 1669767244074-3 @@ -63,13 +63,13 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: historic_queries_pkey name: id - type: BIGINT + type: INT - column: constraints: nullable: false @@ -87,7 +87,7 @@ databaseChangeLog: type: VARCHAR(255) - column: name: team_id - type: BIGINT + type: INT tableName: historic_queries - changeSet: id: 1669767244074-4 @@ -96,13 +96,13 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: organization_pkey name: id - type: BIGINT + type: INT - column: name: name type: VARCHAR(255) @@ -117,16 +117,16 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: pull_request_pkey name: id - type: BIGINT + type: INT - column: name: repository_id - type: BIGINT + type: INT tableName: pull_request - changeSet: id: 1669767244074-6 @@ -135,13 +135,13 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: repository_pkey name: id - type: BIGINT + type: INT - column: name: commits_url type: VARCHAR(255) @@ -156,7 +156,7 @@ databaseChangeLog: type: VARCHAR(255) - column: name: team_id - type: BIGINT + type: INT tableName: repository - changeSet: id: 1669767244074-7 @@ -165,13 +165,13 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: team_pkey name: id - type: BIGINT + type: INT - column: name: member_url type: VARCHAR(255) @@ -180,7 +180,7 @@ databaseChangeLog: type: VARCHAR(255) - column: name: organization_id - type: BIGINT + type: INT tableName: team - changeSet: id: 1669767244074-8 @@ -189,19 +189,19 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: user_pkey name: id - type: BIGINT + type: INT - column: name: login type: VARCHAR(255) - column: name: team_id - type: BIGINT + type: INT tableName: user - changeSet: id: 1669767244074-9 @@ -210,19 +210,19 @@ databaseChangeLog: - createTable: columns: - column: - autoIncrement: true + autoIncrement: false constraints: nullable: false primaryKey: true primaryKeyName: user_review_pkey name: id - type: BIGINT + type: INT - column: name: pull_request_id - type: BIGINT + type: INT - column: name: user_id - type: BIGINT + type: INT tableName: user_review - changeSet: id: 1669767244074-10 diff --git a/src/main/resources/db/changelog/changes/001_add_team_name.yaml b/src/main/resources/db/changelog/changes/001_add_team_name.yaml deleted file mode 100644 index f256dd59..00000000 --- a/src/main/resources/db/changelog/changes/001_add_team_name.yaml +++ /dev/null @@ -1,11 +0,0 @@ -databaseChangeLog: -- changeSet: - id: 1669767244075-1 - author: Miquel de Domingo - changes: - - addColumn: - tableName: team - columns: - - column: - name: name - type: varchar(255) diff --git a/src/main/resources/db/sql/.gitkeep b/src/main/resources/db/sql/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/main/resources/db/sql/inserts.sql b/src/main/resources/db/sql/inserts.sql deleted file mode 100644 index 44cab1f6..00000000 --- a/src/main/resources/db/sql/inserts.sql +++ /dev/null @@ -1,5 +0,0 @@ -insert into organization (id, name, organization_url) -values - (1, 'montserrat', 'http://dummy'), - (2, 'montseny', 'http://dummy'), - (3, 'pedraforca', 'http://dummy'); diff --git a/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromIdTest.java b/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromIdTest.java index 3bb1f480..91da5319 100644 --- a/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromIdTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromIdTest.java @@ -15,22 +15,22 @@ public class GetOrganizationFromIdTest { @Test public void givenValidId_shouldReturnTrue() throws OrganizationNotFound { OrganizationRepository organizationMock = Mockito.mock(OrganizationRepository.class); - Mockito.when(organizationMock.findById(Mockito.anyLong())).thenReturn(Optional.of(new Organization())); + Mockito.when(organizationMock.findById(Mockito.anyInt())).thenReturn(Optional.of(new Organization())); GetOrganizationFromId useCase = new GetOrganizationFromId(organizationMock); - assertTrue(useCase.execute(1L)); + assertTrue(useCase.execute(1)); } @Test public void givenInvalidId_shouldThrowOrganizationNotFound() throws OrganizationNotFound { OrganizationRepository organizationMock = Mockito.mock(OrganizationRepository.class); - Mockito.when(organizationMock.findById(Mockito.anyLong())).thenReturn(Optional.empty()); + Mockito.when(organizationMock.findById(Mockito.anyInt())).thenReturn(Optional.empty()); GetOrganizationFromId useCase = new GetOrganizationFromId(organizationMock); assertThrows(OrganizationNotFound.class, () -> { - useCase.execute(1L); + useCase.execute(1); }); } } diff --git a/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamNameTest.java b/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamNameTest.java index 70d0bf2b..fe4ecc14 100644 --- a/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamNameTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/application/GetOrganizationFromTeamNameTest.java @@ -15,17 +15,17 @@ public class GetOrganizationFromTeamNameTest { @Test public void givenTeamName_shouldReturnOrganizationFound() throws TeamNotFound { Organization organization = new Organization(); - organization.setId(1L); + organization.setId(1); Team team = new Team(); team.setOrganization(organization); TeamRepository teamRepoMock = Mockito.mock(TeamRepository.class); - Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.of(team)); + Mockito.when(teamRepoMock.findTeamBySlug(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"); + Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamBySlug("some team"); assertEquals(result.getId(), organization.getId()); } @@ -33,13 +33,13 @@ public void givenTeamName_shouldReturnOrganizationFound() throws TeamNotFound { @Test public void givenTeamName_shouldThrowTeamNotFound_ifTeamNotFound() { TeamRepository teamRepoMock = Mockito.mock(TeamRepository.class); - Mockito.when(teamRepoMock.findTeamByName(Mockito.anyString())).thenReturn(Optional.empty()); + Mockito.when(teamRepoMock.findTeamBySlug(Mockito.anyString())).thenReturn(Optional.empty()); GetOrganizationFromTeamName useCase = new GetOrganizationFromTeamName(teamRepoMock); assertThrows(TeamNotFound.class, () -> { useCase.execute("some team"); }); - Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamByName("some team"); + Mockito.verify(teamRepoMock, Mockito.times(1)).findTeamBySlug("some team"); } } diff --git a/src/test/java/io/pakland/mdas/githubstats/application/GetRepositoriesByTeamTest.java b/src/test/java/io/pakland/mdas/githubstats/application/GetRepositoriesByTeamTest.java index f8a748f1..88b1adcd 100644 --- a/src/test/java/io/pakland/mdas/githubstats/application/GetRepositoriesByTeamTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/application/GetRepositoriesByTeamTest.java @@ -14,7 +14,7 @@ public class GetRepositoriesByTeamTest { @Test public void givenTeam_shouldReturnListOfRepositories() { Repository repository = new Repository(); - repository.setId(1L); + repository.setId(1); Team mockTeam = Mockito.mock(Team.class); Mockito.when(mockTeam.getRepositories()).thenReturn(List.of(repository)); diff --git a/src/test/java/io/pakland/mdas/githubstats/application/GetTeamsFromOrganizationTest.java b/src/test/java/io/pakland/mdas/githubstats/application/GetTeamsFromOrganizationTest.java index 494a5f21..7f262b9f 100644 --- a/src/test/java/io/pakland/mdas/githubstats/application/GetTeamsFromOrganizationTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/application/GetTeamsFromOrganizationTest.java @@ -13,7 +13,7 @@ public class GetTeamsFromOrganizationTest { @Test public void givenOrganization_shouldReturnListOfTeams() { Team team = new Team(); - team.setId(1L); + team.setId(1); Organization organizationMock = Mockito.mock(Organization.class); Mockito.when(organizationMock.getTeams()).thenReturn(List.of(team)); diff --git a/src/test/java/io/pakland/mdas/githubstats/application/SaveOrganizationTest.java b/src/test/java/io/pakland/mdas/githubstats/application/SaveOrganizationTest.java index bbda849c..e0076afb 100644 --- a/src/test/java/io/pakland/mdas/githubstats/application/SaveOrganizationTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/application/SaveOrganizationTest.java @@ -11,26 +11,26 @@ public class SaveOrganizationTest { @Test public void shouldSaveOrganization_whenDoesNotExist() { Organization organization = new Organization(); - organization.setId(1L); + organization.setId(1); OrganizationRepository orgRepositoryMock = Mockito.mock(OrganizationRepository.class); - Mockito.when(orgRepositoryMock.findById(Mockito.anyLong())).thenReturn(Optional.empty()); + Mockito.when(orgRepositoryMock.findById(Mockito.anyInt())).thenReturn(Optional.empty()); new SaveOrganization(orgRepositoryMock).execute(organization); - Mockito.verify(orgRepositoryMock, Mockito.times(1)).findById(1L); + Mockito.verify(orgRepositoryMock, Mockito.times(1)).findById(1); Mockito.verify(orgRepositoryMock, Mockito.times(1)).save(organization); } @Test public void shouldNotSaveOrganization_wheDoesExist() { Organization organization = new Organization(); - organization.setId(1L); + organization.setId(1); OrganizationRepository orgRepositoryMock = Mockito.mock(OrganizationRepository.class); - Mockito.when(orgRepositoryMock.findById(Mockito.anyLong())).thenReturn(Optional.of(organization)); + Mockito.when(orgRepositoryMock.findById(Mockito.anyInt())).thenReturn(Optional.of(organization)); new SaveOrganization(orgRepositoryMock).execute(organization); - Mockito.verify(orgRepositoryMock, Mockito.times(1)).findById(1L); + Mockito.verify(orgRepositoryMock, Mockito.times(1)).findById(1); Mockito.verify(orgRepositoryMock, Mockito.times(0)).save(Mockito.any(Organization.class)); } } diff --git a/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepositoryTest.java b/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepositoryTest.java index 19bb99a4..87605e76 100644 --- a/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepositoryTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/TeamGitHubRepositoryTest.java @@ -26,6 +26,8 @@ class TeamGitHubRepositoryTest { private TeamGitHubRepository teamGitHubRepository; private String organizationTeamsListResponse; + private final Integer orgId = 119930124; + @BeforeAll void setup() throws IOException { this.mockWebServer = new MockWebServer(); @@ -47,23 +49,23 @@ void givenValidTeamMembersRequest_shouldCallTeamMembersEndpoint() throws Interru .addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); mockWebServer.enqueue(mockResponse); - teamGitHubRepository.fetchTeamsFromOrganization("github-stats-22"); + teamGitHubRepository.fetchTeamsFromOrganization(orgId); RecordedRequest request = mockWebServer.takeRequest(); - assertEquals(String.format("/orgs/%s/teams", "github-stats-22"), request.getPath()); + assertEquals(String.format("/orgs/%d/teams", orgId), request.getPath()); } @Test void givenValidTeamId_shouldReturnTeamMembers() throws HttpException { - + Integer teamId = 7098104; MockResponse mockResponse = new MockResponse() .setBody(this.organizationTeamsListResponse) .addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); mockWebServer.enqueue(mockResponse); - List response = teamGitHubRepository.fetchTeamsFromOrganization("github-stats-22"); + List response = teamGitHubRepository.fetchTeamsFromOrganization(orgId); List expected = new ArrayList<>(); - expected.add(0, new TeamDTO(7098104, "gs-developers", "gs-developers")); + expected.add(0, new TeamDTO(teamId, "gs-developers", "gs-developers")); assertEquals(response.size(), 1); assertArrayEquals(response.toArray(), expected.toArray()); diff --git a/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepositoryTest.java b/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepositoryTest.java index 75cfa8db..339e4dd2 100644 --- a/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepositoryTest.java +++ b/src/test/java/io/pakland/mdas/githubstats/infrastructure/github/repository/UserGitHubRepositoryTest.java @@ -26,6 +26,9 @@ class UserGitHubRepositoryTest { private UserGitHubRepository userGitHubRepository; private String teamMembersListResponse; + private final Integer orgId = 119930124; + private final Integer teamId = 7098104; + @BeforeAll void setup() throws IOException { this.mockWebServer = new MockWebServer(); @@ -47,10 +50,10 @@ void givenValidTeamMembersRequest_shouldCallTeamMembersEndpoint() throws Interru .addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); mockWebServer.enqueue(mockResponse); - userGitHubRepository.fetchUsersFromTeam("github-stats-22", "gs-developers"); + userGitHubRepository.fetchUsersFromTeam(orgId, teamId); RecordedRequest request = mockWebServer.takeRequest(); - assertEquals(String.format("/orgs/%s/teams/%s/members", "github-stats-22", "gs-developers"), request.getPath()); + assertEquals(String.format("/orgs/%d/teams/%d/members", orgId, teamId), request.getPath()); } @Test @@ -61,7 +64,7 @@ void givenValidTeamId_shouldReturnTeamMembers() throws HttpException { .addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); mockWebServer.enqueue(mockResponse); - List response = userGitHubRepository.fetchUsersFromTeam("github-stats-22", "gs-developers"); + List response = userGitHubRepository.fetchUsersFromTeam(orgId, teamId); List expected = new ArrayList<>(); expected.add(0, new UserDTO(33031570, "manerow", "https://api.github.com/users/manerow/orgs")); expected.add(1, new UserDTO(48334745, "mikededo", "https://api.github.com/users/mikededo/orgs"));