package com.huixinpn.dionysus;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import com.huixinpn.dionysus.domain.appointment.Appointment;
import com.huixinpn.dionysus.domain.appointment.AppointmentApproach;
import com.huixinpn.dionysus.domain.article.Article;
import com.huixinpn.dionysus.domain.article.Category;
import com.huixinpn.dionysus.domain.article.Comment;
import com.huixinpn.dionysus.domain.course.Course;
import com.huixinpn.dionysus.domain.course.CourseState;
import com.huixinpn.dionysus.domain.user.Consultant;
import com.huixinpn.dionysus.domain.user.Inbox;
import com.huixinpn.dionysus.domain.user.Notification;
import com.huixinpn.dionysus.domain.user.User;
public class NotificationTest extends AbstractPersistentTest {
@Test
public void testSendNotificationOnArticleComment() {
Article article = new Article("notifiable article title", "this is article body");
Category category = new Category("notification");
article.setCategory(category);
entityManager.persist(article);
User user = article.getCreatedBy();
Assert.assertEquals(user.getUsername(), DEFAULT_USERNAME);
String username = UUID.randomUUID().toString();
runAs(username);
Comment comment = new Comment("from some one", article);
entityManager.persist(comment);
Inbox checkingInbox = user.getInbox();
entityManager.refresh(user);
Collection<Notification> notifications = checkingInbox.getNotifications();
Assert.assertTrue(notifications.size() >= 1);
}
@Test
public void testSendNotificationOnCourse() {
Course course = new Course("course title", "course description");
List<User> users = new ArrayList<User>();
for (int i = 0; i < 3; i++) {
users.add(createUser(UUID.randomUUID().toString()));
}
course.setUsers(users);
course.setState(CourseState.IN_PROGRESS);
entityManager.persist(course);
for (User user : users) {
entityManager.refresh(user);
Assert.assertTrue(user.getInbox().getNotifications().size() >= 1);
}
}
@Test
public void testSendNotificationOnAppointment(){
User user = createUser(UUID.randomUUID().toString());
SecurityContext context = SecurityContextHolder.getContext();
context.setAuthentication(new UsernamePasswordAuthenticationToken(user, "some token"));
Consultant consultant = new Consultant("consultant","password");
consultantRepository.save(consultant);
String name="hehe";
String phone="233";
Integer age = 12;
String gender = "male";
Appointment appointment = new Appointment(user, consultant, AppointmentApproach.OFFLINE,Calendar.getInstance(),"reason", name, age, phone, gender);
entityManager.persist(appointment);
entityManager.refresh(user);
Assert.assertTrue(user.getInbox().getNotifications().size() >= 1);
}
}