From 3aeb4eb4f8880f7e5799364c7b2f0ade44ccde25 Mon Sep 17 00:00:00 2001 From: Leonard <Leonard@Leonard.Leo> Date: Tue, 16 Jun 2020 12:49:45 +0300 Subject: [PATCH] more testttttttttttttttt --- core/database.mv.db | Bin 122880 -> 167936 bytes .../Model/Map/Overworld.java | 21 +++-- .../Test/Server/Persistence/CrewDAOTest.java | 1 + .../Server/Persistence/OverworldDAOTest.java | 54 +++++++++++++ .../Server/Persistence/PlanetDAOTest.java | 73 ++++++++++++++++++ .../Server/Persistence/TraderDAOTest.java | 2 +- 6 files changed, 138 insertions(+), 13 deletions(-) create mode 100644 core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/OverworldDAOTest.java create mode 100644 core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/PlanetDAOTest.java diff --git a/core/database.mv.db b/core/database.mv.db index ca641dab7b3779b5718bac20e7526a27f31ae4fa..6a79fd6fa0459afb5b4d59b08e63d215d31e2170 100644 GIT binary patch literal 167936 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 YKL4K<@c)@Gu$!v386n8K{;$XWe^j~I7XSbN delta 12788 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 Q!gPhlrUS(K`F{6b0LULoA^-pY diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java index ebde8497..1462415c 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java @@ -1,10 +1,7 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.Map; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; +import lombok.*; import javax.persistence.*; import java.io.Serializable; @@ -17,6 +14,8 @@ import java.util.Map; @NamedQueries({ @NamedQuery(name = "Overworld.getByUsername", query = "select o from Overworld o where o.associatedUser =: name") }) +@Getter +@Setter public class Overworld implements Serializable { /** ID */ @@ -24,21 +23,19 @@ public class Overworld implements Serializable { @Id private int id; + /** Seed */ + @NonNull + private int seed; + /** Username used as ID */ @NonNull private String associatedUser; /** Stores planet and their location on the map */ - @OneToMany + @OneToMany(cascade = CascadeType.ALL) private Map<String,Planet> planetMap; /** The start planet */ - @NonNull - @OneToOne + @OneToOne(cascade = CascadeType.ALL) private Planet startPlanet; - - /** Constructor */ - public Overworld(int seed) { - planetMap = new HashMap<>(); - } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java index 4d91f5c2..943f53ae 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java @@ -12,6 +12,7 @@ import javax.persistence.EntityManager; import javax.xml.crypto.Data; import java.util.UUID; +/** Test the crew database access object */ public class CrewDAOTest { diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/OverworldDAOTest.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/OverworldDAOTest.java new file mode 100644 index 00000000..f0688aa0 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/OverworldDAOTest.java @@ -0,0 +1,54 @@ +package com.galaxytrucker.galaxytruckerreloaded.Test.Server.Persistence; + +import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld; +import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database; +import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.OverworldDAO; +import org.junit.Assert; +import org.junit.Test; + +import javax.persistence.EntityManager; +import java.util.UUID; + +/** Test the overworld database access object */ +public class OverworldDAOTest { + + /** EntityManager */ + private EntityManager entityManager = Database.getEntityManager(); + + /** OverworldDAO */ + private OverworldDAO overworldDAO = new OverworldDAO(); + + /** Test adding a new overworld to the database */ + @Test + public void testPersist() { + try { + Overworld overworld = new Overworld(UUID.randomUUID().hashCode(), UUID.randomUUID().hashCode(), "test"); + overworldDAO.persist(overworld); + entityManager.getTransaction().begin(); + Overworld o2 = entityManager.find(Overworld.class,overworld.getId()); + entityManager.getTransaction().commit(); + Assert.assertEquals(overworld.getSeed(),o2.getSeed()); + } + catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } + + /** Test removing an existing overworld from the database */ + @Test + public void testRemove(){ + try { + Overworld overworld = new Overworld(UUID.randomUUID().hashCode(),UUID.randomUUID().hashCode(),"test"); + overworldDAO.persist(overworld); + overworldDAO.remove(overworld); + entityManager.getTransaction().begin(); + Assert.assertNull(entityManager.find(Overworld.class,overworld.getId())); + entityManager.getTransaction().commit(); + } + catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/PlanetDAOTest.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/PlanetDAOTest.java new file mode 100644 index 00000000..bd51e4fb --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/PlanetDAOTest.java @@ -0,0 +1,73 @@ +package com.galaxytrucker.galaxytruckerreloaded.Test.Server.Persistence; + +import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet; +import com.galaxytrucker.galaxytruckerreloaded.Model.Map.PlanetEvent; +import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; +import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database; +import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.PlanetDAO; +import org.junit.Assert; +import org.junit.Test; + +import javax.persistence.EntityManager; +import java.util.ArrayList; + +/** Test the planet database access object */ +public class PlanetDAOTest { + + /** Entity manager */ + private EntityManager entityManager = Database.getEntityManager(); + + /** Planet DAO */ + private PlanetDAO planetDAO = new PlanetDAO(); + + /** Test adding a new planet to the database */ + @Test + public void testPersist(){ + Planet planet = new Planet(TraderDAOTest.planetNameGenerator(),0,0, PlanetEvent.VOID,new ArrayList<Ship>()); + try { + planetDAO.persist(planet); + entityManager.getTransaction().begin(); + Assert.assertEquals(planet.getName(),entityManager.find(Planet.class,planet.getName()).getName()); + entityManager.getTransaction().commit(); + } + catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } + + /** Test editing a planet in the database */ + @Test + public void testEdit(){ + Planet planet = new Planet(TraderDAOTest.planetNameGenerator(),0,0, PlanetEvent.VOID,new ArrayList<Ship>()); + try { + planetDAO.persist(planet); + planet.setEvent(PlanetEvent.SHOP); + planetDAO.update(planet); + entityManager.getTransaction().begin(); + Assert.assertEquals(PlanetEvent.SHOP,entityManager.find(Planet.class,planet.getName()).getEvent()); + entityManager.getTransaction().commit(); + } + catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } + + /** Test removing a planet from the database */ + @Test + public void testRemove(){ + Planet planet = new Planet(TraderDAOTest.planetNameGenerator(),0,0, PlanetEvent.VOID,new ArrayList<Ship>()); + try { + planetDAO.persist(planet); + planetDAO.remove(planet); + entityManager.getTransaction().begin(); + Assert.assertNull(entityManager.find(Planet.class,planet.getName())); + entityManager.getTransaction().commit(); + } + catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/TraderDAOTest.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/TraderDAOTest.java index de577e1b..72f50bfc 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/TraderDAOTest.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/TraderDAOTest.java @@ -97,7 +97,7 @@ public class TraderDAOTest { /** Random planet name generator * @return a random planet name */ - private String planetNameGenerator(){ + public static String planetNameGenerator(){ Random random = new Random(); String alphabet = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; alphabet = alphabet.replace(',',' '); -- GitLab