/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.services;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import net.jforum.core.exceptions.ValidationException;
import net.jforum.entities.PrivateMessage;
import net.jforum.entities.PrivateMessageType;
import net.jforum.entities.User;
import net.jforum.repository.PrivateMessageRepository;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author Rafael Steil, Jonatan Cloutier
*/
@RunWith(MockitoJUnitRunner.class)
public class PrivateMessageServiceTestCase {
@Mock private PrivateMessageRepository repository;
@InjectMocks private PrivateMessageService service;
private PrivateMessage pm = new PrivateMessage();
@Test
public void deleteIsSenderTypeSentShouldAccept() {
when(repository.get(1)).thenReturn(pm);
pm.setToUser(this.newUser(3)); pm.setFromUser(this.newUser(2)); pm.setType(PrivateMessageType.SENT);
service.delete(this.newUser(2), 1);
verify(repository).remove(pm);
}
@Test
public void deleteIsRecipientTypeNotSentShouldAccept() {
when(repository.get(1)).thenReturn(pm);
pm.setToUser(this.newUser(3)); pm.setFromUser(this.newUser(2)); pm.setType(PrivateMessageType.READ);
service.delete(this.newUser(3), 1);
verify(repository).remove(pm);
}
@Test
public void deleteIsSenderTypeNotSentShouldIgnore() {
when(repository.get(1)).thenReturn(pm);
pm.setToUser(this.newUser(3)); pm.setFromUser(this.newUser(2)); pm.setType(PrivateMessageType.NEW);
service.delete(this.newUser(2), 1);
}
@Test
public void deleteIsRecipientTypeSentShouldIgnore() {
when(repository.get(1)).thenReturn(pm);
pm.setToUser(this.newUser(3)); pm.setFromUser(this.newUser(2)); pm.setType(PrivateMessageType.SENT);
service.delete(this.newUser(3), 1);
}
@Test
public void deleteNotRecipientNotSenderShouldIgnore() {
when(repository.get(1)).thenReturn(pm);
pm.setToUser(this.newUser(2)); pm.setFromUser(this.newUser(3));
service.delete(this.newUser(1), 1);
}
@Test
public void deleteNullIdsShouldIgnore() {
service.delete(null, null);
}
@Test
public void sendWithNullDateShouldForceAValue() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(new User());
pm.setText("text");
pm.setSubject("subject");
pm.setDate(null);
service.send(pm);
assertNotNull(pm.getDate());
}
@Test
public void sendExpectSuccess() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(new User());
pm.setText("text");
pm.setSubject("subject");
service.send(pm);
verify(repository).add(notNull(PrivateMessage.class));
}
@Test(expected = ValidationException.class)
public void textNullExpectsException() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(new User());
pm.setText(null);
pm.setSubject("subject");
service.send(pm);
}
@Test(expected = ValidationException.class)
public void textEmptyExpectsException() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(new User());
pm.setText("");
pm.setSubject("subject");
service.send(pm);
}
@Test(expected = ValidationException.class)
public void subjectEmptyExpectsException() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(new User());
pm.setText("text");
pm.setSubject("");
service.send(pm);
}
@Test(expected = ValidationException.class)
public void subjectNullExpectsException() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(new User());
pm.setText("text");
pm.setSubject(null);
service.send(pm);
}
@Test(expected = ValidationException.class)
public void toUserNullExpectsException() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(new User());
pm.setToUser(null);
pm.setText("text");
pm.setSubject("subject");
service.send(pm);
}
@Test(expected = ValidationException.class)
public void fromUserNullExpectsException() {
PrivateMessage pm = new PrivateMessage();
pm.setFromUser(null);
pm.setToUser(new User());
pm.setText("text");
pm.setSubject("subject");
service.send(pm);
}
private User newUser(int id) {
User user = new User(); user.setId(id);
return user;
}
}