package org.dicadeveloper.weplantaforest.admin.event;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import org.dicadeveloper.weplantaforest.admin.cart.Cart;
import org.dicadeveloper.weplantaforest.admin.cart.CartRepository;
import org.dicadeveloper.weplantaforest.admin.code.Code;
import org.dicadeveloper.weplantaforest.admin.code.CodeRepository;
import org.dicadeveloper.weplantaforest.admin.project.Project;
import org.dicadeveloper.weplantaforest.admin.team.Team;
import org.dicadeveloper.weplantaforest.admin.testSupport.DbInjecter;
import org.dicadeveloper.weplantaforest.admin.treeType.TreeType;
import org.dicadeveloper.weplantaforest.admin.user.User;
import org.dicadeveloper.weplantaforest.admin.user.UserRepository;
import org.dicadeveloper.weplantaforest.common.errorHandling.IpatException;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest({ "spring.profiles.active=test" })
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
public class EventServiceTest {
@Autowired
private EventService _eventService;
@Autowired
private EventRepository _eventRepository;
@Autowired
private CodeRepository _codeRepository;
@Autowired
private CartRepository _cartRepository;
@Autowired
private UserRepository _userRepository;
@Autowired
private DbInjecter _dbInjecter;
@Test
public void testACreateEvent() {
User user = _dbInjecter.injectUser("EventUser");
Team team = _dbInjecter.injectTeam("EventTeam", "EventUser");
Event event = new Event();
event.setName("Event");
event.setUser(user);
event.setTeam(team);
try {
_eventService.create(event);
} catch (IpatException e) {
fail(String.format("Error when creating Event\nerrorCode: %s", e.getErrorInfos().get(0).getErrorCode()));
}
assertEquals(1L, _eventRepository.count());
}
@Test
public void testBUpdateEvent() {
String updatedEventName = "Event update";
Event eventToUpdate = _eventRepository.findOne(1L);
eventToUpdate.setName(updatedEventName);
try {
_eventService.update(eventToUpdate);
} catch (IpatException e) {
fail(String.format("Error when updating event\nerrorCode: %s", e.getErrorInfos().get(0).getErrorCode()));
}
assertEquals(1L, _eventRepository.count());
Event updatedEvent = _eventRepository.findOne(1L);
assertEquals(updatedEventName, updatedEvent.getName());
}
@Test
public void testCGenerateCodesForEvent() {
User projectOwner = _dbInjecter.injectUser("project User");
User eventUser = _userRepository.findByName("EventUser");
Project project = _dbInjecter.injectProject("Event project", projectOwner, "Event project description", true, 1.0f, 1.0f);
TreeType treeType = _dbInjecter.injectTreeType("eventTree", "eventtree description", 0.5);
_dbInjecter.injectProjectArticle(treeType, project, 1.0);
List<Long> cartIds = new ArrayList<Long>();
for (int i = 0; i < 100; i++) {
Long treeId = _dbInjecter.injectTreeToProject(treeType, eventUser, 1, System.currentTimeMillis(), project);
Long cartId = _dbInjecter.injectCart(eventUser, treeId);
cartIds.add(cartId);
}
try {
_eventService.generateCodes(1L, cartIds);
} catch (IpatException e) {
fail(String.format("Error while creating Codes for Event\nerrorCode: %s", e.getErrorInfos().get(0).getErrorCode()));
}
assertEquals(100, _codeRepository.count());
for (Code code : _codeRepository.findAll()) {
assertEquals(1L, code.getEvent().getId().longValue());
}
for (Cart cart : _cartRepository.findAll()) {
assertNotNull(cart.getCode());
assertEquals(1L, cart.getEvent().getId().longValue());
}
}
@Test
public void testDDeleteEvent() {
try {
_eventService.delete(1L);
} catch (IpatException e) {
fail(String.format("Error in deleting event\nerrorCode: %s", e.getErrorInfos().get(0).getErrorCode()));
}
assertNull(_eventRepository.findOne(1L));
assertEquals(0, _cartRepository.count());
assertEquals(0, _codeRepository.count());
}
}