package unit;
import java.util.Date;
import models.Attendee;
import models.Coordinate;
import models.Meeting;
import models.User;
import models.Attendee.MeetingResponse;
import models.helpers.MeetingHelper;
import org.junit.Before;
import org.junit.Test;
import play.db.jpa.JPA;
import play.test.Fixtures;
import play.test.UnitTest;
/**
* Tests the functions of the Meeting and Attendee models to verify their integrity.
*
* @author Alex Jarvis axj7@aber.ac.uk
*/
public class MeetingAndAttendeeTest extends UnitTest {
Meeting meeting;
User owner;
User attendeeUser;
@Before
public void setup() {
Fixtures.deleteDatabase();
meeting = new Meeting();
meeting.time = new Date();
Coordinate coordinate = new Coordinate(new Double(52.416117), new Double(-4.083803));
coordinate.create();
meeting.place = coordinate;
owner = new User();
owner.create();
meeting.owner = owner;
meeting.title = "Meeting title";
meeting.description = "Meeting description";
meeting.create();
// 2nd User to be added to the meeting as an attendee
attendeeUser = new User();
attendeeUser.create();
}
@Test
public void testBasicAttributes() {
Meeting sameMeeting = Meeting.findById(meeting.id);
assertNotNull(sameMeeting);
assertEquals(sameMeeting.time, meeting.time);
assertEquals(sameMeeting.place, meeting.place);
assertEquals(sameMeeting.owner, meeting.owner);
assertEquals(sameMeeting.title, meeting.title);
assertEquals(sameMeeting.description, meeting.description);
}
/**
* If the JPA are not used on the model classes, then they will return null objects.
*/
@Test
public void testRelations() {
assertNotNull(meeting.place);
assertNotNull(meeting.attendees);
assertNotNull(meeting.owner);
}
@Test
public void testAttendeesSize() {
assertEquals(0, meeting.attendees.size());
}
@Test
public void testAddAttendee() {
MeetingHelper.createAttendee(meeting, attendeeUser);
meeting = Meeting.all().first();
assertEquals(1, meeting.attendees.size());
Attendee attendee = meeting.attendees.get(0);
assertEquals(meeting, attendee.meeting);
assertEquals(attendeeUser, attendee.user);
}
@Test
public void testRemoveAttendee() {
testAddAttendee();
assertTrue(MeetingHelper.removeAttendee(meeting, attendeeUser));
assertEquals(0, meeting.attendees.size());
}
@Test
public void testAcceptMeetingRequest() {
testAddAttendee();
Attendee attendee = meeting.attendees.get(0);
assertTrue(MeetingHelper.acceptMeetingRequest(meeting, attendee.user));
assertEquals(attendee.rsvp, MeetingResponse.YES);
}
@Test
public void testDeclineMeetingRequest() {
testAddAttendee();
Attendee attendee = meeting.attendees.get(0);
assertTrue(MeetingHelper.declineMeetingRequest(meeting, attendee.user));
assertEquals(attendee.rsvp, MeetingResponse.NO);
}
@Test
public void testUpdateAttendeesMinutesBefore() {
testAddAttendee();
Attendee attendee = meeting.attendees.get(0);
assertTrue(MeetingHelper.updateAttendeesMinutesBefore(15, meeting, attendee.user));
assertEquals(attendee.minutesBefore, Integer.valueOf(15));
}
@Test
public void testUpdateAttendeesMinutesBeforeWhenNotAttendee() {
User user = new User();
user.create();
assertFalse(MeetingHelper.updateAttendeesMinutesBefore(15, meeting, user));
}
@Test
public void testDeleteMeeting() {
MeetingHelper.createAttendee(meeting, attendeeUser);
Long ownerId = meeting.owner.id;
Long attendeeId = attendeeUser.meetingsRelated.get(0).id;
meeting.delete();
meeting = meeting.findById(meeting.id);
assertNull(meeting);
owner = owner.findById(ownerId);
assertNotNull(owner);
assertEquals(0, owner.meetingsCreated.size());
assertEquals(0, owner.meetingsRelated.size());
Attendee attendee = Attendee.findById(attendeeId);
assertNull(attendee);
}
}