1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.tck.command.changelog;
20
21 import java.util.Collections;
22 import java.util.Date;
23 import java.util.List;
24
25 import org.apache.maven.scm.ChangeSet;
26 import org.apache.maven.scm.CommandParameter;
27 import org.apache.maven.scm.CommandParameters;
28 import org.apache.maven.scm.ScmBranch;
29 import org.apache.maven.scm.ScmFileSet;
30 import org.apache.maven.scm.ScmTagParameters;
31 import org.apache.maven.scm.ScmTckTestCase;
32 import org.apache.maven.scm.ScmTestCase;
33 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
34 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
35 import org.apache.maven.scm.command.checkin.CheckInScmResult;
36 import org.apache.maven.scm.command.tag.TagScmResult;
37 import org.apache.maven.scm.provider.ScmProvider;
38 import org.junit.Test;
39
40 import static org.junit.Assert.assertEquals;
41 import static org.junit.Assert.assertTrue;
42
43
44
45
46
47
48
49
50
51
52
53 public abstract class ChangeLogCommandTckTest extends ScmTckTestCase {
54 private static final String COMMIT_MSG = "Second changelog";
55 private static final String COMMIT_TAG = "v3.14";
56
57
58
59
60
61
62 public boolean isTagAnExtraCommit() {
63 return false;
64 }
65
66 @Test
67 public void testChangeLogCommand() throws Exception {
68 Thread.sleep(1000);
69 ScmProvider provider = getScmManager().getProviderByRepository(getScmRepository());
70 ScmFileSet fileSet = new ScmFileSet(getWorkingCopy());
71
72 ChangeLogScmResult firstResult =
73 provider.changeLog(getScmRepository(), fileSet, null, null, 0, (ScmBranch) null, null);
74 assertResultIsSuccess(firstResult);
75
76
77 int firstLogSize = firstResult.getChangeLog().getChangeSets().size();
78 assertTrue("Unexpected initial log size", firstLogSize >= 1);
79
80
81 Date timeBeforeSecond = new Date();
82
83
84 Thread.sleep(2000);
85
86
87 this.edit(getWorkingCopy(), "readme.txt", null, getScmRepository());
88 ScmTestCase.makeFile(getWorkingCopy(), "/readme.txt", "changed readme.txt");
89 CommandParameters commandParameters = new CommandParameters();
90 commandParameters.setString(CommandParameter.MESSAGE, COMMIT_MSG);
91 CheckInScmResult checkInResult = provider.checkIn(getScmRepository(), fileSet, commandParameters);
92 assertTrue("Unable to checkin changes to the repository", checkInResult.isSuccess());
93
94 ScmTagParameters scmTagParameters = new ScmTagParameters();
95 TagScmResult tagResult = provider.tag(getScmRepository(), fileSet, COMMIT_TAG, scmTagParameters);
96 assertResultIsSuccess(tagResult);
97
98 ChangeLogScmRequest changeLogScmRequest = new ChangeLogScmRequest(getScmRepository(), fileSet);
99 ChangeLogScmResult secondResult = provider.changeLog(changeLogScmRequest);
100 assertResultIsSuccess(secondResult);
101
102 List<ChangeSet> changeSets = secondResult.getChangeLog().getChangeSets();
103
104 int expectedChangeSets = firstLogSize + 1;
105 boolean lastCommitIsCausedByTagging = false;
106 int lastCodeCommitIndex = 0;
107
108 if (isTagAnExtraCommit()) {
109
110 lastCommitIsCausedByTagging = true;
111 expectedChangeSets += 1;
112 lastCodeCommitIndex = 1;
113 }
114
115 assertEquals(expectedChangeSets, changeSets.size());
116
117
118 ChangeSet changeSetWithTag = changeSets.get(lastCodeCommitIndex);
119 assertEquals(Collections.singletonList(COMMIT_TAG), changeSetWithTag.getTags());
120
121
122 Date currentTime = new Date();
123 changeLogScmRequest = new ChangeLogScmRequest(getScmRepository(), fileSet);
124 changeLogScmRequest.setStartDate(timeBeforeSecond);
125 changeLogScmRequest.setEndDate(currentTime);
126 changeLogScmRequest.setScmBranch(new ScmBranch(""));
127 ChangeLogScmResult thirdResult = provider.changeLog(changeLogScmRequest);
128
129
130 assertResultIsSuccess(thirdResult);
131
132 List<ChangeSet> thirdChangeSets = thirdResult.getChangeLog().getChangeSets();
133 assertEquals(lastCommitIsCausedByTagging ? 2 : 1, thirdChangeSets.size());
134 ChangeSet changeset = thirdChangeSets.get(lastCodeCommitIndex);
135 assertTrue(changeset.getDate().after(timeBeforeSecond));
136 assertTrue(changeset.getComment().startsWith(COMMIT_MSG));
137 }
138 }