add co-authors if available to changeset view

refactor ChangesetAuthor.tsx

get interfaces right / fix unit test / cleanup

fix table layout

use Set constructor injection to bind the implementation for the new changesetTrailers API

cleanup / update CHANGELOG.md

cleanup

fix formatting
This commit is contained in:
Eduard Heimbuch
2020-05-28 11:45:15 +02:00
committed by René Pfeuffer
parent a712c89f6a
commit ec57aa88fa
15 changed files with 208 additions and 80 deletions

View File

@@ -45,6 +45,7 @@ import sonia.scm.repository.Branch;
import sonia.scm.repository.Branches;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetPagingResult;
import sonia.scm.repository.ChangesetTrailers;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Person;
import sonia.scm.repository.Repository;
@@ -61,6 +62,7 @@ import java.net.URI;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -113,6 +115,9 @@ public class BranchRootResourceTest extends RepositoryTestBase {
@Mock
private TagCollectionToDtoMapper tagCollectionToDtoMapper;
@Mock
private Set<ChangesetTrailers> changesetTrailers;
@InjectMocks
private DefaultChangesetToChangesetDtoMapperImpl changesetToChangesetDtoMapper;

View File

@@ -24,11 +24,12 @@
package sonia.scm.api.v2.resources;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.api.v2.resources.ChangesetTrailerExtractor.TrailerTypes;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryTestData;
import sonia.scm.user.DisplayUser;
import sonia.scm.user.User;
@@ -37,21 +38,17 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(MockitoExtension.class)
class ChangesetTrailerExtractorTest {
class ChangesetDescriptionTrailersTest {
private ChangesetTrailerExtractor extractor;
private static final Repository REPOSITORY = RepositoryTestData.createHeartOfGold();
@BeforeEach
void initExtractor() {
TrailerTypes trailerTypes = new TrailerTypes();
extractor = new ChangesetTrailerExtractor(trailerTypes);
}
private final ChangesetDescriptionTrailers changesetDescriptionTrailers = new ChangesetDescriptionTrailers();
@Test
void shouldReturnEmptyList() {
String commitMessage = "zaphod beetlebrox";
Changeset changeset = createChangeset("zaphod beeblebrox");
List<TrailerPersonDto> trailerPersons = extractor.extractTrailersFromCommitMessage(commitMessage);
List<TrailerPersonDto> trailerPersons = changesetDescriptionTrailers.getTrailers(REPOSITORY, changeset);
assertThat(trailerPersons).isNotNull();
assertThat(trailerPersons).isEmpty();
@@ -60,26 +57,26 @@ class ChangesetTrailerExtractorTest {
@Test
void shouldReturnTrailerPersonsWithCoAuthors() {
DisplayUser displayUser = createDisplayUser("Arthur Dent", "dent@hitchhiker.org");
String commitMessage = "zaphod beetlebrox\n\nCo-authored-by: Arthur Dent <dent@hitchhiker.org>";
Changeset changeset = createChangeset("zaphod beeblebrox\n\nCo-authored-by: Arthur Dent <dent@hitchhiker.org>");
PersonDto personDto = createPersonDto(displayUser);
List<TrailerPersonDto> trailerPersons = extractor.extractTrailersFromCommitMessage(commitMessage);
List<TrailerPersonDto> trailerPersons = changesetDescriptionTrailers.getTrailers(REPOSITORY, changeset);
TrailerPersonDto trailerPersonDto = trailerPersons.get(0);
assertThat(trailerPersonDto.getTrailerType()).isEqualTo("Co-authored-by");
assertThat(trailerPersonDto.getName()).isEqualTo(personDto.getName());
assertThat(trailerPersonDto.getMail()).isEqualTo(personDto.getMail());
TrailerPersonDto trailerPerson = trailerPersons.get(0);
assertThat(trailerPerson.getTrailerType()).isEqualTo("Co-authored-by");
assertThat(trailerPerson.getName()).isEqualTo(personDto.getName());
assertThat(trailerPerson.getMail()).isEqualTo(personDto.getMail());
}
@Test
void shouldReturnTrailerPersonsWithReviewers() {
DisplayUser displayUser = createDisplayUser("Tricia McMillan", "trillian@hitchhiker.org");
String commitMessage = "zaphod beetlebrox\nReviewed-by: Tricia McMillan <trillian@hitchhiker.org>";
Changeset changeset = createChangeset("zaphod beeblebrox\nReviewed-by: Tricia McMillan <trillian@hitchhiker.org>");
PersonDto personDto = createPersonDto(displayUser);
List<TrailerPersonDto> trailerPersons = extractor.extractTrailersFromCommitMessage(commitMessage);
List<TrailerPersonDto> trailerPersons = changesetDescriptionTrailers.getTrailers(REPOSITORY, changeset);
TrailerPersonDto trailerPersonDto = trailerPersons.get(0);
@@ -91,11 +88,11 @@ class ChangesetTrailerExtractorTest {
@Test
void shouldReturnTrailerPersonsWithSigner() {
DisplayUser displayUser = createDisplayUser("Tricia McMillan", "trillian@hitchhiker.org");
String commitMessage = "zaphod beetlebrox\nSigned-off-by: Tricia McMillan <trillian@hitchhiker.org>";
Changeset changeset = createChangeset("zaphod beeblebrox\nSigned-off-by: Tricia McMillan <trillian@hitchhiker.org>");
PersonDto personDto = createPersonDto(displayUser);
List<TrailerPersonDto> trailerPersons = extractor.extractTrailersFromCommitMessage(commitMessage);
List<TrailerPersonDto> trailerPersons = changesetDescriptionTrailers.getTrailers(REPOSITORY, changeset);
TrailerPersonDto trailerPersonDto = trailerPersons.get(0);
@@ -107,11 +104,11 @@ class ChangesetTrailerExtractorTest {
@Test
void shouldReturnTrailerPersonsWithCommitter() {
DisplayUser displayUser = createDisplayUser("Tricia McMillan", "trillian@hitchhiker.org");
String commitMessage = "zaphod beetlebrox\nCommitted-by: Tricia McMillan <trillian@hitchhiker.org>";
Changeset changeset = createChangeset("zaphod beeblebrox\nCommitted-by: Tricia McMillan <trillian@hitchhiker.org>");
PersonDto personDto = createPersonDto(displayUser);
List<TrailerPersonDto> trailerPersons = extractor.extractTrailersFromCommitMessage(commitMessage);
List<TrailerPersonDto> trailerPersons = changesetDescriptionTrailers.getTrailers(REPOSITORY, changeset);
TrailerPersonDto trailerPersonDto = trailerPersons.get(0);
@@ -120,9 +117,14 @@ class ChangesetTrailerExtractorTest {
assertThat(trailerPersonDto.getMail()).isEqualTo(personDto.getMail());
}
private Changeset createChangeset(String commitMessage) {
Changeset changeset = new Changeset();
changeset.setDescription(commitMessage);
return changeset;
}
private DisplayUser createDisplayUser(String name, String mail) {
DisplayUser displayUser = DisplayUser.from(new User(name, name, mail));
return displayUser;
return DisplayUser.from(new User(name, name, mail));
}
private PersonDto createPersonDto(DisplayUser displayUser) {

View File

@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package sonia.scm.api.v2.resources;
@@ -43,6 +43,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetPagingResult;
import sonia.scm.repository.ChangesetTrailers;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Person;
import sonia.scm.repository.Repository;
@@ -56,6 +57,7 @@ import java.net.URI;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -68,7 +70,6 @@ import static org.mockito.Mockito.when;
@Slf4j
public class ChangesetRootResourceTest extends RepositoryTestBase {
public static final String CHANGESET_PATH = "space/repo/changesets/";
public static final String CHANGESET_URL = "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + CHANGESET_PATH;
@@ -86,6 +87,10 @@ public class ChangesetRootResourceTest extends RepositoryTestBase {
@Mock
private LogCommandBuilder logCommandBuilder;
@Mock
private Set<ChangesetTrailers> changesetTrailers;
@InjectMocks
private ChangesetCollectionToDtoMapper changesetCollectionToDtoMapper;
@InjectMocks
@@ -93,11 +98,9 @@ public class ChangesetRootResourceTest extends RepositoryTestBase {
private ChangesetRootResource changesetRootResource;
private final Subject subject = mock(Subject.class);
private final ThreadState subjectThreadState = new SubjectThreadState(subject);
@Before
public void prepareEnvironment() {
changesetCollectionToDtoMapper = new ChangesetCollectionToDtoMapper(changesetToChangesetDtoMapper, resourceLinks);

View File

@@ -44,6 +44,7 @@ import sonia.scm.ContextEntry;
import sonia.scm.NotFoundException;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetPagingResult;
import sonia.scm.repository.ChangesetTrailers;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Person;
@@ -59,6 +60,7 @@ import java.net.URISyntaxException;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -89,6 +91,9 @@ public class FileHistoryResourceTest extends RepositoryTestBase {
private FileHistoryCollectionToDtoMapper fileHistoryCollectionToDtoMapper;
@Mock
private Set<ChangesetTrailers> changesetTrailers;
@InjectMocks
private DefaultChangesetToChangesetDtoMapperImpl changesetToChangesetDtoMapper;

View File

@@ -45,6 +45,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.NotFoundException;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.ChangesetPagingResult;
import sonia.scm.repository.ChangesetTrailers;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Person;
import sonia.scm.repository.Repository;
@@ -64,6 +65,7 @@ import java.net.URISyntaxException;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import java.util.Set;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.Assert.assertEquals;
@@ -78,7 +80,6 @@ import static sonia.scm.repository.api.DiffFormat.NATIVE;
@Slf4j
public class IncomingRootResourceTest extends RepositoryTestBase {
public static final String INCOMING_PATH = "space/repo/incoming/";
public static final String INCOMING_CHANGESETS_URL = "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + INCOMING_PATH;
public static final String INCOMING_DIFF_URL = "/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + INCOMING_PATH;
@@ -108,6 +109,9 @@ public class IncomingRootResourceTest extends RepositoryTestBase {
private IncomingChangesetCollectionToDtoMapper incomingChangesetCollectionToDtoMapper;
@Mock
private Set<ChangesetTrailers> changesetTrailers;
@InjectMocks
private DefaultChangesetToChangesetDtoMapperImpl changesetToChangesetDtoMapper;