/* Copyright (c) 2012-2013 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Gabriel Roldan (Boundless) - initial implementation */ package org.locationtech.geogig.repository; import java.util.List; import junit.framework.TestCase; import org.junit.Test; import org.locationtech.geogig.api.CommitBuilder; import org.locationtech.geogig.api.ObjectId; import org.locationtech.geogig.api.RevCommit; import com.google.common.collect.ImmutableList; public class CommitBuilderTest extends TestCase { @Override protected void setUp() throws Exception { } public void testBuildEmpty() throws Exception { CommitBuilder b = new CommitBuilder(); try { b.build(); fail("expected IllegalStateException on null tree id"); } catch (IllegalStateException e) { assertTrue(e.getMessage().contains("tree")); } } public void testBuildFull() throws Exception { CommitBuilder b = new CommitBuilder(); b.setAuthor("groldan"); b.setAuthorEmail("groldan@boundlessgeo.com"); b.setCommitter("jdeolive"); b.setCommitterEmail("jdeolive@boundlessgeo.com"); b.setMessage("cool this works"); b.setCommitterTimestamp(1000); b.setCommitterTimeZoneOffset(10); b.setAuthorTimestamp(500); b.setAuthorTimeZoneOffset(-5); ObjectId treeId = ObjectId.forString("fake tree content"); b.setTreeId(treeId); ObjectId parentId1 = ObjectId.forString("fake parent content 1"); ObjectId parentId2 = ObjectId.forString("fake parent content 2"); List<ObjectId> parentIds = ImmutableList.of(parentId1, parentId2); b.setParentIds(parentIds); RevCommit build = b.build(); assertNotNull(build.getId()); assertFalse(build.getId().isNull()); assertEquals(treeId, build.getTreeId()); assertEquals(parentIds, build.getParentIds()); assertEquals("groldan", build.getAuthor().getName().get()); assertEquals("groldan@boundlessgeo.com", build.getAuthor().getEmail().get()); assertEquals("jdeolive", build.getCommitter().getName().get()); assertEquals("jdeolive@boundlessgeo.com", build.getCommitter().getEmail().get()); assertEquals("cool this works", build.getMessage()); assertEquals(1000L, build.getCommitter().getTimestamp()); assertEquals(10, build.getCommitter().getTimeZoneOffset()); assertEquals(500L, build.getAuthor().getTimestamp()); assertEquals(-5, build.getAuthor().getTimeZoneOffset()); } @Test public void testPassingNullToSetParentIds() throws Exception { CommitBuilder b = new CommitBuilder(); b.setAuthor("groldan"); b.setAuthorEmail("groldan@boundlessgeo.com"); b.setCommitter("jdeolive"); b.setCommitterEmail("jdeolive@boundlessgeo.com"); b.setMessage("cool this works"); b.setAuthorTimestamp(1000); ObjectId treeId = ObjectId.forString("fake tree content"); b.setTreeId(treeId); b.setParentIds(null); assertEquals(ImmutableList.of(), b.getParentIds()); } @Test public void testNoMessage() throws Exception { CommitBuilder b = new CommitBuilder(); b.setAuthor("groldan"); b.setAuthorEmail("groldan@boundlessgeo.com"); b.setCommitter("jdeolive"); b.setCommitterEmail("jdeolive@boundlessgeo.com"); b.setMessage(null); b.setAuthorTimestamp(1000); ObjectId treeId = ObjectId.forString("fake tree content"); b.setTreeId(treeId); ObjectId parentId1 = ObjectId.forString("fake parent content 1"); ObjectId parentId2 = ObjectId.forString("fake parent content 2"); List<ObjectId> parentIds = ImmutableList.of(parentId1, parentId2); b.setParentIds(parentIds); assertEquals(null, b.getMessage()); RevCommit commit2 = b.build(); assertEquals("", commit2.getMessage()); } @Test public void testNoAuthorTimeStamp() throws Exception { CommitBuilder b = new CommitBuilder(); b.setAuthor("groldan"); b.setAuthorEmail("groldan@boundlessgeo.com"); b.setCommitter("jdeolive"); b.setCommitterEmail("jdeolive@boundlessgeo.com"); b.setCommitterTimestamp(1000); b.setMessage("cool this works"); assertEquals(1000, b.getAuthorTimestamp()); } @Test public void testCommitBuilder() throws Exception { CommitBuilder b = new CommitBuilder(); b.setAuthor("groldan"); b.setAuthorEmail("groldan@boundlessgeo.com"); b.setCommitter("jdeolive"); b.setCommitterEmail("jdeolive@boundlessgeo.com"); b.setMessage("cool this works"); b.setAuthorTimestamp(1000); ObjectId treeId = ObjectId.forString("fake tree content"); b.setTreeId(treeId); ObjectId parentId1 = ObjectId.forString("fake parent content 1"); ObjectId parentId2 = ObjectId.forString("fake parent content 2"); List<ObjectId> parentIds = ImmutableList.of(parentId1, parentId2); b.setParentIds(parentIds); RevCommit commit1 = b.build(); CommitBuilder builder = new CommitBuilder(commit1); assertEquals("groldan", builder.getAuthor()); assertEquals("jdeolive", builder.getCommitter()); assertEquals("groldan@boundlessgeo.com", builder.getAuthorEmail()); assertEquals("jdeolive@boundlessgeo.com", builder.getCommitterEmail()); assertEquals(commit1.getMessage(), builder.getMessage()); assertEquals(commit1.getParentIds(), builder.getParentIds()); assertEquals(commit1.getTreeId(), builder.getTreeId()); assertEquals(commit1.getAuthor().getTimestamp(), builder.getAuthorTimestamp()); RevCommit commit2 = builder.build(); assertEquals(commit1, commit2); } }