/** * Copyright (c) 2012, 2014 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation */ package org.eclipse.mylyn.reviews.core.model; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.Date; import java.util.List; import org.eclipse.mylyn.reviews.internal.core.model.FileItem; import org.eclipse.mylyn.reviews.internal.core.model.ReviewsFactory; import org.junit.Test; /** * <!-- begin-user-doc --> A test case for the model object '<em><b>Review Item</b></em>'. <!-- end-user-doc --> * <p> * The following operations are tested: * <ul> * <li> * {@link org.eclipse.mylyn.reviews.core.model.IReviewItem#createComment(org.eclipse.mylyn.reviews.core.model.ILocation, java.lang.String) * <em>Create Comment Comment</em>}</li> * </ul> * </p> * * @generated NOT */ public class CommentContainerTest { @Test public void testGetAllCommentsFileItems() { IFileItem f1 = ReviewsFactory.eINSTANCE.createFileItem(); IComment comment0 = ReviewsFactory.eINSTANCE.createComment(); f1.getComments().add(comment0); IComment comment1 = ReviewsFactory.eINSTANCE.createComment(); f1.getComments().add(comment1); f1.setBase(ReviewsFactory.eINSTANCE.createFileVersion()); f1.setTarget(ReviewsFactory.eINSTANCE.createFileVersion()); IComment comment2 = ReviewsFactory.eINSTANCE.createComment(); f1.getBase().getComments().add(comment2); IComment comment3 = ReviewsFactory.eINSTANCE.createComment(); f1.getTarget().getComments().add(comment3); assertThat(f1.getAllComments().size(), is(4)); assertThat(f1.getAllComments().get(0), sameInstance(comment0)); assertThat(f1.getAllComments().get(1), sameInstance(comment1)); assertThat(f1.getAllComments().get(2), sameInstance(comment2)); assertThat(f1.getAllComments().get(3), sameInstance(comment3)); } @Test public void testGetAllCommentsReviewItems() { IReviewItem i1 = ReviewsFactory.eINSTANCE.createFileItem(); i1.getComments().add(ReviewsFactory.eINSTANCE.createComment()); i1.getComments().add(ReviewsFactory.eINSTANCE.createComment()); assertThat(i1.getAllComments().size(), is(2)); } @Test public void testGetAllCommentsReviewItemSet() { IReviewItemSet itemSet = ReviewsFactory.eINSTANCE.createReviewItemSet(); IFileItem i1 = IReviewsFactory.INSTANCE.createFileItem(); IComment t0 = ReviewsFactory.eINSTANCE.createComment(); i1.getComments().add(t0); IComment t1 = ReviewsFactory.eINSTANCE.createComment(); i1.getComments().add(t1); itemSet.getItems().add(i1); assertThat(itemSet.getAllComments().size(), is(2)); IFileItem i2 = IReviewsFactory.INSTANCE.createFileItem(); IComment t2 = ReviewsFactory.eINSTANCE.createComment(); i2.getComments().add(t2); IComment t3 = ReviewsFactory.eINSTANCE.createComment(); i2.getComments().add(t3); itemSet.getItems().add(i2); assertThat(itemSet.getAllComments().size(), is(4)); } @Test public void testGetAllCommentsReview() { IReview review = ReviewsFactory.eINSTANCE.createReview(); IComment t0 = ReviewsFactory.eINSTANCE.createComment(); review.getComments().add(t0); assertThat(review.getAllComments().size(), is(1)); IReviewItemSet itemSet = ReviewsFactory.eINSTANCE.createReviewItemSet(); review.getSets().add(itemSet); IFileItem i1 = IReviewsFactory.INSTANCE.createFileItem(); IComment t1 = ReviewsFactory.eINSTANCE.createComment(); i1.getComments().add(t1); IComment t2 = ReviewsFactory.eINSTANCE.createComment(); i1.getComments().add(t2); itemSet.getItems().add(i1); assertThat(review.getAllComments().size(), is(3)); IFileItem i2 = IReviewsFactory.INSTANCE.createFileItem(); IComment t3 = ReviewsFactory.eINSTANCE.createComment(); i2.getComments().add(t3); IComment t4 = ReviewsFactory.eINSTANCE.createComment(); i2.getComments().add(t4); itemSet.getItems().add(i2); assertThat(review.getAllComments().size(), is(5)); IReviewItemSet reviewSubSet = ReviewsFactory.eINSTANCE.createReviewItemSet(); IFileItem i4 = IReviewsFactory.INSTANCE.createFileItem(); IComment t5 = ReviewsFactory.eINSTANCE.createComment(); i4.getComments().add(t5); t5.setId("5"); reviewSubSet.getItems().add(i4); review.getSets().add(reviewSubSet); assertThat(review.getAllComments().size(), is(6)); assertThat(review.getAllComments().get(0), is(t0)); assertThat(review.getAllComments().get(1), is(t1)); assertThat(review.getAllComments().get(2), is(t2)); assertThat(review.getAllComments().get(3), is(t3)); assertThat(review.getAllComments().get(4), is(t4)); assertThat(review.getAllComments().get(5), is(t5)); } @Test public void testGetAllCommentReplies() { IReview review = ReviewsFactory.eINSTANCE.createReview(); IComment mainComment = ReviewsFactory.eINSTANCE.createComment(); review.getComments().add(mainComment); List<IComment> allComments = review.getAllComments(); assertThat(allComments.size(), is(1)); IComment comment0 = ReviewsFactory.eINSTANCE.createComment(); review.getComments().add(comment0); mainComment.getReplies().add(comment0); allComments = review.getAllComments(); assertThat(allComments.size(), is(2)); assertThat(allComments.get(0), is(mainComment)); assertThat(allComments.get(1), is(comment0)); } @Test public void testCreateFileItemComment() { IRepository repos = ReviewsFactory.eINSTANCE.createRepository(); IReview review = ReviewsFactory.eINSTANCE.createReview(); repos.getReviews().add(review); IReviewItemSet set = ReviewsFactory.eINSTANCE.createReviewItemSet(); review.getSets().add(set); IFileItem item = ReviewsFactory.eINSTANCE.createFileItem(); set.getItems().add(item); ILineLocation location = ReviewsFactory.eINSTANCE.createLineLocation(); IUser fileAuthor = ReviewsFactory.eINSTANCE.createUser(); fileAuthor.setDisplayName("Another User"); item.setAddedBy(fileAuthor); IUser account = ReviewsFactory.eINSTANCE.createUser(); account.setDisplayName("This User"); repos.setAccount(account); IComment comment = item.createComment(location, "My Comment"); assertThat(comment.getItem(), instanceOf(IFileItem.class)); assertThat(comment.getReview(), sameInstance(review)); assertThat(((FileItem) comment.getItem()).getReview(), sameInstance(review)); assertThat(((FileItem) comment.getItem()).getReview().getRepository(), sameInstance(repos)); assertTrue(item.getComments().contains(comment)); assertSame(comment.getItem(), item); assertThat(comment.getDescription(), is("My Comment")); assertThat(comment.getAuthor().getDisplayName(), is("This User")); assertTrue(new Date().getTime() - 100 < comment.getCreationDate().getTime()); assertThat(comment.isMine(), is(true)); } @Test public void testCreateFileItemCommentNoUser() { IFileItem item = ReviewsFactory.eINSTANCE.createFileItem(); ILineLocation location = ReviewsFactory.eINSTANCE.createLineLocation(); IComment comment = item.createComment(location, "My Comment"); assertThat(item.getComments().size(), is(1)); assertThat(comment.getAuthor(), nullValue()); assertThat(comment.isMine(), is(false)); } @Test public void testCreateReviewCommentNoUser() { IReview review = ReviewsFactory.eINSTANCE.createReview(); ILineLocation location = ReviewsFactory.eINSTANCE.createLineLocation(); IComment comment = review.createComment(location, "My Comment"); assertThat(review.getComments().size(), is(1)); assertNull(comment.getAuthor()); } @Test public void testGetReviewFileItemComment() { IReview review = ReviewsFactory.eINSTANCE.createReview(); IReviewItemSet set = ReviewsFactory.eINSTANCE.createReviewItemSet(); review.getSets().add(set); IFileItem item = ReviewsFactory.eINSTANCE.createFileItem(); IComment comment = ReviewsFactory.eINSTANCE.createComment(); set.getItems().add(item); item.getComments().add(comment); assertThat(comment.getReview(), sameInstance(review)); } @Test public void testGetReviewComment() { IReview review = ReviewsFactory.eINSTANCE.createReview(); IComment comment = ReviewsFactory.eINSTANCE.createComment(); review.getComments().add(comment); assertThat(comment.getReview(), sameInstance(review)); } @Test public void testIsMineForRepositoryWithoutAccountAndCommentWithoutAuthor() { IComment comment = createReviewWithComment(createRepository()); assertThat(comment.isMine(), is(false)); } @Test public void testIsMineForRepositoryAndCommentWithTheSameUser() { IUser user = createUser(); IRepository repo = createRepositoryWithAccount(user); IComment comment = createReviewWithCommentAndAuthor(repo, user); assertThat(comment.isMine(), is(true)); } //the following tests should be removed when https://bugs.eclipse.org/bugs/show_bug.cgi?id=418878 is fixed. @Test public void testIsMineForRepositoryAndCommentWithUsersHavingTheSameEmail() { IUser user1 = createUser("foo@bar.com"); IUser user2 = createUser("foo@bar.com"); IRepository repo = createRepositoryWithAccount(user1); IComment comment = createReviewWithCommentAndAuthor(repo, user2); assertThat(comment.isMine(), is(true)); } @Test public void testIsMineForRepositoryWithAccountAndCommentWithoutAuthor() { IUser user = createUser("foo@bar.com"); IRepository repo = createRepositoryWithAccount(user); IComment comment = createReviewWithComment(repo); assertThat(comment.isMine(), is(false)); } @Test public void testIsMineForRepositoryAndCommentWithUsersHavingTheDifferentEmails() { IUser user1 = createUser("foo@bar.com"); IUser user2 = createUser("baz@bar.com"); IRepository repo = createRepositoryWithAccount(user1); IComment comment = createReviewWithCommentAndAuthor(repo, user2); assertThat(comment.isMine(), is(false)); } @Test public void testIsMineForRepositoryWithoutAccountAndCommentWithAuthor() { IUser user = createUser("foo@bar.com"); IRepository repo = createRepository(); IComment comment = createReviewWithCommentAndAuthor(repo, user); assertThat(comment.isMine(), is(false)); } @Test public void testIsMineForRepositoryWithAccountAndNullEmailAndCommentWithAuthor() { IUser user1 = createUser(null); IUser user2 = createUser("baz@bar.com"); IRepository repo = createRepositoryWithAccount(user1); IComment comment = createReviewWithCommentAndAuthor(repo, user2); assertThat(comment.isMine(), is(false)); } private static IRepository createRepository() { return ReviewsFactory.eINSTANCE.createRepository(); } private static IRepository createRepositoryWithAccount(IUser user) { IRepository repo = createRepository(); repo.setAccount(user); return repo; } private static IComment createReviewWithComment(IRepository repos) { IReview review = ReviewsFactory.eINSTANCE.createReview(); repos.getReviews().add(review); IReviewItemSet set = ReviewsFactory.eINSTANCE.createReviewItemSet(); review.getSets().add(set); IFileItem item = ReviewsFactory.eINSTANCE.createFileItem(); IComment comment = ReviewsFactory.eINSTANCE.createComment(); set.getItems().add(item); item.getComments().add(comment); return comment; } private static IComment createReviewWithCommentAndAuthor(IRepository repos, IUser user) { IComment comment = createReviewWithComment(repos); comment.setAuthor(user); return comment; } private static IUser createUser() { return ReviewsFactory.eINSTANCE.createUser(); } private static IUser createUser(String email) { IUser user = createUser(); user.setEmail(email); return user; } }