/**
* Yobi, Project Hosting SW
*
* Copyright 2013 NAVER Corp.
* http://yobi.io
*
* @Author kjkmadness
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package playRepository;
import static org.fest.assertions.Assertions.assertThat;
import java.util.Date;
import java.util.Set;
import java.util.TimeZone;
import models.*;
import org.junit.*;
public class CommitTest extends ModelTest<Commit> {
@Before
public void before() {
for(Watch watch : Watch.find.all()) {
watch.delete();
}
for(Unwatch unwatch : Unwatch.find.all()) {
unwatch.delete();
}
}
@Test
public void getWatchers_no_watchers() {
// Given
Commit commit = createTestCommit("test", User.anonymous);
// When
Set<User> watchers = commit.getWatchers(getTestProject());
// Then
assertThat(watchers).isEmpty();
}
@Test
public void getWatchers_with_author() {
// Given
User author = getTestUser();
Commit commit = createTestCommit("test", author);
// When
Set<User> watchers = commit.getWatchers(getTestProject());
// Then
assertThat(watchers).containsOnly(author);
}
@Test
public void getWatchers_with_commet_git() {
// Given
User author = getTestUser(2L);
String commitId = "test";
Commit commit = createTestCommit(commitId, author);
User commentUser = getTestUser(3L);
Project project = getTestProject();
ReviewComment comment = new ReviewComment();
CodeCommentThread thread = new CodeCommentThread();
thread.project = project;
thread.commitId = commitId;
comment.thread = thread;
comment.author = new UserIdent(commentUser);
comment.save();
// When
Set<User> watchers = commit.getWatchers(project);
// Then
assertThat(watchers).containsOnly(author, commentUser);
comment.delete();
}
@Test
public void getWatchers_with_comment_svn() {
// Given
User author = getTestUser(4L);
String commitId = "1";
Commit commit = createTestCommit(commitId, author);
User commentUser = getTestUser(3L);
Project project = Project.find.byId(3l);
CommitComment comment = new CommitComment();
comment.project = project;
comment.commitId = commitId;
comment.setAuthor(commentUser);
comment.save();
// When
Set<User> watchers = commit.getWatchers(project);
// Then
assertThat(watchers).containsOnly(author, commentUser);
}
@Test
public void getWatchers_with_project_watcher() {
// Given
User author = getTestUser(2L);
Commit commit = createTestCommit("test", author);
User projectWatcher = getTestUser(3L);
Project project = getTestProject();
projectWatcher.addWatching(project);
// When
Set<User> watchers = commit.getWatchers(project);
// Then
assertThat(watchers).containsOnly(author, projectWatcher);
}
@Test
public void getWatchers_explicitly_watch_unwatch() {
// Given
User author = getTestUser(2L);
Commit commit = createTestCommit("test", author);
Project project = getTestProject();
User watcher = getTestUser(3L);
Watch.watch(watcher, commit.asResource(project));
User unwatcher = getTestUser(4L);
unwatcher.addWatching(project);
Watch.unwatch(unwatcher, commit.asResource(project));
// When
Set<User> watchers = commit.getWatchers(project);
// Then
assertThat(watchers).containsOnly(author, watcher);
}
@Test
public void getWatchers_private_project() {
// Given
User author = getTestUser(1L);
Commit commit = createTestCommit("test", author);
Project project = getTestProject(5L);
User watcher = getTestUser(2L);
Watch.watch(watcher, commit.asResource(project));
// When
Set<User> watchers = commit.getWatchers(project);
// Then
assertThat(watchers).containsOnly(author);
}
private Commit createTestCommit(final String id, final User author) {
return new Commit() {
@Override
public String getShortMessage() {
return null;
}
@Override
public String getShortId() {
return null;
}
@Override
public int getParentCount() {
return 0;
}
@Override
public String getMessage() {
return null;
}
@Override
public String getId() {
return id;
}
@Override
public TimeZone getCommitterTimezone() {
return null;
}
@Override
public String getCommitterName() {
return null;
}
@Override
public String getCommitterEmail() {
return null;
}
@Override
public Date getCommitterDate() {
return null;
}
@Override
public TimeZone getAuthorTimezone() {
return null;
}
@Override
public String getAuthorName() {
return null;
}
@Override
public String getAuthorEmail() {
return null;
}
@Override
public Date getAuthorDate() {
return null;
}
@Override
public User getAuthor() {
return author;
}
};
}
}