diff --git a/src/main/java/ch/zhaw/gartenverwaltung/io/JsonGardenPlan.java b/src/main/java/ch/zhaw/gartenverwaltung/io/JsonGardenPlan.java index 5a25a0a..3100301 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/io/JsonGardenPlan.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/io/JsonGardenPlan.java @@ -20,7 +20,7 @@ import java.util.Map; import java.util.Optional; public class JsonGardenPlan implements GardenPlan { - private final URL dataSource = getClass().getResource("user-crops.json"); + private final URL dataSource; private IdProvider idProvider; private Map cropMap = Collections.emptyMap(); @@ -40,7 +40,21 @@ public class JsonGardenPlan implements GardenPlan { } /** - * @see GardenPlan#getCrops() + * Default constructor + */ + public JsonGardenPlan() { + this.dataSource = getClass().getResource("user-crops.json"); + } + + /** + * Constructor to use a specified {@link URL} as a {@link #dataSource} + * @param dataSource A {@link URL} to the file to be used as a data source + */ + public JsonGardenPlan(URL dataSource) { + this.dataSource = dataSource; + } + /** + * {@inheritDoc} */ @Override public List getCrops() throws IOException { @@ -51,7 +65,7 @@ public class JsonGardenPlan implements GardenPlan { } /** - * @see GardenPlan#getCropById(long) + * {@inheritDoc} */ @Override public Optional getCropById(long id) throws IOException { @@ -62,7 +76,7 @@ public class JsonGardenPlan implements GardenPlan { } /** - * @see GardenPlan#saveCrop(Crop) + * {@inheritDoc} * * Saves a crop to the database. * If no {@link Crop#cropId} is set, one will be generated and @@ -79,7 +93,7 @@ public class JsonGardenPlan implements GardenPlan { } /** - * @see GardenPlan#removeCrop(Crop) + * {@inheritDoc} */ @Override public void removeCrop(Crop crop) throws IOException { diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java b/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java index fbd6286..e8f539f 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java @@ -1,6 +1,7 @@ package ch.zhaw.gartenverwaltung.types; import java.time.LocalDate; +import java.util.Objects; import java.util.Optional; public class Crop { @@ -41,6 +42,24 @@ public class Crop { public LocalDate getStartDate() { return startDate; } public double getArea() { return area; } + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (other instanceof Crop otherCrop) { + return Objects.equals(this.cropId, otherCrop.cropId) && + plantId == otherCrop.plantId && + startDate != null && startDate.equals(otherCrop.startDate) && + area == otherCrop.area; + } + return false; + } + + @Override + public int hashCode() { + int startCode = startDate != null ? startDate.hashCode() : 0; + return (int) plantId ^ (startCode << 16); + } + @Override public String toString() { return String.format("Crop [ cropId: %d, plantId: %d, startDate: %s, area: %f ]", diff --git a/src/test/java/ch/zhaw/gartenverwaltung/io/JsonPlantDatabaseTest.java b/src/test/java/ch/zhaw/gartenverwaltung/io/JsonPlantDatabaseTest.java index 24b4b53..b8bbeb3 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/io/JsonPlantDatabaseTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/io/JsonPlantDatabaseTest.java @@ -8,7 +8,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -16,7 +15,6 @@ import java.util.stream.Collectors; public class JsonPlantDatabaseTest { PlantDatabase testDatabase; - SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy"); @BeforeEach void connectToDb() { @@ -30,9 +28,7 @@ public class JsonPlantDatabaseTest { List testList; try { testList = testDatabase.getPlantList(HardinessZone.ZONE_8A); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (HardinessZoneNotSetException e) { + } catch (IOException | HardinessZoneNotSetException e) { throw new RuntimeException(e); } Assertions.assertEquals(3, testList.size()); @@ -48,9 +44,7 @@ public class JsonPlantDatabaseTest { List testList; try { testList = testDatabase.getPlantList(HardinessZone.ZONE_1A); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (HardinessZoneNotSetException e) { + } catch (IOException | HardinessZoneNotSetException e) { throw new RuntimeException(e); } Assertions.assertEquals(0, testList.size()); @@ -64,9 +58,7 @@ public class JsonPlantDatabaseTest { Optional testPlant; try { testPlant = testDatabase.getPlantById(HardinessZone.ZONE_8A, 1); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (HardinessZoneNotSetException e) { + } catch (IOException | HardinessZoneNotSetException e) { throw new RuntimeException(e); } Assertions.assertTrue(testPlant.isPresent()); @@ -75,20 +67,12 @@ public class JsonPlantDatabaseTest { @Test @DisplayName("Check whether single access respects zone correctly.") - void getPlantByIdAndWrongZone() { - Optional testPlant; - try { - testPlant = testDatabase.getPlantById(HardinessZone.ZONE_1A, 1); - Assertions.assertFalse(testPlant.isPresent()); - testPlant = testDatabase.getPlantById(HardinessZone.ZONE_8A, 1); - Assertions.assertTrue(testPlant.isPresent()); - - } catch (IOException e) { - throw new RuntimeException(e); - } catch (HardinessZoneNotSetException e) { - throw new RuntimeException(e); - } + void getPlantByIdAndWrongZone() throws HardinessZoneNotSetException, IOException { + Optional testPlant = testDatabase.getPlantById(HardinessZone.ZONE_1A, 1); + Assertions.assertFalse(testPlant.isPresent()); + testPlant = testDatabase.getPlantById(HardinessZone.ZONE_8A, 1); Assertions.assertTrue(testPlant.isPresent()); + Assertions.assertEquals("Early Carrot", testPlant.get().name()); } @@ -98,9 +82,7 @@ public class JsonPlantDatabaseTest { Optional testPlant; try { testPlant = testDatabase.getPlantById(HardinessZone.ZONE_8A, 99); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (HardinessZoneNotSetException e) { + } catch (IOException | HardinessZoneNotSetException e) { throw new RuntimeException(e); } Assertions.assertFalse(testPlant.isPresent()); diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/io/test-user-crops.json b/src/test/resources/ch/zhaw/gartenverwaltung/io/test-user-crops.json new file mode 100644 index 0000000..ebd1d2d --- /dev/null +++ b/src/test/resources/ch/zhaw/gartenverwaltung/io/test-user-crops.json @@ -0,0 +1,20 @@ +[ + { + "cropId": 0, + "plantId": 1, + "startDate": "2023-02-25", + "area": 0.5 + }, + { + "cropId": 1, + "plantId": 1, + "startDate": "2023-03-01", + "area": 0.5 + }, + { + "cropId": 2, + "plantId": 0, + "startDate": "2023-03-25", + "area": 1.5 + } +] \ No newline at end of file diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/io/user-crops.json b/src/test/resources/ch/zhaw/gartenverwaltung/io/user-crops.json new file mode 100644 index 0000000..32960f8 --- /dev/null +++ b/src/test/resources/ch/zhaw/gartenverwaltung/io/user-crops.json @@ -0,0 +1,2 @@ +[ +] \ No newline at end of file