diff --git a/README.md b/README.md index 91452bf..16b644a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,5 @@ Create an information system allowing sportsmen to sign up for a sporting event. Team No. 4 - Petra Halová -- Martin Ondo-Eštok - Martin Šmíd - Jiří Tobiáš (team leader) \ No newline at end of file diff --git a/persistence/persistence.iml b/persistence/persistence.iml index 4286d11..80c0757 100644 --- a/persistence/persistence.iml +++ b/persistence/persistence.iml @@ -9,7 +9,7 @@ - + diff --git a/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDao.java b/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDao.java index febcf63..7da4fad 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDao.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDao.java @@ -28,6 +28,11 @@ public interface BaseDao { * @return Entity object with the input ID */ T findById(Long id); + /** + * + * Updates entity. + */ + void update(T entity); /** * Finds all entity objects in DB diff --git a/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDaoImpl.java b/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDaoImpl.java index 0958403..ca932cd 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDaoImpl.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/dao/BaseDaoImpl.java @@ -2,7 +2,6 @@ import cz.fi.muni.pa165.entity.BaseEntity; import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -25,6 +24,11 @@ public void delete(T entity) { entityManager.remove(entity); } + @Override + public void update(T entity) { + entityManager.merge(entity); + } + public T findByIdAndClass(Class entityClass, Long id) { return entityManager.find(entityClass, id); } diff --git a/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDao.java b/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDao.java index 2471a9e..9549046 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDao.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDao.java @@ -7,14 +7,5 @@ * @author jiritobias */ public interface SportsMenDao extends UserDao { - /** - * Add sportsMan to competiton. - */ - void addToCompetition(Competition competition, User sportsMan); - - /** - * Removes sportsmen from competition. - */ - void removeFromCompetition(Competition competition, User sportsMan); } diff --git a/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDaoImpl.java b/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDaoImpl.java index 8fcf4f2..435de46 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDaoImpl.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/dao/SportsMenDaoImpl.java @@ -20,24 +20,6 @@ public void create(User sportsMan) { entityManager.merge(sportsMan); } - @Override - public void addToCompetition(Competition competition, User sportsMan) { - assert competition != null; - assert sportsMan != null; - - sportsMan.addToCompetition(competition); - entityManager.merge(sportsMan); - } - - @Override - public void removeFromCompetition(Competition competition, User sportsMan) { - assert competition != null; - assert sportsMan != null; - - sportsMan.removeFromCompetition(competition); - entityManager.merge(sportsMan); - } - @Override public List findAll() { return entityManager.createQuery("SELECT s FROM User s where s.role = :role", User.class) diff --git a/persistence/src/main/java/cz/fi/muni/pa165/entity/Competition.java b/persistence/src/main/java/cz/fi/muni/pa165/entity/Competition.java index b07151f..536b17d 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/entity/Competition.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/entity/Competition.java @@ -59,17 +59,19 @@ public boolean equals(Object o) { Competition that = (Competition) o; - if (!getSport().equals(that.getSport())) { + if (!id.equals(that.id)) { return false; } - return getSportsMen().equals(that.getSportsMen()); + if (sport != null ? !sport.equals(that.sport) : that.sport != null) { + return false; + } + return sportsMen != null ? sportsMen.equals(that.sportsMen) : that.sportsMen == null; } @Override public int hashCode() { int result = id.hashCode(); result = 31 * result + (sport != null ? sport.hashCode() : 0); - result = 31 * result + sportsMen.hashCode(); return result; } } diff --git a/persistence/src/main/java/cz/fi/muni/pa165/entity/Sport.java b/persistence/src/main/java/cz/fi/muni/pa165/entity/Sport.java index 01b7213..a27abea 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/entity/Sport.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/entity/Sport.java @@ -46,7 +46,7 @@ public boolean equals(Object o) { if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { + if (o == null || !(o instanceof Sport)) { return false; } if (!super.equals(o)) { diff --git a/persistence/src/main/java/cz/fi/muni/pa165/entity/SportEvent.java b/persistence/src/main/java/cz/fi/muni/pa165/entity/SportEvent.java index 41c5d8d..ff33eab 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/entity/SportEvent.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/entity/SportEvent.java @@ -72,7 +72,10 @@ public Set getCompetitions() { } public void addCompetition(Competition competition) { - competitions.add(competition); + this.competitions.add(competition); + } + public void removeCompetition(Competition competition){ + this.competitions.remove(competition); } @Override diff --git a/persistence/src/main/java/cz/fi/muni/pa165/entity/User.java b/persistence/src/main/java/cz/fi/muni/pa165/entity/User.java index d8a06da..97a16d7 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/entity/User.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/entity/User.java @@ -14,7 +14,7 @@ * @author jiritobias */ @Entity -@Table(name = "USER_TABLE") +@Table(name = "Users") public class User extends BaseEntity { private static final String EMAIL_REGEX = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"; @@ -153,7 +153,7 @@ public boolean equals(Object o) { if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) { + if (o == null || !(o instanceof User)) { return false; } @@ -176,11 +176,14 @@ public boolean equals(Object o) { @Override public int hashCode() { - int result = id.hashCode(); + int result = id != null ? id.hashCode() : 0; result = 31 * result + passwordHash.hashCode(); result = 31 * result + email.hashCode(); result = 31 * result + firstname.hashCode(); result = 31 * result + lastname.hashCode(); + result = 31 * result + (birthdate != null ? birthdate.hashCode() : 0); + result = 31 * result + (phone != null ? phone.hashCode() : 0); + result = 31 * result + (address != null ? address.hashCode() : 0); return result; } } diff --git a/persistence/src/main/java/cz/fi/muni/pa165/enums/Gendre.java b/persistence/src/main/java/cz/fi/muni/pa165/enums/Gendre.java index 8739c42..704b22f 100644 --- a/persistence/src/main/java/cz/fi/muni/pa165/enums/Gendre.java +++ b/persistence/src/main/java/cz/fi/muni/pa165/enums/Gendre.java @@ -4,7 +4,7 @@ * @author jiritobias */ public enum Gendre { - MEN, + MAN, WOMAN, ANOTHER } diff --git a/persistence/src/test/java/cz/fi/muni/pa165/dao/BaseDaoImplTest.java b/persistence/src/test/java/cz/fi/muni/pa165/dao/BaseDaoImplTest.java index aafd308..d4213f6 100644 --- a/persistence/src/test/java/cz/fi/muni/pa165/dao/BaseDaoImplTest.java +++ b/persistence/src/test/java/cz/fi/muni/pa165/dao/BaseDaoImplTest.java @@ -2,6 +2,8 @@ import cz.fi.muni.pa165.PersistenceSampleApplicationContext; import cz.fi.muni.pa165.entity.Sport; +import cz.fi.muni.pa165.entity.User; +import cz.fi.muni.pa165.enums.Gendre; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; @@ -11,8 +13,6 @@ import org.springframework.transaction.annotation.Transactional; import org.testng.annotations.Test; import java.util.List; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; /** @@ -27,6 +27,14 @@ public class BaseDaoImplTest extends AbstractTestNGSpringContextTests { @Autowired BaseDao baseDao; + @Qualifier("userDaoImpl") + @Autowired + BaseDao userDao; + + @Qualifier("sportsMenDaoImpl") + @Autowired + BaseDao sportsMenDao; + @Test @Transactional public void createTest() { @@ -38,4 +46,36 @@ public void createTest() { List all = baseDao.findAll(); assertTrue(all.contains(sport)); } + + protected User createUser(String firstname) { + assert firstname != null; + + User user = buildUser(firstname); + userDao.create(user); + + return user; + } + + protected User buildUser(String firstname) { + assert firstname != null; + + User user = new User(); + user.setPasswordHash("psswd"); + user.setFirstname(firstname); + user.setLastname("Horolezec"); + user.setEmail("fake@gmail.com"); + user.setGendre(Gendre.MAN); + user.setAddress("Pricna ulice"); + + return user; + } + + protected User createSportsMen(String firstname) { + assert firstname != null; + + User sportsMen = buildUser("SportsMen"); + sportsMenDao.create(sportsMen); + + return sportsMen; + } } \ No newline at end of file diff --git a/persistence/src/test/java/cz/fi/muni/pa165/dao/CompetitionDaoImplTest.java b/persistence/src/test/java/cz/fi/muni/pa165/dao/CompetitionDaoImplTest.java index ef8ce14..1b44d54 100644 --- a/persistence/src/test/java/cz/fi/muni/pa165/dao/CompetitionDaoImplTest.java +++ b/persistence/src/test/java/cz/fi/muni/pa165/dao/CompetitionDaoImplTest.java @@ -39,7 +39,7 @@ public void setUp() { sportman.setLastname("Novy"); sportman.setEmail("test@test.com"); sportman.setAddress("address"); - sportman.setGendre(Gendre.MEN); + sportman.setGendre(Gendre.MAN); sportman.setRole(Role.SPORTSMEN); sportman.setPasswordHash("hash"); diff --git a/persistence/src/test/java/cz/fi/muni/pa165/dao/SportEventDaoImplTest.java b/persistence/src/test/java/cz/fi/muni/pa165/dao/SportEventDaoImplTest.java index 87d8d17..583b431 100644 --- a/persistence/src/test/java/cz/fi/muni/pa165/dao/SportEventDaoImplTest.java +++ b/persistence/src/test/java/cz/fi/muni/pa165/dao/SportEventDaoImplTest.java @@ -1,22 +1,34 @@ package cz.fi.muni.pa165.dao; +import cz.fi.muni.pa165.entity.Competition; +import cz.fi.muni.pa165.entity.Sport; import cz.fi.muni.pa165.entity.SportEvent; +import cz.fi.muni.pa165.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Date; import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +/** + * @author jiritobias + */ public class SportEventDaoImplTest extends BaseDaoImplTest { @Autowired SportEventDao sportEventDao; + @Autowired + SportDao sportDao; + @Autowired + SportsMenDao sportsMenDao; + @Autowired + CompetitionDao competitionDao; private SportEvent sportEvent1; private SportEvent sportEvent2; + private Competition competition; @BeforeMethod public void createEvents() { @@ -33,6 +45,18 @@ public void createEvents() { sportEventDao.create(sportEvent1); sportEventDao.create(sportEvent2); + Sport sport = new Sport(); + sport.setName("Ice hockey"); + sportDao.create(sport); + + User pepik = createSportsMen("Pepik"); + + competition = new Competition(); + competition.setSport(sport); + competition.addSportman(pepik); + + competitionDao.create(competition); + } @Test @@ -59,11 +83,47 @@ public void delete() { } @Test - public void fail(){ + public void fail() { SportEvent sportEvent = new SportEvent(); // hashcode returns NullPointerException assertThatThrownBy(() -> sportEventDao.create(sportEvent)) .isInstanceOf(NullPointerException.class); } + @Test + public void addAndRemoveCompetitonTest() { + SportEvent sportEvent = new SportEvent(); + sportEvent.setName("ME"); + sportEvent.setPlace("Prague"); + sportEvent.setDate(new Date()); + + sportEvent.addCompetition(competition); + sportEventDao.create(sportEvent); + + SportEvent found = sportEventDao.findById(sportEvent.getId()); + + assertThat( + found + .getCompetitions() + .size()) + .isOne(); + + assertThat( + found + .getCompetitions() + .contains(competition)) + .isTrue(); + + sportEvent.removeCompetition(competition); + sportEventDao.update(sportEvent); + + SportEvent foundById = sportEventDao.findById(sportEvent.getId()); + assertThat( + foundById + .getCompetitions() + .size()) + .isZero(); + + } + } \ No newline at end of file diff --git a/persistence/src/test/java/cz/fi/muni/pa165/dao/SportsMenDaoImplTest.java b/persistence/src/test/java/cz/fi/muni/pa165/dao/SportsMenDaoImplTest.java index ecbc389..6cc7e3d 100644 --- a/persistence/src/test/java/cz/fi/muni/pa165/dao/SportsMenDaoImplTest.java +++ b/persistence/src/test/java/cz/fi/muni/pa165/dao/SportsMenDaoImplTest.java @@ -10,6 +10,7 @@ import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import static org.testng.Assert.*; @@ -33,7 +34,7 @@ public void setUp() { sportsmen.setRole(Role.SPORTSMEN); sportsmen.setFirstname("Martin"); sportsmen.setLastname("Novy"); - sportsmen.setGendre(Gendre.MEN); + sportsmen.setGendre(Gendre.MAN); sportsmen.setAddress("address"); sportsmen.setEmail("abc@test.com"); sportsmen.setPasswordHash("password"); @@ -56,15 +57,20 @@ public void testAddToCompetition() { Competition competition = new Competition(); competitionDao.create(competition); + sportsmen.addToCompetition(competition); sportsMenDao.create(sportsmen); - sportsMenDao.addToCompetition(competition, sportsmen); Competition foundCompetition = competitionDao.findById(competition.getId()); Set sportsmenInComp = foundCompetition.getSportsMen(); assertTrue(sportsmen.getCompetitions().contains(competition)); assertEquals(sportsmenInComp.size(), 1); - assertTrue(sportsmenInComp.contains(sportsmen)); + + Optional first = sportsmenInComp + .stream() + .findFirst(); + assertTrue(first.isPresent()); + assertTrue(first.get().equals(sportsmen)); } @Test @@ -76,16 +82,15 @@ public void testRemoveFromCompetition() { sportsMenDao.create(sportsmen); - sportsMenDao.removeFromCompetition(competition, sportsmen); assertEquals(sportsMenDao.findById(sportsmen.getId()).getCompetitions().size(), 0); - sportsMenDao.addToCompetition(competition, sportsmen); - sportsMenDao.addToCompetition(competition1, sportsmen); - sportsMenDao.removeFromCompetition(competition, sportsmen); + sportsmen.addToCompetition(competition); + sportsmen.addToCompetition(competition1); + sportsmen.removeFromCompetition(competition); assertEquals(sportsmen.getCompetitions().size(), 1); Competition found = competitionDao.findById(competition1.getId()); - + Set sportsmenInComp = found.getSportsMen(); assertTrue(sportsmen.getCompetitions().contains(competition1)); diff --git a/persistence/src/test/java/cz/fi/muni/pa165/dao/UserDaoTest.java b/persistence/src/test/java/cz/fi/muni/pa165/dao/UserDaoTest.java index b2e044e..746b3d6 100755 --- a/persistence/src/test/java/cz/fi/muni/pa165/dao/UserDaoTest.java +++ b/persistence/src/test/java/cz/fi/muni/pa165/dao/UserDaoTest.java @@ -1,12 +1,14 @@ package cz.fi.muni.pa165.dao; import cz.fi.muni.pa165.entity.User; +import cz.fi.muni.pa165.enums.Gendre; import cz.fi.muni.pa165.enums.Role; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.List; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.testng.Assert.assertEquals; /** @@ -25,7 +27,7 @@ public void createUsers() { user.setEmail("fake@gmail.com"); user.setFirstname("Honza"); user.setLastname("Novotny"); - + user.setGendre(Gendre.MAN); userDao.create(user); } @@ -37,4 +39,16 @@ public void findAll() { assertEquals(allSportsMen.get(0).getRole(), Role.USER); } + @Test + public void findByGendre() { + List womem = userDao.findByGendre(Gendre.WOMAN); + List men = userDao.findByGendre(Gendre.MAN); + + assertThat(womem.size() == 0); + assertThat(men.size() == 1); + assertThat(men.get(0).getFirstname()) + .isEqualTo("Honza"); + + } + } \ No newline at end of file