diff --git a/pom.xml b/pom.xml index 59af88c90aaa0ad7314170f726b2d6cecea95b14..147abf625e8b57ffd5052261efec12dbd8a99f05 100644 --- a/pom.xml +++ b/pom.xml @@ -71,8 +71,6 @@ <natorder.version>1.1.2</natorder.version> <h2database.version>1.4.199</h2database.version> <itextpdf.version>5.5.13.2</itextpdf.version> - <usertype-core.version>7.0.0.CR1</usertype-core.version> - <joda-time.version>2.10.13</joda-time.version> <vanilla-picker.version>2.12.1</vanilla-picker.version> <jacoco-maven-plugin.version>0.8.7</jacoco-maven-plugin.version> <dependency-check-maven.version>6.5.3</dependency-check-maven.version> @@ -124,18 +122,6 @@ <artifactId>spring-boot-starter-validation</artifactId> </dependency> - <dependency> - <groupId>joda-time</groupId> - <artifactId>joda-time</artifactId> - <version>${joda-time.version}</version> - </dependency> - - <dependency> - <groupId>org.jadira.usertype</groupId> - <artifactId>usertype.core</artifactId> - <version>${usertype-core.version}</version> - </dependency> - <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> @@ -256,6 +242,12 @@ <version>${assertj-core.version}</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-inline</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/src/main/java/de/deadlocker8/budgetmaster/Main.java b/src/main/java/de/deadlocker8/budgetmaster/Main.java index ed535703ab49e565ef1b1b8946a28cc62f2d42a9..edbee1b178d89b1fef7784266388692b55c66ce3 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/Main.java +++ b/src/main/java/de/deadlocker8/budgetmaster/Main.java @@ -5,7 +5,6 @@ import de.thecodelabs.utils.util.Localization; import de.thecodelabs.utils.util.SystemUtils; import de.thecodelabs.utils.util.localization.LocalizationMessageFormatter; import de.thecodelabs.utils.util.localization.formatter.JavaMessageFormatter; -import org.joda.time.DateTimeZone; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.ApplicationArguments; @@ -32,7 +31,6 @@ public class Main extends SpringBootServletInitializer implements ApplicationRun static { - DateTimeZone.setDefault(DateTimeZone.UTC); prepare(new String[0]); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/backup/GitBackupTask.java b/src/main/java/de/deadlocker8/budgetmaster/backup/GitBackupTask.java index 74232c27b9dc14972df9df126b8e3fbf8d5d719f..97062f4603d0fa4adf5c99b4fbc2c9e08c6b1e9a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/backup/GitBackupTask.java +++ b/src/main/java/de/deadlocker8/budgetmaster/backup/GitBackupTask.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import java.nio.file.Path; import java.text.MessageFormat; +import java.time.format.DateTimeFormatter; public abstract class GitBackupTask extends BackupTask { @@ -54,7 +55,7 @@ public abstract class GitBackupTask extends BackupTask } LOGGER.debug("Committing changes..."); - GitHelper.commitChanges(git, DateHelper.getCurrentDate().toString(DATE_PATTERN)); + GitHelper.commitChanges(git, DateHelper.getCurrentDateTime().format(DateTimeFormatter.ofPattern(DATE_PATTERN))); return true; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java index 37866d98dd67879e98bd659d67cc15f681c1c59e..7b30e36733a397afc1dc6299d06f3d8ed9353c37 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java @@ -16,8 +16,6 @@ import de.deadlocker8.budgetmaster.utils.WebRequestUtils; import de.deadlocker8.budgetmaster.utils.notification.Notification; import de.deadlocker8.budgetmaster.utils.notification.NotificationType; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; -import org.joda.time.format.ISODateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -25,6 +23,8 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.WebRequest; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -62,7 +62,7 @@ public class ChartController extends BaseController private static final Gson GSON = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .setPrettyPrinting() - .registerTypeAdapter(DateTime.class, (JsonSerializer<DateTime>) (json, typeOfSrc, context) -> new JsonPrimitive(ISODateTimeFormat.date().print(json))) + .registerTypeAdapter(LocalDate.class, (JsonSerializer<LocalDate>) (json, typeOfSrc, context) -> new JsonPrimitive(json.format(DateTimeFormatter.ISO_DATE))) .create(); private final ChartService chartService; diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java index d972cd0fb7cb74f973f0d2c347fd2ec128a7d60e..5ba28f33aca5652a1c80f05f16daa06168468cb9 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartSettings.java @@ -1,10 +1,13 @@ package de.deadlocker8.budgetmaster.charts; import de.deadlocker8.budgetmaster.filter.FilterConfiguration; -import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDate; + +import static java.time.temporal.TemporalAdjusters.firstDayOfMonth; +import static java.time.temporal.TemporalAdjusters.lastDayOfMonth; + public class ChartSettings { @@ -13,21 +16,21 @@ public class ChartSettings private Integer chartID; @DateTimeFormat(pattern = "dd.MM.yyyy") - private DateTime startDate; + private LocalDate startDate; @DateTimeFormat(pattern = "dd.MM.yyyy") - private DateTime endDate; + private LocalDate endDate; private FilterConfiguration filterConfiguration; public static ChartSettings getDefault(FilterConfiguration filterConfiguration) { - return new ChartSettings(ChartDisplayType.BAR, ChartGroupType.MONTH, null, DateHelper.getCurrentDateWithUTC().withDayOfMonth(1), DateHelper.getCurrentDateWithUTC().dayOfMonth().withMaximumValue(), filterConfiguration); + return new ChartSettings(ChartDisplayType.BAR, ChartGroupType.MONTH, null, LocalDate.now().with(firstDayOfMonth()), LocalDate.now().with(lastDayOfMonth()), filterConfiguration); } public ChartSettings() { } - public ChartSettings(ChartDisplayType displayType, ChartGroupType groupType, Integer chartID, DateTime startDate, DateTime endDate, FilterConfiguration filterConfiguration) + public ChartSettings(ChartDisplayType displayType, ChartGroupType groupType, Integer chartID, LocalDate startDate, LocalDate endDate, FilterConfiguration filterConfiguration) { this.displayType = displayType; this.groupType = groupType; @@ -67,22 +70,22 @@ public class ChartSettings this.chartID = chartID; } - public DateTime getStartDate() + public LocalDate getStartDate() { return startDate; } - public void setStartDate(DateTime startDate) + public void setStartDate(LocalDate startDate) { this.startDate = startDate; } - public DateTime getEndDate() + public LocalDate getEndDate() { return endDate; } - public void setEndDate(DateTime endDate) + public void setEndDate(LocalDate endDate) { this.endDate = endDate; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java index 77af76895d3d85c8ba91a7c75b8f1990d393f9d4..8af33f30ff768fc6f6d73b0ad521163b85078773 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/DatePickerController.java @@ -4,9 +4,6 @@ import de.deadlocker8.budgetmaster.services.DateFormatStyle; import de.deadlocker8.budgetmaster.services.DateService; import de.deadlocker8.budgetmaster.settings.Settings; import de.deadlocker8.budgetmaster.settings.SettingsService; -import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CookieValue; @@ -15,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; @Controller @@ -36,7 +35,7 @@ public class DatePickerController extends BaseController public String previousMonth(HttpServletResponse response, @CookieValue(COOKIE_NAME) String date, @RequestParam("target") String target) { Settings settings = settingsService.getSettings(); - DateTime currentDate = DateTime.parse(date, DateTimeFormat.forPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settings.getLanguage().getLocale())); + LocalDate currentDate = LocalDate.parse(date, DateTimeFormatter.ofPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settings.getLanguage().getLocale())); currentDate = currentDate.minusMonths(1); response.addCookie(new Cookie(COOKIE_NAME, dateService.getDateStringNormal(currentDate))); @@ -47,7 +46,7 @@ public class DatePickerController extends BaseController public String nextMonth(HttpServletResponse response, @CookieValue(COOKIE_NAME) String date, @RequestParam("target") String target) { Settings settings = settingsService.getSettings(); - DateTime currentDate = DateTime.parse(date, DateTimeFormat.forPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settings.getLanguage().getLocale())); + LocalDate currentDate = LocalDate.parse(date, DateTimeFormatter.ofPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settings.getLanguage().getLocale())); currentDate = currentDate.plusMonths(1); response.addCookie(new Cookie(COOKIE_NAME, dateService.getDateStringNormal(currentDate))); @@ -58,7 +57,7 @@ public class DatePickerController extends BaseController public String setDate(HttpServletResponse response, @CookieValue(COOKIE_NAME) String date, @RequestParam("target") String target) { Settings settings = settingsService.getSettings(); - DateTime currentDate = DateTime.parse(date, DateTimeFormat.forPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settings.getLanguage().getLocale())); + LocalDate currentDate = LocalDate.parse(date, DateTimeFormatter.ofPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settings.getLanguage().getLocale())); response.addCookie(new Cookie(COOKIE_NAME, dateService.getDateStringNormal(currentDate))); return "redirect:" + target; @@ -67,8 +66,7 @@ public class DatePickerController extends BaseController @GetMapping(value = "/today") public String today(HttpServletResponse response, @RequestParam("target") String target) { - DateTime currentDate = DateHelper.getCurrentDate(); - response.addCookie(new Cookie(COOKIE_NAME, dateService.getDateStringNormal(currentDate))); + response.addCookie(new Cookie(COOKIE_NAME, dateService.getDateStringNormal(LocalDate.now()))); return "redirect:" + target; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java index 50f59105b2b2b9a215cf63fc672003d6dfe54791..f9a6a9d0f9146ad611a81951c80c9f9186887394 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java @@ -39,6 +39,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.MessageFormat; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; @@ -252,7 +253,7 @@ public class DatabaseService public static String getExportFileName() { - return "BudgetMasterDatabase_" + DateHelper.getCurrentDate().toString(BACKUP_DATE_FORMAT) + ".json"; + return "BudgetMasterDatabase_" + DateHelper.getCurrentDateTime().format(DateTimeFormatter.ofPattern(BACKUP_DATE_FORMAT)) + ".json"; } public BackupDatabase getDatabaseForJsonSerialization() diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingEndOptionConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingEndOptionConverter.java index 1465146d63142a77360397dd3a3467ee4838eeb9..80bc00b1863307397ea49f05abe908701c6ebe8c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingEndOptionConverter.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingEndOptionConverter.java @@ -4,8 +4,9 @@ import de.deadlocker8.budgetmaster.database.model.Converter; import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingEndOption_v4; import de.deadlocker8.budgetmaster.repeating.endoption.*; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; public class RepeatingEndOptionConverter implements Converter<RepeatingEnd, BackupRepeatingEndOption_v4> { @@ -28,8 +29,7 @@ public class RepeatingEndOptionConverter implements Converter<RepeatingEnd, Back endOption = new RepeatingEndAfterXTimes(backupItem.getTimes()); break; case DATE: - DateTime endDate = DateTime.parse(backupItem.getEndDate(), DateTimeFormat.forPattern("yyyy-MM-dd")); - endDate = endDate.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate endDate = LocalDate.parse(backupItem.getEndDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); endOption = new RepeatingEndDate(endDate); break; } @@ -50,8 +50,8 @@ public class RepeatingEndOptionConverter implements Converter<RepeatingEnd, Back if(internalItem instanceof RepeatingEndDate repeatingEndDate) { - final DateTime endDate = (DateTime) repeatingEndDate.getValue(); - repeatingEndOption.setEndDate(endDate.toString(DateTimeFormat.forPattern("yyyy-MM-dd"))); + final LocalDate endDate = (LocalDate) repeatingEndDate.getValue(); + repeatingEndOption.setEndDate(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); } if(internalItem instanceof RepeatingEndAfterXTimes repeatingEndAfterXTimes) diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingOptionConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingOptionConverter.java index 06ab54dea48444a37afcfa9911b05a2968341da0..18b5ff77cb2c0dcb810006f92e8b43b05c66844d 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingOptionConverter.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/RepeatingOptionConverter.java @@ -3,8 +3,9 @@ package de.deadlocker8.budgetmaster.database.model.converter; import de.deadlocker8.budgetmaster.database.model.Converter; import de.deadlocker8.budgetmaster.database.model.v4.BackupRepeatingOption_v4; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; public class RepeatingOptionConverter implements Converter<RepeatingOption, BackupRepeatingOption_v4> { @@ -18,8 +19,7 @@ public class RepeatingOptionConverter implements Converter<RepeatingOption, Back final RepeatingOption repeatingOption = new RepeatingOption(); - DateTime startDate = DateTime.parse(backupItem.getStartDate(), DateTimeFormat.forPattern("yyyy-MM-dd")); - startDate = startDate.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate startDate = LocalDate.parse(backupItem.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); repeatingOption.setStartDate(startDate); repeatingOption.setModifier(new RepeatingModifierConverter().convertToInternalForm(backupItem.getModifier())); @@ -36,7 +36,7 @@ public class RepeatingOptionConverter implements Converter<RepeatingOption, Back } final BackupRepeatingOption_v4 repeatingOption = new BackupRepeatingOption_v4(); - repeatingOption.setStartDate(internalItem.getStartDate().toString(DateTimeFormat.forPattern("yyyy-MM-dd"))); + repeatingOption.setStartDate(internalItem.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); repeatingOption.setModifier(new RepeatingModifierConverter().convertToExternalForm(internalItem.getModifier())); repeatingOption.setEndOption(new RepeatingEndOptionConverter().convertToExternalForm(internalItem.getEndOption())); return repeatingOption; diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/TransactionConverter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/TransactionConverter.java index d923ce5fe8c954f3104c7f496c8d951971f306f6..58f60e29b66caf27f938f5b9a8ac80c52b699eab 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/TransactionConverter.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/converter/TransactionConverter.java @@ -7,9 +7,9 @@ import de.deadlocker8.budgetmaster.database.model.v4.BackupTag_v4; import de.deadlocker8.budgetmaster.database.model.v6.BackupTransaction_v6; import de.deadlocker8.budgetmaster.tags.Tag; import de.deadlocker8.budgetmaster.transactions.Transaction; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -40,8 +40,7 @@ public class TransactionConverter implements Converter<Transaction, BackupTransa transaction.setAccount(getItemById(availableAccounts, backupTransaction.getAccountID())); transaction.setTransferAccount(getItemById(availableAccounts, backupTransaction.getTransferAccountID())); - DateTime date = DateTime.parse(backupTransaction.getDate(), DateTimeFormat.forPattern("yyyy-MM-dd")); - date = date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate date = LocalDate.parse(backupTransaction.getDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); transaction.setDate(date); List<Tag> convertedTags = new ArrayList<>(); @@ -77,7 +76,7 @@ public class TransactionConverter implements Converter<Transaction, BackupTransa transaction.setTransferAccountID(internalItem.getTransferAccount().getID()); } - transaction.setDate(internalItem.getDate().toString(DateTimeFormat.forPattern("yyyy-MM-dd"))); + transaction.setDate(internalItem.getDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); List<BackupTag_v4> convertedTags = new ArrayList<>(); TagConverter tagConverter = new TagConverter(); diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java index 3b0b0b0778765380a392e1119df7d41e840fbafa..e378b2a2b14fa3d7adca618449e2db586f375502 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingOption.java @@ -1,13 +1,13 @@ package de.deadlocker8.budgetmaster.repeating; import com.google.gson.annotations.Expose; -import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEnd; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifier; -import org.joda.time.DateTime; +import de.deadlocker8.budgetmaster.transactions.Transaction; import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -22,7 +22,7 @@ public class RepeatingOption @DateTimeFormat(pattern = "dd.MM.yyyy") @Expose - private DateTime startDate; + private LocalDate startDate; @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) @Expose @@ -35,14 +35,16 @@ public class RepeatingOption @OneToMany(cascade = CascadeType.ALL, mappedBy = "repeatingOption", fetch = FetchType.LAZY) private List<Transaction> referringTransactions; - public RepeatingOption(DateTime startDate, RepeatingModifier modifier, RepeatingEnd endOption) + public RepeatingOption(LocalDate startDate, RepeatingModifier modifier, RepeatingEnd endOption) { this.startDate = startDate; this.modifier = modifier; this.endOption = endOption; } - public RepeatingOption() {} + public RepeatingOption() + { + } public Integer getID() { @@ -54,12 +56,12 @@ public class RepeatingOption this.ID = ID; } - public DateTime getStartDate() + public LocalDate getStartDate() { return startDate; } - public void setStartDate(DateTime startDate) + public void setStartDate(LocalDate startDate) { this.startDate = startDate; } @@ -94,20 +96,20 @@ public class RepeatingOption this.referringTransactions = referringTransactions; } - public List<DateTime> getRepeatingDates(DateTime dateFetchLimit) + public List<LocalDate> getRepeatingDates(LocalDate dateFetchLimit) { - List<DateTime> dates = new ArrayList<>(); + List<LocalDate> dates = new ArrayList<>(); dates.add(startDate); while(!endOption.isEndReached(dates)) { - DateTime lastDate = dates.get(dates.size() - 1); - DateTime nextDate = modifier.getNextDate(lastDate); + LocalDate lastDate = dates.get(dates.size() - 1); + LocalDate nextDate = modifier.getNextDate(lastDate); if(nextDate.isAfter(dateFetchLimit)) { return dates; } - List<DateTime> temporaryList = new ArrayList<>(dates); + List<LocalDate> temporaryList = new ArrayList<>(dates); temporaryList.add(nextDate); if(endOption.isEndReached(temporaryList)) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java index 67f10eb26151516e7c730b8e72b7e8219e928ca9..3f86564ea0a485e7c7da795e7319d7710b10aad2 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/RepeatingTransactionUpdater.java @@ -2,10 +2,10 @@ package de.deadlocker8.budgetmaster.repeating; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionService; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.List; @Service @@ -21,14 +21,14 @@ public class RepeatingTransactionUpdater this.repeatingOptionRepository = repeatingOptionRepository; } - public void updateRepeatingTransactions(DateTime now) + public void updateRepeatingTransactions(LocalDate now) { List<RepeatingOption> repeatingOptions = repeatingOptionRepository.findAllByOrderByStartDateAsc(); for(RepeatingOption option : repeatingOptions) { List<Transaction> transactions = transactionService.getRepository().findAllByRepeatingOption(option); - List<DateTime> correctDates = option.getRepeatingDates(now); - for(DateTime currentDate : correctDates) + List<LocalDate> correctDates = option.getRepeatingDates(now); + for(LocalDate currentDate : correctDates) { if(!containsDate(transactions, currentDate)) { @@ -41,7 +41,7 @@ public class RepeatingTransactionUpdater } } - private boolean containsDate(List<Transaction> transactions, DateTime date) + private boolean containsDate(List<Transaction> transactions, LocalDate date) { for(Transaction currentTransaction : transactions) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java index a830b1bb0e59c5bf07a9122bd5d09a2e68476d95..fbbb74c7453b65340190aa743c3d3123a26f2084 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEnd.java @@ -1,9 +1,9 @@ package de.deadlocker8.budgetmaster.repeating.endoption; import com.google.gson.annotations.Expose; -import org.joda.time.DateTime; import javax.persistence.*; +import java.time.LocalDate; import java.util.List; import java.util.Objects; @@ -25,7 +25,9 @@ public abstract class RepeatingEnd this.localizationKey = localizationKey; } - protected RepeatingEnd() {} + protected RepeatingEnd() + { + } public Integer getID() { @@ -47,9 +49,9 @@ public abstract class RepeatingEnd this.localizationKey = localizationKey; } - public abstract boolean isEndReached(List<DateTime> dates); + public abstract boolean isEndReached(List<LocalDate> dates); - public abstract Object getValue(); + public abstract Object getValue(); @Override public String toString() diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java index 4dede91d31f08820ac57b4d2ebe05eae8f21d107..c0299bdf842dd256852a3882765dd42037d84927 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndAfterXTimes.java @@ -1,9 +1,10 @@ package de.deadlocker8.budgetmaster.repeating.endoption; import com.google.gson.annotations.Expose; -import org.joda.time.DateTime; -import javax.persistence.*; +import javax.persistence.Entity; +import javax.persistence.Transient; +import java.time.LocalDate; import java.util.List; import java.util.Objects; @@ -19,11 +20,13 @@ public class RepeatingEndAfterXTimes extends RepeatingEnd this.times = times; } - public RepeatingEndAfterXTimes() {} + public RepeatingEndAfterXTimes() + { + } @Override @Transient - public boolean isEndReached(List<DateTime> dates) + public boolean isEndReached(List<LocalDate> dates) { return dates.size() - 1 > times; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java index a7dc605d5a0cadc99c011721871df140d2136e7f..9d606e08c450d4cd220651f5287356fc78aaf700 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndDate.java @@ -1,10 +1,11 @@ package de.deadlocker8.budgetmaster.repeating.endoption; import com.google.gson.annotations.Expose; -import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; -import javax.persistence.*; +import javax.persistence.Entity; +import javax.persistence.Transient; +import java.time.LocalDate; import java.util.List; import java.util.Objects; @@ -13,21 +14,23 @@ public class RepeatingEndDate extends RepeatingEnd { @DateTimeFormat(pattern = "dd.MM.yyyy") @Expose - private DateTime endDate; + private LocalDate endDate; - public RepeatingEndDate(DateTime endDate) + public RepeatingEndDate(LocalDate endDate) { super("repeating.end.key.date"); this.endDate = endDate; } - public RepeatingEndDate() {} + public RepeatingEndDate() + { + } @Override @Transient - public boolean isEndReached(List<DateTime> dates) + public boolean isEndReached(List<LocalDate> dates) { - DateTime lastDate = dates.get(dates.size() - 1); + LocalDate lastDate = dates.get(dates.size() - 1); return lastDate.isAfter(endDate); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java index 95a96d9a7e8dd3725442895a311478c4766a3195..f3ce9f36b75c9ec306d569efb5f753237e2d63f5 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/endoption/RepeatingEndNever.java @@ -1,9 +1,8 @@ package de.deadlocker8.budgetmaster.repeating.endoption; -import org.joda.time.DateTime; - import javax.persistence.Entity; import javax.persistence.Transient; +import java.time.LocalDate; import java.util.List; @Entity @@ -16,7 +15,7 @@ public class RepeatingEndNever extends RepeatingEnd @Override @Transient - public boolean isEndReached(List<DateTime> dates) + public boolean isEndReached(List<LocalDate> dates) { return false; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifier.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifier.java index d750eb0ee47271e842f65dfebfb9b45cfa744ce6..00c79caec06378e0ac34752e2cc47a813be3cd93 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifier.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifier.java @@ -1,9 +1,9 @@ package de.deadlocker8.budgetmaster.repeating.modifier; import com.google.gson.annotations.Expose; -import org.joda.time.DateTime; import javax.persistence.*; +import java.time.LocalDate; import java.util.Objects; @Entity @@ -28,7 +28,9 @@ public abstract class RepeatingModifier this.localizationKey = localizationKey; } - protected RepeatingModifier() {} + protected RepeatingModifier() + { + } public Integer getID() { @@ -61,7 +63,7 @@ public abstract class RepeatingModifier } @Transient - public abstract DateTime getNextDate(DateTime lastDate); + public abstract LocalDate getNextDate(LocalDate lastDate); @Override public String toString() diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierDays.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierDays.java index df1fb82b67360b92bfd99a5c879f864aef436090..41f7d9d6191599bde87ecebec7afe8567b90b352 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierDays.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierDays.java @@ -1,8 +1,7 @@ package de.deadlocker8.budgetmaster.repeating.modifier; -import org.joda.time.DateTime; - import javax.persistence.Entity; +import java.time.LocalDate; @Entity public class RepeatingModifierDays extends RepeatingModifier @@ -12,10 +11,12 @@ public class RepeatingModifierDays extends RepeatingModifier super(numberOfDays, "repeating.modifier.days"); } - public RepeatingModifierDays() {} + public RepeatingModifierDays() + { + } @Override - public DateTime getNextDate(DateTime lastDate) + public LocalDate getNextDate(LocalDate lastDate) { return lastDate.plusDays(super.quantity); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierMonths.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierMonths.java index d29214f9c2dfb430798547758992a1fa753485ac..90ed0b96cc118c2fbb2ffa53177af69dd6bb3c88 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierMonths.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierMonths.java @@ -1,8 +1,7 @@ package de.deadlocker8.budgetmaster.repeating.modifier; -import org.joda.time.DateTime; - import javax.persistence.Entity; +import java.time.LocalDate; @Entity public class RepeatingModifierMonths extends RepeatingModifier @@ -12,10 +11,12 @@ public class RepeatingModifierMonths extends RepeatingModifier super(numberOfMonths, "repeating.modifier.months"); } - public RepeatingModifierMonths() {} + public RepeatingModifierMonths() + { + } @Override - public DateTime getNextDate(DateTime lastDate) + public LocalDate getNextDate(LocalDate lastDate) { return lastDate.plusMonths(super.quantity); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierYears.java b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierYears.java index f5140fdc8ad53f2ca60f003d3c15d99329bfc90a..c830b33518bc57bc10d160283a5e3eb033a92e59 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierYears.java +++ b/src/main/java/de/deadlocker8/budgetmaster/repeating/modifier/RepeatingModifierYears.java @@ -1,8 +1,7 @@ package de.deadlocker8.budgetmaster.repeating.modifier; -import org.joda.time.DateTime; - import javax.persistence.Entity; +import java.time.LocalDate; @Entity public class RepeatingModifierYears extends RepeatingModifier @@ -12,10 +11,12 @@ public class RepeatingModifierYears extends RepeatingModifier super(numberOfYears, "repeating.modifier.years"); } - public RepeatingModifierYears() {} + public RepeatingModifierYears() + { + } @Override - public DateTime getNextDate(DateTime lastDate) + public LocalDate getNextDate(LocalDate lastDate) { return lastDate.plusYears(super.quantity); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/HeaderFooterPageEvent.java b/src/main/java/de/deadlocker8/budgetmaster/reports/HeaderFooterPageEvent.java index ea8bf6ef8df4f7685ece15eade6c1524d7c67078..e970727e8ed4f661cda075b6b96c10ecd8f9b199 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/HeaderFooterPageEvent.java +++ b/src/main/java/de/deadlocker8/budgetmaster/reports/HeaderFooterPageEvent.java @@ -10,6 +10,8 @@ import de.deadlocker8.budgetmaster.utils.DateHelper; import de.deadlocker8.budgetmaster.utils.Strings; import de.thecodelabs.utils.util.Localization; +import java.time.format.DateTimeFormatter; + public class HeaderFooterPageEvent extends PdfPageEventHelper { @@ -26,6 +28,6 @@ public class HeaderFooterPageEvent extends PdfPageEventHelper ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(Localization.getString(Strings.REPORT_FOOTER_LEFT), font), 100, 25, 0); ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(Localization.getString(Strings.REPORT_FOOTER_CENTER, document.getPageNumber()), font), 300, 25, 0); - ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(DateHelper.getCurrentDate().toString(DateFormatStyle.LONG.getKey()), font), 500, 25, 0); + ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(DateHelper.getCurrentDate().format(DateTimeFormatter.ofPattern(DateFormatStyle.LONG.getKey())), font), 500, 25, 0); } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportController.java b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportController.java index 24c6823ca07356f6ff814504949934c65e03f9ea..6fa91a5a6800e34808818bac5388b061481e5735 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportController.java @@ -17,7 +17,6 @@ import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionService; import de.deadlocker8.budgetmaster.utils.Mappings; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -28,6 +27,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.MessageFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.List; @@ -72,7 +73,7 @@ public class ReportController extends BaseController @GetMapping public String reports(HttpServletRequest request, Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) { - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); model.addAttribute(ModelAttributes.REPORT_SETTINGS, reportSettingsService.getReportSettings()); model.addAttribute(ModelAttributes.CURRENT_DATE, date); @@ -97,7 +98,7 @@ public class ReportController extends BaseController } FilterConfiguration filterConfiguration = filterHelpers.getFilterConfiguration(request); - List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(account, reportSettings.getDate().getMonthOfYear(), reportSettings.getDate().getYear(), settingsService.getSettings().isRestActivated(), filterConfiguration); + List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(account, reportSettings.getDate().getMonthValue(), reportSettings.getDate().getYear(), settingsService.getSettings().isRestActivated(), filterConfiguration); Budget budget = helpers.getBudget(transactions, account); ReportConfiguration reportConfiguration = new ReportConfigurationBuilder() @@ -108,8 +109,8 @@ public class ReportController extends BaseController .setCategoryBudgets(CategoryBudgetHandler.getCategoryBudgets(transactions, categoryService.getAllEntitiesAsc())) .createReportConfiguration(); - String month = reportSettings.getDate().toString("MM"); - String year = reportSettings.getDate().toString("YYYY"); + String month = reportSettings.getDate().format(DateTimeFormatter.ofPattern("MM")); + String year = reportSettings.getDate().format(DateTimeFormatter.ofPattern("yyyy")); LOGGER.debug(MessageFormat.format("Exporting month report (month: {0}_{1}, account: {2})...", year, month, accountName)); diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportGeneratorService.java b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportGeneratorService.java index a6aa558b9d8cc2b6e5e216bdc5f48d04cdb5849e..383cf97914e85f898bb05bfa5ea237c99035a092 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/ReportGeneratorService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/reports/ReportGeneratorService.java @@ -1,7 +1,10 @@ package de.deadlocker8.budgetmaster.reports; import com.itextpdf.text.*; -import com.itextpdf.text.pdf.*; +import com.itextpdf.text.pdf.BaseFont; +import com.itextpdf.text.pdf.PdfPCell; +import com.itextpdf.text.pdf.PdfPTable; +import com.itextpdf.text.pdf.PdfWriter; import de.deadlocker8.budgetmaster.categories.CategoryType; import de.deadlocker8.budgetmaster.reports.categoryBudget.CategoryBudget; import de.deadlocker8.budgetmaster.reports.columns.ReportColumn; @@ -17,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.ByteArrayOutputStream; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; @@ -44,7 +48,7 @@ public class ReportGeneratorService { Font font = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 16, Font.BOLDITALIC, BLACK); Locale locale = settingsService.getSettings().getLanguage().getLocale(); - Chunk chunk = new Chunk(Localization.getString(Strings.REPORT_HEADLINE, reportConfiguration.getReportSettings().getDate().toString("MMMM yyyy", locale)), font); + Chunk chunk = new Chunk(Localization.getString(Strings.REPORT_HEADLINE, reportConfiguration.getReportSettings().getDate().format(DateTimeFormatter.ofPattern("MMMM yyyy", locale))), font); Chapter chapter = new Chapter(new Paragraph(chunk), 1); chapter.setNumberDepth(0); @@ -299,7 +303,7 @@ public class ReportGeneratorService case CATEGORY: return transaction.getCategory().getName(); case DATE: - return transaction.getDate().toString(DateFormatStyle.NO_YEAR.getKey()); + return transaction.getDate().format(DateTimeFormatter.ofPattern(DateFormatStyle.NO_YEAR.getKey())); case DESCRIPTION: return transaction.getDescription(); case TAGS: diff --git a/src/main/java/de/deadlocker8/budgetmaster/reports/settings/ReportSettings.java b/src/main/java/de/deadlocker8/budgetmaster/reports/settings/ReportSettings.java index e202f527f54fbf195fa5e2d3df9fb5472686bf13..43a8d864eb11b537af39fc5731d69a3f5be4e55a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/reports/settings/ReportSettings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/reports/settings/ReportSettings.java @@ -1,14 +1,13 @@ package de.deadlocker8.budgetmaster.reports.settings; import de.deadlocker8.budgetmaster.reports.columns.ReportColumn; -import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -20,7 +19,7 @@ public class ReportSettings private Integer ID; @DateTimeFormat(pattern = "dd.MM.yyyy") - private DateTime date; + private LocalDate date; private boolean includeBudget; private boolean splitTables; @@ -31,10 +30,10 @@ public class ReportSettings public static ReportSettings getDefault() { - return new ReportSettings(DateHelper.getCurrentDate(), true, true, true); + return new ReportSettings(LocalDate.now(), true, true, true); } - private ReportSettings(DateTime date, boolean includeBudget, boolean splitTables, boolean includeCategoryBudgets) + private ReportSettings(LocalDate date, boolean includeBudget, boolean splitTables, boolean includeCategoryBudgets) { this.date = date; this.includeBudget = includeBudget; @@ -57,12 +56,12 @@ public class ReportSettings this.ID = ID; } - public DateTime getDate() + public LocalDate getDate() { return date; } - public void setDate(DateTime date) + public void setDate(LocalDate date) { this.date = date; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java index 0650f9c7ea512f67a45169aa1686dcf043049de2..cfdc8152b17767fe003662a90d2fbe68ff2aa936 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java @@ -1,12 +1,10 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.settings.SettingsService; -import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -21,51 +19,51 @@ public class DateService this.settingsService = settingsService; } - public String getDateStringNormal(DateTime date) + public String getDateStringNormal(LocalDate date) { return getDateString(date, DateFormatStyle.NORMAL); } - public String getDateStringWithoutYear(DateTime date) + public String getDateStringWithoutYear(LocalDate date) { return getDateString(date, DateFormatStyle.NO_YEAR); } - public String getLongDateString(DateTime date) + public String getLongDateString(LocalDate date) { return getDateString(date, DateFormatStyle.LONG); } - public String getDateStringWithMonthAndYear(DateTime date) + public String getDateStringWithMonthAndYear(LocalDate date) { return getDateString(date, DateFormatStyle.LONG_MONTH_AND_YEAR); } - public String getDateTimeString(DateTime date) + public String getDateTimeString(LocalDate date) { return getDateString(date, DateFormatStyle.DATE_TIME); } - private String getDateString(DateTime date, DateFormatStyle formatStyle) + private String getDateString(LocalDate date, DateFormatStyle formatStyle) { - return date.toString(DateTimeFormat.forPattern(formatStyle.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); + return date.format(DateTimeFormatter.ofPattern(formatStyle.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); } - public DateTime getDateTimeFromCookie(String cookieDate) + public LocalDate getDateTimeFromCookie(String cookieDate) { if(cookieDate == null) { - return DateHelper.getCurrentDate(); + return LocalDate.now(); } else { - return DateTime.parse(cookieDate, DateTimeFormat.forPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); + return LocalDate.parse(cookieDate, DateTimeFormatter.ofPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); } } - public DateTime getCurrentDate() + public LocalDate getCurrentDate() { - return DateHelper.getCurrentDate(); + return LocalDate.now(); } public String getDateTimeString(LocalDateTime localDateTime) diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index 8e1de051112de564aca001a027b3d150fd4fdab2..b2207aa01fb99ac5ee4c7c571480f9d69eef274c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -24,11 +24,11 @@ import de.deadlocker8.budgetmaster.utils.Colors; import de.deadlocker8.budgetmaster.utils.DateHelper; import de.deadlocker8.budgetmaster.utils.LanguageType; import de.thecodelabs.utils.util.ColorUtilsNonJavaFX; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -176,7 +176,7 @@ public class HelpersService public int getAccountBudget() { Account currentAccount = getCurrentAccount(); - final DateTime endDate = DateHelper.getCurrentDateWithUTC(); + final LocalDate endDate = DateHelper.getCurrentDate(); List<Transaction> transactions = transactionService.getTransactionsForAccountUntilDate(currentAccount, endDate, FilterConfiguration.DEFAULT); int sum = 0; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java b/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java index 0c7c8a1240777164869633ea949e77c454a04bc9..67cca8c4a574e63d7fb60ca5cd9b14453d8cc8b6 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java @@ -33,6 +33,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.MessageFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @@ -359,7 +361,7 @@ public class ImportService } catch(Exception e) { - final String errorMessage = MessageFormat.format("Error while importing transaction with name \"{0}\" from {1}", transaction.getName(), transaction.getDate().toString(DateFormatStyle.NORMAL.getKey())); + final String errorMessage = MessageFormat.format("Error while importing transaction with name \"{0}\" from {1}", transaction.getName(), transaction.getDate().format(DateTimeFormatter.ofPattern(DateFormatStyle.NORMAL.getKey()))); LOGGER.error(errorMessage, e); collectedErrorMessages.add(formatErrorMessage(errorMessage, e)); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java index 28f7c8a19d87b71a07b398d73b3e85293a1bbb39..0e7fc774fb145f4cf0748555d04aa33c67711de2 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java @@ -4,11 +4,11 @@ import de.deadlocker8.budgetmaster.backup.AutoBackupStrategy; import de.deadlocker8.budgetmaster.backup.AutoBackupTime; import de.deadlocker8.budgetmaster.utils.DateHelper; import de.deadlocker8.budgetmaster.utils.LanguageType; -import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.Entity; import javax.persistence.Id; +import java.time.LocalDate; @Entity public class Settings @@ -26,7 +26,7 @@ public class Settings private Boolean backupReminderActivated; @DateTimeFormat(pattern = "dd.MM.yyyy") - private DateTime lastBackupReminderDate; + private LocalDate lastBackupReminderDate; private Integer searchItemsPerPage; @@ -58,7 +58,7 @@ public class Settings defaultSettings.setShowCategoriesAsCircles(true); defaultSettings.setAutoUpdateCheckEnabled(true); defaultSettings.setBackupReminderActivated(true); - defaultSettings.setLastBackupReminderDate(DateHelper.getCurrentDate()); + defaultSettings.setLastBackupReminderDate(LocalDate.now()); defaultSettings.setSearchItemsPerPage(10); defaultSettings.setAutoBackupStrategy(AutoBackupStrategy.NONE); defaultSettings.setAutoBackupDays(1); @@ -149,12 +149,12 @@ public class Settings this.backupReminderActivated = backupReminderActivated; } - public DateTime getLastBackupReminderDate() + public LocalDate getLastBackupReminderDate() { return lastBackupReminderDate; } - public void setLastBackupReminderDate(DateTime lastBackupReminderDate) + public void setLastBackupReminderDate(LocalDate lastBackupReminderDate) { this.lastBackupReminderDate = lastBackupReminderDate; } @@ -163,7 +163,7 @@ public class Settings { if(backupReminderActivated) { - return lastBackupReminderDate.getMonthOfYear() != DateHelper.getCurrentDate().getMonthOfYear(); + return lastBackupReminderDate.getMonthValue() != DateHelper.getCurrentDate().getMonthValue(); } return false; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java index a1818369fc0520152d1ed0adbf153a628a1cffac..1592aefe73805094b54d219261c9198f8fb83fcb 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java @@ -15,7 +15,6 @@ import de.deadlocker8.budgetmaster.utils.WebRequestUtils; import de.deadlocker8.budgetmaster.utils.notification.Notification; import de.deadlocker8.budgetmaster.utils.notification.NotificationType; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; @@ -25,6 +24,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.WebRequest; import org.springframework.web.server.ResponseStatusException; +import java.time.LocalDate; import java.util.Optional; @@ -158,7 +158,7 @@ public class TemplateController extends BaseController newTransaction.setIsExpenditure(true); } - final DateTime date = dateService.getDateTimeFromCookie(cookieDate); + final LocalDate date = dateService.getDateTimeFromCookie(cookieDate); transactionService.prepareModelNewOrEdit(model, false, date, false, newTransaction, accountService.getAllActivatedAccountsAsc()); if(newTransaction.isTransfer()) diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java index b0ab67ef291a19ab649c3ccab8cfce003aea5587..8f2a3a650a77d7cd979b5b2a0240fe3d591bc7af 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java @@ -8,10 +8,10 @@ import de.deadlocker8.budgetmaster.categories.CategoryType; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.tags.Tag; import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -32,7 +32,7 @@ public class Transaction implements TransactionBase @DateTimeFormat(pattern = "dd.MM.yyyy") @Expose - private DateTime date; + private LocalDate date; @ManyToOne @Expose @@ -119,12 +119,12 @@ public class Transaction implements TransactionBase isExpenditure = expenditure; } - public DateTime getDate() + public LocalDate getDate() { return date; } - public void setDate(DateTime date) + public void setDate(LocalDate date) { this.date = date; } @@ -211,7 +211,7 @@ public class Transaction implements TransactionBase public boolean isFuture() { - return date.isAfter(DateHelper.getCurrentDateWithUTC()); + return date.isAfter(DateHelper.getCurrentDate()); } public boolean isEditable() diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java index 6e32077c7e9a74fb3b1bb3a32cb0103455f75e7a..1e5e3b9b5c9abb55d8b9331f645b79068ef1b671 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java @@ -24,8 +24,6 @@ import de.deadlocker8.budgetmaster.utils.WebRequestUtils; import de.deadlocker8.budgetmaster.utils.notification.Notification; import de.deadlocker8.budgetmaster.utils.notification.NotificationType; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -36,9 +34,13 @@ import org.springframework.web.context.request.WebRequest; import javax.servlet.http.HttpServletRequest; import java.text.MessageFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Optional; +import static java.time.temporal.TemporalAdjusters.lastDayOfMonth; + @Controller @RequestMapping(Mappings.TRANSACTIONS) public class TransactionController extends BaseController @@ -82,8 +84,8 @@ public class TransactionController extends BaseController @GetMapping public String transactions(HttpServletRequest request, Model model, @CookieValue(value = "currentDate", required = false) String cookieDate) { - DateTime date = dateService.getDateTimeFromCookie(cookieDate); - repeatingTransactionUpdater.updateRepeatingTransactions(date.dayOfMonth().withMaximumValue()); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); + repeatingTransactionUpdater.updateRepeatingTransactions(date.with(lastDayOfMonth())); prepareModelTransactions(filterHelpers.getFilterConfiguration(request), model, date); @@ -98,17 +100,17 @@ public class TransactionController extends BaseController return ReturnValues.REDIRECT_ALL_ENTITIES; } - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); prepareModelTransactions(filterHelpers.getFilterConfiguration(request), model, date); model.addAttribute(TransactionModelAttributes.ENTITY_TO_DELETE, transactionService.getRepository().getById(ID)); return ReturnValues.DELETE_ENTITY; } - private void prepareModelTransactions(FilterConfiguration filterConfiguration, Model model, DateTime date) + private void prepareModelTransactions(FilterConfiguration filterConfiguration, Model model, LocalDate date) { Account currentAccount = helpers.getCurrentAccount(); - List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(currentAccount, date.getMonthOfYear(), date.getYear(), settingsService.getSettings().isRestActivated(), filterConfiguration); + List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(currentAccount, date.getMonthValue(), date.getYear(), settingsService.getSettings().isRestActivated(), filterConfiguration); model.addAttribute(TransactionModelAttributes.ALL_ENTITIES, transactions); model.addAttribute(TransactionModelAttributes.ACCOUNT, currentAccount); @@ -138,7 +140,7 @@ public class TransactionController extends BaseController return ReturnValues.REDIRECT_ALL_ENTITIES; } - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); Transaction emptyTransaction = new Transaction(); emptyTransaction.setCategory(categoryService.findByType(CategoryType.NONE)); transactionService.prepareModelNewOrEdit(model, false, date, false, emptyTransaction, accountService.getAllActivatedAccountsAsc()); @@ -156,7 +158,7 @@ public class TransactionController extends BaseController @RequestParam(value = "repeatingEndValue", required = false) String repeatingEndValue, @RequestParam(value = "action", required = false) String action) { - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); handlePreviousType(transaction, isRepeating); @@ -200,7 +202,7 @@ public class TransactionController extends BaseController } @SuppressWarnings("ConstantConditions") - private RepeatingOption createRepeatingOption(DateTime startDate, int repeatingModifierNumber, String repeatingModifierType, String repeatingEndType, String repeatingEndValue) + private RepeatingOption createRepeatingOption(LocalDate startDate, int repeatingModifierNumber, String repeatingModifierType, String repeatingEndType, String repeatingEndValue) { RepeatingModifierType type = RepeatingModifierType.getByLocalization(repeatingModifierType); RepeatingModifier repeatingModifier = RepeatingModifier.fromModifierType(type, repeatingModifierNumber); @@ -216,7 +218,7 @@ public class TransactionController extends BaseController repeatingEnd = new RepeatingEndAfterXTimes(Integer.parseInt(repeatingEndValue)); break; case DATE: - DateTime endDate = DateTime.parse(repeatingEndValue, DateTimeFormat.forPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); + LocalDate endDate = LocalDate.parse(repeatingEndValue, DateTimeFormatter.ofPattern(DateFormatStyle.NORMAL.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); repeatingEnd = new RepeatingEndDate(endDate); break; } @@ -224,7 +226,7 @@ public class TransactionController extends BaseController return new RepeatingOption(startDate, repeatingModifier, repeatingEnd); } - private String handleRedirect(WebRequest request, Model model, boolean isEdit, @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, DateTime date, String url, boolean isContinueActivated) + private String handleRedirect(WebRequest request, Model model, boolean isEdit, @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, LocalDate date, String url, boolean isContinueActivated) { if(bindingResult.hasErrors()) { @@ -270,7 +272,7 @@ public class TransactionController extends BaseController transaction = transaction.getRepeatingOption().getReferringTransactions().get(0); } - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); transactionService.prepareModelNewOrEdit(model, true, date, false, transaction, accountService.getAllActivatedAccountsAsc()); if(transaction.isTransfer()) @@ -291,7 +293,7 @@ public class TransactionController extends BaseController accountService.selectAccount(transaction.getAccount().getID()); } - repeatingTransactionUpdater.updateRepeatingTransactions(transaction.getDate().dayOfMonth().withMaximumValue()); + repeatingTransactionUpdater.updateRepeatingTransactions(transaction.getDate().with(lastDayOfMonth())); FilterConfiguration filterConfiguration = FilterConfiguration.DEFAULT; filterConfiguration.setFilterCategories(filterHelpers.getFilterCategories()); @@ -357,7 +359,7 @@ public class TransactionController extends BaseController throw new IllegalStateException("Unexpected value: " + newTransactionType); } - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); transactionService.prepareModelNewOrEdit(model, true, date, true, transactionCopy, accountService.getAllActivatedAccountsAsc()); return redirectUrl; @@ -380,7 +382,7 @@ public class TransactionController extends BaseController existingTransaction = existingTransaction.getRepeatingOption().getReferringTransactions().get(0); } - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + LocalDate date = dateService.getDateTimeFromCookie(cookieDate); Transaction newTransaction = new Transaction(existingTransaction); newTransaction.setID(null); diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java index 073f453e52d4797442948df389a144881c32bd4a..467e0d6330241371143410addfbf8efd027e3332 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java @@ -4,19 +4,19 @@ import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.tags.Tag; -import org.joda.time.DateTime; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; +import java.time.LocalDate; import java.util.List; public interface TransactionRepository extends JpaRepository<Transaction, Integer>, JpaSpecificationExecutor<Transaction> { - List<Transaction> findAllByAccountAndDateBetweenOrderByDateDesc(Account account, DateTime startDate, DateTime endDate); + List<Transaction> findAllByAccountAndDateBetweenOrderByDateDesc(Account account, LocalDate startDate, LocalDate endDate); - List<Transaction> findAllByDateBetweenOrderByDateDesc(DateTime startDate, DateTime endDate); + List<Transaction> findAllByDateBetweenOrderByDateDesc(LocalDate startDate, LocalDate endDate); List<Transaction> findAllByAccount(Account account); @@ -25,13 +25,13 @@ public interface TransactionRepository extends JpaRepository<Transaction, Intege List<Transaction> findAllByTagsContaining(Tag tag); @Query(value = "SELECT SUM(t.amount) FROM Transaction as t WHERE t.account.ID = ?1 AND t.transferAccount.ID IS NULL AND t.date BETWEEN ?2 AND ?3") - Integer getRestForNormalAndRepeating(int accountID, DateTime startDate, DateTime endDate); + Integer getRestForNormalAndRepeating(int accountID, LocalDate startDate, LocalDate endDate); @Query(value = "SELECT SUM(t.amount) FROM Transaction as t WHERE t.account.ID = ?1 AND t.transferAccount.ID IS NOT NULL AND t.date BETWEEN ?2 AND ?3") - Integer getRestForTransferSource(int accountID, DateTime startDate, DateTime endDate); + Integer getRestForTransferSource(int accountID, LocalDate startDate, LocalDate endDate); @Query(value = "SELECT SUM(t.amount) FROM Transaction as t WHERE t.transferAccount.ID = ?1 AND t.date BETWEEN ?2 AND ?3") - Integer getRestForTransferDestination(int accountID, DateTime startDate, DateTime endDate); + Integer getRestForTransferDestination(int accountID, LocalDate startDate, LocalDate endDate); List<Transaction> findAllByTransferAccount(Account account); diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java index 635d611c4bae899ee7ec2ddf5feedc5e5d69424f..6e8d3e92216714d4979603f730498827ebf3a3c7 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java @@ -15,10 +15,8 @@ import de.deadlocker8.budgetmaster.tags.Tag; import de.deadlocker8.budgetmaster.tags.TagRepository; import de.deadlocker8.budgetmaster.tags.TagService; import de.deadlocker8.budgetmaster.templates.Template; -import de.deadlocker8.budgetmaster.utils.DateHelper; import de.deadlocker8.budgetmaster.utils.Strings; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,10 +25,13 @@ import org.springframework.stereotype.Service; import org.springframework.ui.Model; import java.text.MessageFormat; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import static java.time.temporal.TemporalAdjusters.lastDayOfMonth; + @Service public class TransactionService implements Resettable { @@ -77,14 +78,15 @@ public class TransactionService implements Resettable private List<Transaction> getTransactionsForMonthAndYearWithRest(Account account, int month, int year, FilterConfiguration filterConfiguration) { - DateTime startDate = DateHelper.getCurrentDateWithUTC().withYear(year).withMonthOfYear(month).minusMonths(1).dayOfMonth().withMaximumValue(); List<Transaction> transactions = getTransactionsForMonthAndYearWithoutRest(account, month, year, filterConfiguration); + LocalDate endDate = LocalDate.of(year, month, 1).minusMonths(1).with(lastDayOfMonth()); + Transaction transactionRest = new Transaction(); transactionRest.setCategory(categoryService.findByType(CategoryType.REST)); transactionRest.setName(Localization.getString(Strings.CATEGORY_REST)); - transactionRest.setDate(DateHelper.getCurrentDateWithUTC().withYear(year).withMonthOfYear(month).withDayOfMonth(1)); - transactionRest.setAmount(getRest(account, startDate)); + transactionRest.setDate(LocalDate.of(year, month, 1)); + transactionRest.setAmount(getRest(account, endDate)); transactionRest.setTags(new ArrayList<>()); transactions.add(transactionRest); @@ -93,27 +95,19 @@ public class TransactionService implements Resettable private List<Transaction> getTransactionsForMonthAndYearWithoutRest(Account account, int month, int year, FilterConfiguration filterConfiguration) { - // dayOfMonth = 10 --> arbitrary day not too close to the edges (0 or max day of month) - final DateTime referenceTime = new DateTime(year, month, 10, 0, 0, 0, 0); - - final DateTime startDate = referenceTime - .dayOfMonth() - .withMinimumValue(); - - final DateTime endDate = referenceTime - .dayOfMonth() - .withMaximumValue(); + final LocalDate startDate = LocalDate.of(year, month, 1); + final LocalDate endDate = LocalDate.of(year, month, 1).with(lastDayOfMonth()); return getTransactionsForAccount(account, startDate, endDate, filterConfiguration); } - public List<Transaction> getTransactionsForAccountUntilDate(Account account, DateTime date, FilterConfiguration filterConfiguration) + public List<Transaction> getTransactionsForAccountUntilDate(Account account, LocalDate date, FilterConfiguration filterConfiguration) { - DateTime startDate = DateHelper.getCurrentDateWithUTC().withYear(1900).withMonthOfYear(1).withDayOfMonth(1); + LocalDate startDate = LocalDate.of(1900, 1, 1); return getTransactionsForAccount(account, startDate, date, filterConfiguration); } - public List<Transaction> getTransactionsForAccount(Account account, DateTime startDate, DateTime endDate, FilterConfiguration filterConfiguration) + public List<Transaction> getTransactionsForAccount(Account account, LocalDate startDate, LocalDate endDate, FilterConfiguration filterConfiguration) { if(filterConfiguration == null) { @@ -130,9 +124,9 @@ public class TransactionService implements Resettable return transactionRepository.findAll(spec); } - private int getRest(Account account, DateTime endDate) + private int getRest(Account account, LocalDate endDate) { - DateTime startDate = DateHelper.getCurrentDateWithUTC().withYear(2000).withMonthOfYear(1).withDayOfMonth(1); + LocalDate startDate = LocalDate.of(2000, 1, 1); Integer restForNormalAndRepeating = transactionRepository.getRestForNormalAndRepeating(account.getID(), startDate, endDate); Integer restForTransferSource = transactionRepository.getRestForTransferSource(account.getID(), startDate, endDate); Integer restForTransferDestination = transactionRepository.getRestForTransferDestination(account.getID(), startDate, endDate); @@ -297,7 +291,7 @@ public class TransactionService implements Resettable return item; } - public void prepareModelNewOrEdit(Model model, boolean isEdit, DateTime date, boolean changeTypeInProgress, TransactionBase item, List<Account> accounts) + public void prepareModelNewOrEdit(Model model, boolean isEdit, LocalDate date, boolean changeTypeInProgress, TransactionBase item, List<Account> accounts) { model.addAttribute(TransactionModelAttributes.IS_EDIT, isEdit); model.addAttribute(TransactionModelAttributes.CURRENT_DATE, date); diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java index d29b5fcf0949b5c30913120e92d519ab0725a64d..47a0ba632baca53816d225e6008a5842881430d4 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSpecifications.java @@ -3,12 +3,12 @@ package de.deadlocker8.budgetmaster.transactions; import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.tags.Tag; import de.deadlocker8.budgetmaster.tags.Tag_; -import org.joda.time.DateTime; import org.springframework.data.jpa.domain.Specification; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.Join; import javax.persistence.criteria.Predicate; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -18,7 +18,7 @@ public class TransactionSpecifications { } - public static Specification<Transaction> withDynamicQuery(final DateTime startDate, final DateTime endDate, + public static Specification<Transaction> withDynamicQuery(final LocalDate startDate, final LocalDate endDate, Account account, final boolean isIncome, boolean isExpenditure, boolean isTransfer, final Boolean isRepeating, diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction_.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction_.java index 5b7faeb0fffd5e4990acec61e38b4f43c1c89c39..f68320d0f97078d39c60ce3efb5800d938326156 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction_.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction_.java @@ -4,18 +4,18 @@ import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import de.deadlocker8.budgetmaster.tags.Tag; -import org.joda.time.DateTime; import javax.persistence.metamodel.ListAttribute; import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.StaticMetamodel; +import java.time.LocalDate; @StaticMetamodel(Transaction.class) public class Transaction_ { public static volatile SingularAttribute<Transaction, Integer> ID; public static volatile SingularAttribute<Transaction, Integer> amount; - public static volatile SingularAttribute<Transaction, DateTime> date; + public static volatile SingularAttribute<Transaction, LocalDate> date; public static volatile SingularAttribute<Transaction, Account> account; public static volatile SingularAttribute<Transaction, Category> category; public static volatile SingularAttribute<Transaction, String> name; diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java b/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java index 397aa7895b5b4205d2068413abec155760a47c6f..87cc9cafa759bfb6e6451871717f2fdef2882291 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java @@ -1,9 +1,7 @@ package de.deadlocker8.budgetmaster.utils; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; - -import java.util.TimeZone; +import java.time.LocalDate; +import java.time.LocalDateTime; public class DateHelper { @@ -11,13 +9,13 @@ public class DateHelper { } - public static DateTime getCurrentDate() + public static LocalDate getCurrentDate() { - return DateTime.now(DateTimeZone.forTimeZone(TimeZone.getDefault())); + return LocalDate.now(); } - public static DateTime getCurrentDateWithUTC() + public static LocalDateTime getCurrentDateTime() { - return getCurrentDate().toDateTime(DateTimeZone.forTimeZone(TimeZone.getTimeZone("UTC"))); + return LocalDateTime.now(); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 1598f07a635abb5f6e5609c887e1f2909ae01f1f..a44ce63f3305a76e83ddcb5f8c6a69151bef2b76 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,8 +2,6 @@ spring.mvc.log-resolved-exception=false spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.jadira.usertype.autoRegisterUserTypes = true - spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-request-size=100MB diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index 64e2ab8072e404822286c2f875dff7825b91cd0d..7997f9529831ed6025211388381cefd1f5012128 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -1,7 +1,7 @@ locale=de # DEFAULT -credits=Verwendete Schriftarten: Roboto<br>Verwendete Bibliotheken:<br>spring-boot-starter-parent 2.6.3<br>spring-boot-devtools 2.6.3<br>spring-boot-starter-web 2.6.3<br>spring-boot-starter-test 2.6.3<br>spring-boot-starter-security 2.6.3<br>spring-boot-starter-tomcat 2.6.3<br>spring-boot-starter-freemarker 2.6.3<br>spring-boot-starter-validation 2.6.3<br>h2 1.4.199<br>joda-time 2.10.13<br>usertype.core 7.0.0.CR1<br>maven-surefire-plugin 2.22.2<br>launch4j-maven-plugin 1.7.25<br>jquery 3.6.0<br>materialize 1.0.0<br>fontawesome 6.0.0<br>Google Material Icons<br>Vanilla-picker 2.12.1<br>SortableJS 1.14.0<br>jlibs 3.2.0<br>itextpdf 5.5.13.2<br>mousetrap 1.6.5<br>plotly 2.9.0<br>momentjs 2.29.1<br>codemirror 5.62.2<br>webjars-locator 0.42<br>libUtils 3.2.7<br>libStorage 3.2.3<br>natorder 1.1.2<br>jgit 6.0.0.202111291000-r<br> +credits=Verwendete Schriftarten: Roboto<br>Verwendete Bibliotheken:<br>spring-boot-starter-parent 2.6.3<br>spring-boot-devtools 2.6.3<br>spring-boot-starter-web 2.6.3<br>spring-boot-starter-test 2.6.3<br>spring-boot-starter-security 2.6.3<br>spring-boot-starter-tomcat 2.6.3<br>spring-boot-starter-freemarker 2.6.3<br>spring-boot-starter-validation 2.6.3<br>h2 1.4.199<br>maven-surefire-plugin 2.22.2<br>launch4j-maven-plugin 1.7.25<br>jquery 3.6.0<br>materialize 1.0.0<br>fontawesome 6.0.0<br>Google Material Icons<br>Vanilla-picker 2.12.1<br>SortableJS 1.14.0<br>jlibs 3.2.0<br>itextpdf 5.5.13.2<br>mousetrap 1.6.5<br>plotly 2.9.0<br>momentjs 2.29.1<br>codemirror 5.62.2<br>webjars-locator 0.42<br>libUtils 3.2.7<br>libStorage 3.2.3<br>natorder 1.1.2<br>jgit 6.0.0.202111291000-r<br> folder=Deadlocker/BudgetMaster roadmap.url=https://roadmaps.thecodelabs.de/roadmap/1 github.url=https://github.com/deadlocker8/BudgetMaster diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index a7cd1e751d37401bbbfaafdf5abb9a8bb391d71d..b5403b03bbb1171bf5a2e9ebeec01bfc6d778cd3 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -1,7 +1,7 @@ locale=en # DEFAULT -credits=Fonts used: Roboto<br>Libraries used:<br>spring-boot-starter-parent 2.6.3<br>spring-boot-devtools 2.6.3<br>spring-boot-starter-web 2.6.3<br>spring-boot-starter-test 2.6.3<br>spring-boot-starter-security 2.6.3<br>spring-boot-starter-tomcat 2.6.3<br>spring-boot-starter-freemarker 2.6.3<br>spring-boot-starter-validation 2.6.3<br>h2 1.4.199<br>joda-time 2.10.13<br>usertype.core 7.0.0.CR1<br>maven-surefire-plugin 2.22.2<br>launch4j-maven-plugin 1.7.25<br>jquery 3.6.0<br>materialize 1.0.0<br>fontawesome 6.0.0<br>Google Material Icons<br>Vanilla-picker 2.12.1<br>SortableJS 1.14.0<br>jlibs 3.2.0<br>itextpdf 5.5.13.2<br>mousetrap 1.6.5<br>plotly 2.9.0<br>momentjs 2.29.1<br>codemirror 5.62.2<br>webjars-locator 0.42<br>libUtils 3.2.7<br>libStorage 3.2.3<br>natorder 1.1.0<br>jgit 5.13.0.202109080827-r<br> +credits=Fonts used: Roboto<br>Libraries used:<br>spring-boot-starter-parent 2.6.3<br>spring-boot-devtools 2.6.3<br>spring-boot-starter-web 2.6.3<br>spring-boot-starter-test 2.6.3<br>spring-boot-starter-security 2.6.3<br>spring-boot-starter-tomcat 2.6.3<br>spring-boot-starter-freemarker 2.6.3<br>spring-boot-starter-validation 2.6.3<br>h2 1.4.199<br>maven-surefire-plugin 2.22.2<br>launch4j-maven-plugin 1.7.25<br>jquery 3.6.0<br>materialize 1.0.0<br>fontawesome 6.0.0<br>Google Material Icons<br>Vanilla-picker 2.12.1<br>SortableJS 1.14.0<br>jlibs 3.2.0<br>itextpdf 5.5.13.2<br>mousetrap 1.6.5<br>plotly 2.9.0<br>momentjs 2.29.1<br>codemirror 5.62.2<br>webjars-locator 0.42<br>libUtils 3.2.7<br>libStorage 3.2.3<br>natorder 1.1.0<br>jgit 5.13.0.202109080827-r<br> folder=Deadlocker/BudgetMaster roadmap.url=https://roadmaps.thecodelabs.de/roadmap/2 github.url=https://github.com/deadlocker8/BudgetMaster diff --git a/src/main/resources/templates/helpers/globalDatePicker.ftl b/src/main/resources/templates/helpers/globalDatePicker.ftl index 8afcd1e11c022ffd22d04eebe9b3cdea2b16b0a6..240a4e536305ce859e76b9eb6af2b8b0d4e082a6 100644 --- a/src/main/resources/templates/helpers/globalDatePicker.ftl +++ b/src/main/resources/templates/helpers/globalDatePicker.ftl @@ -20,7 +20,7 @@ <div id="global-datepicker-select-month"> <h4>${locale.getString("title.datepicker.month")}</h4> <#assign montList = localizedMonthNames/> - <#assign currentMonth = montList[currentDate.getMonthOfYear() - 1]/> + <#assign currentMonth = montList[currentDate.getMonthValue() - 1]/> <@datepickerGrid montList currentMonth/> </div> </div> diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java index e830375e69c6166bb7d8ccb1adeb8716ba2783fe..b12bd58e540fc670a3cd3c87becff4d253e4beaa 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java @@ -4,8 +4,6 @@ import de.deadlocker8.budgetmaster.authentication.UserService; import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper; import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTestBase; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; -import org.joda.time.DateTimeUtils; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.openqa.selenium.*; @@ -15,7 +13,6 @@ import org.openqa.selenium.support.ui.WebDriverWait; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date; -import java.util.TimeZone; import static org.assertj.core.api.Assertions.assertThat; @@ -79,36 +76,6 @@ class LoginControllerTest extends SeleniumTestBase assertThat(driver.manage().getCookies()).contains(expectedCookie); } - @Test - void test_successLogin_cookieShortlyAfterMidnightInSystemTimezone() - { - // override system time to setup midnight scenario - // DateTime.now() will return the time in UTC --> shortly before midnight - DateTimeUtils.setCurrentMillisFixed(new DateTime(2021, 10, 24, 23, 10, 0).getMillis()); - - try - { - // system time zone is Berlin --> at least +1 hour --> after midnight - TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin")); - - IntegrationTestHelper helper = new IntegrationTestHelper(driver, port); - helper.start(); - helper.login(UserService.DEFAULT_PASSWORD); - helper.hideBackupReminder(); - helper.hideWhatsNewDialog(); - - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5)); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("logo-home"))); - - Cookie expectedCookie = new Cookie("currentDate", "25.10.21", "localhost", "/", null, false, false, "None"); - assertThat(driver.manage().getCookies()).contains(expectedCookie); - } - finally - { - DateTimeUtils.setCurrentMillisSystem(); - } - } - @Test void test_logout() { diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java index a8e028f04a3bbefe6ad095b24666d1c692b8dc6c..9ca8b37a9de10c4554c16f5c7be0e6548826a0c6 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSearchSpecificationsTest.java @@ -17,8 +17,6 @@ import de.deadlocker8.budgetmaster.tags.TagRepository; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionRepository; import de.deadlocker8.budgetmaster.transactions.TransactionSearchSpecifications; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -27,6 +25,7 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.data.jpa.domain.Specification; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -83,7 +82,7 @@ class TransactionSearchSpecificationsTest transaction1.setName("Test"); transaction1.setAmount(200); transaction1.setDescription("Random Whatever"); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transaction1.setCategory(category1); transaction1.setAccount(account); ArrayList<Tag> tags = new ArrayList<>(); @@ -94,12 +93,12 @@ class TransactionSearchSpecificationsTest transaction2 = new Transaction(); transaction2.setName("lalala"); transaction2.setAmount(-525); - transaction2.setDate(new DateTime(2018, 11, 3, 12, 0, 0, 0)); + transaction2.setDate(LocalDate.of(2018, 11, 3)); transaction2.setCategory(category2); transaction2.setAccount(account); transaction2 = transactionRepository.save(transaction2); - DateTime repeatingTransactionDate = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); + LocalDate repeatingTransactionDate = LocalDate.of(2018, 3, 13); repeatingOption = new RepeatingOption(); repeatingOption.setModifier(new RepeatingModifierDays(10)); repeatingOption.setStartDate(repeatingTransactionDate); @@ -122,7 +121,7 @@ class TransactionSearchSpecificationsTest transferTransaction = new Transaction(); transferTransaction.setName("TransferTransaction"); transferTransaction.setAmount(-500); - transferTransaction.setDate(new DateTime(2018, 8, 3, 12, 0, 0, 0)); + transferTransaction.setDate(LocalDate.of(2018, 8, 3)); transferTransaction.setCategory(category2); transferTransaction.setAccount(account); transferTransaction.setTransferAccount(account2); @@ -131,7 +130,7 @@ class TransactionSearchSpecificationsTest transactionFromHiddenAccount = new Transaction(); transactionFromHiddenAccount.setName("inside hidden account"); transactionFromHiddenAccount.setAmount(-525); - transactionFromHiddenAccount.setDate(new DateTime(2018, 11, 3, 12, 0, 0, 0)); + transactionFromHiddenAccount.setDate(LocalDate.of(2018, 11, 3)); transactionFromHiddenAccount.setCategory(category2); transactionFromHiddenAccount.setAccount(accountHidden); transactionFromHiddenAccount = transactionRepository.save(transactionFromHiddenAccount); @@ -139,7 +138,7 @@ class TransactionSearchSpecificationsTest transactionWithMultipleTags = new Transaction(); transactionWithMultipleTags.setName("I am the TagMaster"); transactionWithMultipleTags.setAmount(-525); - transactionWithMultipleTags.setDate(new DateTime(2018, 11, 3, 12, 0, 0, 0)); + transactionWithMultipleTags.setDate(LocalDate.of(2018, 11, 3)); transactionWithMultipleTags.setCategory(category1); transactionWithMultipleTags.setAccount(account); transactionWithMultipleTags.setTags(List.of(tag1, tag2)); diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java index ba9315566d8c370d86b23ca06667024dd86c8882..2338726d6d959a43562a4333830139cd31e0c0aa 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionServiceDatabaseTest.java @@ -2,18 +2,15 @@ package de.deadlocker8.budgetmaster.unit; import de.deadlocker8.budgetmaster.Main; import de.deadlocker8.budgetmaster.accounts.AccountRepository; -import de.deadlocker8.budgetmaster.accounts.AccountService; import de.deadlocker8.budgetmaster.accounts.AccountType; import de.deadlocker8.budgetmaster.filter.FilterConfiguration; -import de.deadlocker8.budgetmaster.icon.IconService; import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTest; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionService; import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; -import org.joda.time.DateTimeUtils; -import org.joda.time.format.DateTimeFormat; import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.jdbc.DataSourceBuilder; @@ -28,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.sql.DataSource; import java.io.IOException; +import java.time.LocalDate; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -72,10 +70,10 @@ class TransactionServiceDatabaseTest @Test void test_getTransactionsForAccount_specificAccount() { - DateTime date1 = DateTime.parse("2020-04-30", DateTimeFormat.forPattern("yyyy-MM-dd")); + LocalDate date1 = LocalDate.of(2020, 4, 30); FilterConfiguration filterConfiguration = new FilterConfiguration(true, true, true, true, true, null, null, ""); - List<Transaction> transactions = transactionService.getTransactionsForAccount(accountRepository.findByName("Second Account"), date1, DateHelper.getCurrentDate(), filterConfiguration); + List<Transaction> transactions = transactionService.getTransactionsForAccount(accountRepository.findByName("Second Account"), date1, LocalDate.now(), filterConfiguration); assertThat(transactions).hasSize(2); assertThat(transactions.get(0)).hasFieldOrPropertyWithValue("ID", 9); // transfer @@ -85,18 +83,18 @@ class TransactionServiceDatabaseTest @Test void test_getTransactionsForAccount_all() { - DateTime date1 = DateTime.parse("2020-04-30", DateTimeFormat.forPattern("yyyy-MM-dd")); + LocalDate date1 = LocalDate.of(2020, 4, 30); FilterConfiguration filterConfiguration = new FilterConfiguration(true, true, true, true, true, null, null, ""); - List<Transaction> transactions = transactionService.getTransactionsForAccount(accountRepository.findAllByType(AccountType.ALL).get(0), date1, DateHelper.getCurrentDate(), filterConfiguration); + List<Transaction> transactions = transactionService.getTransactionsForAccount(accountRepository.findAllByType(AccountType.ALL).get(0), date1, LocalDate.now(), filterConfiguration); assertThat(transactions).hasSize(8); } @Test void test_getTransactionsForAccountUntilDate() { - DateTime date1 = DateTime.parse("2020-04-30", DateTimeFormat.forPattern("yyyy-MM-dd")); - DateTime date2 = DateTime.parse("2020-05-20", DateTimeFormat.forPattern("yyyy-MM-dd")); + LocalDate date1 = LocalDate.of(2020, 4, 30); + LocalDate date2 = LocalDate.of(2020, 5, 20); FilterConfiguration filterConfiguration = new FilterConfiguration(true, true, true, true, true, null, null, ""); List<Transaction> transactions = transactionService.getTransactionsForAccount(accountRepository.findByName("Default Account"), date1, date2, filterConfiguration); @@ -111,28 +109,22 @@ class TransactionServiceDatabaseTest List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(accountRepository.findByName("Default Account"), 6, 2021, false, filterConfiguration); assertThat(transactions).hasSize(1); assertThat(transactions.get(0).getDate()) - .isEqualTo(new DateTime(2021, 6, 30, 0, 0, 0, 0)); + .isEqualTo(LocalDate.of(2021, 6, 30)); } @Test void test_getTransactionsForMonthAndYear_CloseToMidnight() { - // override system time to setup midnight scenario - // DateTime.now() will return the time in UTC --> shortly before midnight - DateTimeUtils.setCurrentMillisFixed(new DateTime(2021, 2, 5, 21, 45, 0).getMillis()); - - try + try(MockedStatic<DateHelper> dateHelper = Mockito.mockStatic(DateHelper.class)) { + dateHelper.when(DateHelper::getCurrentDate).thenReturn(LocalDate.of(2021, 2, 5)); + FilterConfiguration filterConfiguration = new FilterConfiguration(true, true, true, true, true, null, null, ""); List<Transaction> transactions = transactionService.getTransactionsForMonthAndYear(accountRepository.findByName("Default Account"), 6, 2021, false, filterConfiguration); assertThat(transactions).hasSize(1); assertThat(transactions.get(0).getDate()) - .isEqualTo(new DateTime(2021, 6, 30, 0, 0, 0, 0)); - } - finally - { - DateTimeUtils.setCurrentMillisSystem(); + .isEqualTo(LocalDate.of(2021, 6, 30)); } } } diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSpecificationsTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSpecificationsTest.java index 03bf29e0bf9ef709e50c5b1ec3a0196583ee1a2d..d05b137c5932ee5bccb2021a3dc2837e060eac20 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSpecificationsTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/TransactionSpecificationsTest.java @@ -16,9 +16,6 @@ import de.deadlocker8.budgetmaster.tags.TagRepository; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionRepository; import de.deadlocker8.budgetmaster.transactions.TransactionSpecifications; -import de.deadlocker8.budgetmaster.utils.DateHelper; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -27,6 +24,7 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.data.jpa.domain.Specification; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -67,7 +65,7 @@ class TransactionSpecificationsTest private RepeatingOptionRepository repeatingOptionRepository; private RepeatingOption repeatingOption; - private DateTime startDate = new DateTime(2018, 1, 1, 12, 0, 0, 0); + private LocalDate startDate = LocalDate.of(2018, 1, 1); @BeforeEach public void init() @@ -88,7 +86,7 @@ class TransactionSpecificationsTest transaction1 = new Transaction(); transaction1.setName("Test"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transaction1.setCategory(category1); transaction1.setAccount(account); ArrayList<Tag> tags = new ArrayList<>(); @@ -99,12 +97,12 @@ class TransactionSpecificationsTest transaction2 = new Transaction(); transaction2.setName("Test_2"); transaction2.setAmount(-525); - transaction2.setDate(new DateTime(2018, 12, 3, 12, 0, 0, 0)); + transaction2.setDate(LocalDate.of(2018, 12, 3)); transaction2.setCategory(category2); transaction2.setAccount(account); transaction2 = transactionRepository.save(transaction2); - DateTime repeatingTransactionDate = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); + LocalDate repeatingTransactionDate = LocalDate.of(2018, 3, 13); repeatingOption = new RepeatingOption(); repeatingOption.setModifier(new RepeatingModifierDays(10)); repeatingOption.setStartDate(repeatingTransactionDate); @@ -127,7 +125,7 @@ class TransactionSpecificationsTest transferTransaction = new Transaction(); transferTransaction.setName("TransferTransaction"); transferTransaction.setAmount(-500); - transferTransaction.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transferTransaction.setDate(LocalDate.of(2018, 10, 3)); transferTransaction.setCategory(category2); transferTransaction.setAccount(account); transferTransaction.setTransferAccount(account2); @@ -136,7 +134,7 @@ class TransactionSpecificationsTest transferTransactionWrongAccount = new Transaction(); transferTransactionWrongAccount.setName("Lunch"); transferTransactionWrongAccount.setAmount(-1100); - transferTransactionWrongAccount.setDate(new DateTime(2018, 9, 18, 12, 0, 0, 0)); + transferTransactionWrongAccount.setDate(LocalDate.of(2018, 9, 18)); transferTransactionWrongAccount.setCategory(category2); transferTransactionWrongAccount.setAccount(account2); transferTransactionWrongAccount.setTransferAccount(account2); @@ -145,7 +143,7 @@ class TransactionSpecificationsTest transactionInHiddenAccount = new Transaction(); transactionInHiddenAccount.setName("Transaction in Hidden Account"); transactionInHiddenAccount.setAmount(-1100); - transactionInHiddenAccount.setDate(new DateTime(2018, 9, 18, 12, 0, 0, 0)); + transactionInHiddenAccount.setDate(LocalDate.of(2018, 9, 18)); transactionInHiddenAccount.setAccount(accountHidden); transactionInHiddenAccount = transactionRepository.save(transactionInHiddenAccount); } @@ -153,7 +151,7 @@ class TransactionSpecificationsTest @Test void getIncomesAndExpendituresAndTransfers() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(4) @@ -166,7 +164,7 @@ class TransactionSpecificationsTest @Test void getIncomesAndExpenditures() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, false, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, false, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(3) @@ -178,7 +176,7 @@ class TransactionSpecificationsTest @Test void getIncomes() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, false, false, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, false, false, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -188,7 +186,7 @@ class TransactionSpecificationsTest @Test void getExpenditures() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, false, true, false, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, false, true, false, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(2) @@ -199,7 +197,7 @@ class TransactionSpecificationsTest @Test void getTransfers() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, false, false, true, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, false, false, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -209,7 +207,7 @@ class TransactionSpecificationsTest @Test void incomesAndExpendituresFalse() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, false, false, false, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, false, false, false, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(3) @@ -221,7 +219,7 @@ class TransactionSpecificationsTest @Test void getTransferBackReferences_NoReferences() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, false, true, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, false, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -231,7 +229,7 @@ class TransactionSpecificationsTest @Test void getTransferBackReferences() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account2, false, false, true, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account2, false, false, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(2) @@ -242,7 +240,7 @@ class TransactionSpecificationsTest @Test void getTransferBackReferences_excludeExpenditures() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account2, true, false, true, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account2, true, false, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -252,7 +250,7 @@ class TransactionSpecificationsTest @Test void getTransferBackReferences_excludeIncomes() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account2, false, true, true, null, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account2, false, true, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -262,8 +260,8 @@ class TransactionSpecificationsTest @Test void getTransferBackReferences_WithStartDate() { - DateTime startDate2019 = new DateTime(2019, 1, 1, 12, 0, 0, 0); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate2019, DateHelper.getCurrentDate(), account2, false, false, true, null, List.of(), List.of(), null); + LocalDate startDate2019 = LocalDate.of(2019, 1, 1); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate2019, LocalDate.now(), account2, false, false, true, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).isEmpty(); @@ -272,7 +270,7 @@ class TransactionSpecificationsTest @Test void getRepeating() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, false, true, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, false, true, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -282,7 +280,7 @@ class TransactionSpecificationsTest @Test void noRepeating() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, false, List.of(), List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, false, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(3) @@ -296,7 +294,7 @@ class TransactionSpecificationsTest { List<Integer> categoryIDs = new ArrayList<>(); categoryIDs.add(categoryUnused.getID()); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, categoryIDs, List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, categoryIDs, List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).isEmpty(); @@ -307,7 +305,7 @@ class TransactionSpecificationsTest { List<Integer> categoryIDs = new ArrayList<>(); categoryIDs.add(category1.getID()); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, categoryIDs, List.of(), null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, categoryIDs, List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(2) @@ -318,7 +316,7 @@ class TransactionSpecificationsTest @Test void getByFullName() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, List.of(), List.of(), "Repeating"); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, List.of(), List.of(), "Repeating"); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -328,7 +326,7 @@ class TransactionSpecificationsTest @Test void getByPartialName() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, List.of(), List.of(), "tin"); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, List.of(), List.of(), "tin"); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -338,7 +336,7 @@ class TransactionSpecificationsTest @Test void getByPartialName_ExcludeTransfersWithWrongAccount() { - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account2, true, true, true, null, List.of(), List.of(), "tion"); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account2, true, true, true, null, List.of(), List.of(), "tion"); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -351,7 +349,7 @@ class TransactionSpecificationsTest List<Integer> tagIDs = new ArrayList<>(); tagIDs.add(tag1.getID()); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, List.of(), tagIDs, null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, List.of(), tagIDs, null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -365,7 +363,7 @@ class TransactionSpecificationsTest tagIDs.add(tag1.getID()); tagIDs.add(tag2.getID()); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, List.of(), tagIDs, null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, List.of(), tagIDs, null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(2) @@ -380,7 +378,7 @@ class TransactionSpecificationsTest List<Integer> tagIDs = new ArrayList<>(); tagIDs.add(tagUnused.getID()); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, true, true, true, null, List.of(), tagIDs, null); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, true, true, true, null, List.of(), tagIDs, null); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).isEmpty(); @@ -396,7 +394,7 @@ class TransactionSpecificationsTest tagIDs.add(tag1.getID()); tagIDs.add(tag2.getID()); - Specification spec = TransactionSpecifications.withDynamicQuery(startDate, DateHelper.getCurrentDate(), account, false, true, true, true, categoryIDs, tagIDs, "Repeating"); + Specification spec = TransactionSpecifications.withDynamicQuery(startDate, LocalDate.now(), account, false, true, true, true, categoryIDs, tagIDs, "Repeating"); List<Transaction> results = transactionRepository.findAll(spec); assertThat(results).hasSize(1) @@ -406,7 +404,7 @@ class TransactionSpecificationsTest @Test void getFromAllAccountsExceptTransfersWithSpecificEndDate() { - DateTime endDate = new DateTime(2018, 11, 30, 12, 0, 0, 0); + LocalDate endDate = LocalDate.of(2018, 11, 30); Specification spec = TransactionSpecifications.withDynamicQuery(startDate, endDate, null, true, true, false, null, List.of(), List.of(), null); List<Transaction> results = transactionRepository.findAll(spec); diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/backup/LocalGitBackupTaskTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/backup/LocalGitBackupTaskTest.java index 235e73b6111f2c1a30659d10af03c87cfd70883f..d02982424e462ed868046c8fe22b8a1fec286187 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/backup/LocalGitBackupTaskTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/backup/LocalGitBackupTaskTest.java @@ -11,20 +11,20 @@ import de.deadlocker8.budgetmaster.database.model.v7.BackupDatabase_v7; import de.deadlocker8.budgetmaster.settings.Settings; import de.deadlocker8.budgetmaster.settings.SettingsService; import de.deadlocker8.budgetmaster.unit.helpers.Helpers; +import de.deadlocker8.budgetmaster.utils.DateHelper; import de.thecodelabs.utils.util.OS; -import org.joda.time.DateTimeUtils; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.Mockito; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.time.LocalDateTime; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -56,14 +56,6 @@ class LocalGitBackupTaskTest { gitExecutable = "/usr/bin/git"; } - - DateTimeUtils.setCurrentMillisFixed(1612004400000L); - } - - @AfterAll - public static void cleanup() - { - DateTimeUtils.setCurrentMillisSystem(); } @Test @@ -97,29 +89,34 @@ class LocalGitBackupTaskTest @Test void test_runBackup_firstCommit() { - final Settings previousSettings = Settings.getDefault(); - previousSettings.setAutoBackupStrategy(AutoBackupStrategy.GIT_LOCAL); - - final Path repositoryFolder = tempFolder.resolve(".git"); - - final BackupDatabase_v7 database = new BackupDatabase_v7(); - Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(database); - Mockito.doCallRealMethod().when(databaseService).exportDatabase(Mockito.any()); - - final LocalGitBackupTask localGitBackupTask = new LocalGitBackupTask(databaseService, settingsService); - localGitBackupTask.setGitFolder(repositoryFolder); - localGitBackupTask.run(); - - assertThat(localGitBackupTask.getBackupStatus()).isEqualByComparingTo(BackupStatus.OK); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "rev-list", "--all", "--count")) - .isEqualTo("1"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "log", "--pretty=%B", "-1")) - .startsWith("2021-01-30"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "show", "--name-only", "--oneline", "HEAD")) - .contains(BackupTask.DATABASE_FILE_NAME); + try(MockedStatic<DateHelper> dateHelper = Mockito.mockStatic(DateHelper.class)) + { + dateHelper.when(DateHelper::getCurrentDateTime).thenReturn(LocalDateTime.of(2021, 1, 30, 12, 0, 0)); + + final Settings previousSettings = Settings.getDefault(); + previousSettings.setAutoBackupStrategy(AutoBackupStrategy.GIT_LOCAL); + + final Path repositoryFolder = tempFolder.resolve(".git"); + + final BackupDatabase_v7 database = new BackupDatabase_v7(); + Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(database); + Mockito.doCallRealMethod().when(databaseService).exportDatabase(Mockito.any()); + + final LocalGitBackupTask localGitBackupTask = new LocalGitBackupTask(databaseService, settingsService); + localGitBackupTask.setGitFolder(repositoryFolder); + localGitBackupTask.run(); + + assertThat(localGitBackupTask.getBackupStatus()).isEqualByComparingTo(BackupStatus.OK); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "rev-list", "--all", "--count")) + .isEqualTo("1"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "log", "--pretty=%B", "-1")) + .startsWith("2021-01-30"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "show", "--name-only", "--oneline", "HEAD")) + .contains(BackupTask.DATABASE_FILE_NAME); + } } @Test @@ -149,33 +146,37 @@ class LocalGitBackupTaskTest @Test void test_runBackup_fileChanged() { - final Settings previousSettings = Settings.getDefault(); - previousSettings.setAutoBackupStrategy(AutoBackupStrategy.GIT_LOCAL); - - final Path repositoryFolder = tempFolder.resolve(".git"); - - final BackupDatabase_v7 database = new BackupDatabase_v7(); - Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(database); - Mockito.doCallRealMethod().when(databaseService).exportDatabase(Mockito.any()); - - final LocalGitBackupTask localGitBackupTask = new LocalGitBackupTask(databaseService, settingsService); - localGitBackupTask.setGitFolder(repositoryFolder); - localGitBackupTask.run(); - - final BackupDatabase_v7 databaseModified = new BackupDatabase_v7(List.of(new BackupCategory_v7(5, "myCategory", "#FF0000", CategoryType.CUSTOM, null)), List.of(), List.of(), List.of(), List.of(), List.of(), List.of()); - Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(databaseModified); - localGitBackupTask.run(); - - assertThat(localGitBackupTask.getBackupStatus()) - .isEqualByComparingTo(BackupStatus.OK); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "rev-list", "--all", "--count")) - .isEqualTo("2"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "log", "--pretty=%B", "-1")) - .startsWith("2021-01-30"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "show", "--name-only", "--oneline", "HEAD")) - .contains(BackupTask.DATABASE_FILE_NAME); + try(MockedStatic<DateHelper> dateHelper = Mockito.mockStatic(DateHelper.class)) + { + dateHelper.when(DateHelper::getCurrentDateTime).thenReturn(LocalDateTime.of(2021, 1, 30, 12, 0, 0)); + final Settings previousSettings = Settings.getDefault(); + previousSettings.setAutoBackupStrategy(AutoBackupStrategy.GIT_LOCAL); + + final Path repositoryFolder = tempFolder.resolve(".git"); + + final BackupDatabase_v7 database = new BackupDatabase_v7(); + Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(database); + Mockito.doCallRealMethod().when(databaseService).exportDatabase(Mockito.any()); + + final LocalGitBackupTask localGitBackupTask = new LocalGitBackupTask(databaseService, settingsService); + localGitBackupTask.setGitFolder(repositoryFolder); + localGitBackupTask.run(); + + final BackupDatabase_v7 databaseModified = new BackupDatabase_v7(List.of(new BackupCategory_v7(5, "myCategory", "#FF0000", CategoryType.CUSTOM, null)), List.of(), List.of(), List.of(), List.of(), List.of(), List.of()); + Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(databaseModified); + localGitBackupTask.run(); + + assertThat(localGitBackupTask.getBackupStatus()) + .isEqualByComparingTo(BackupStatus.OK); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "rev-list", "--all", "--count")) + .isEqualTo("2"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "log", "--pretty=%B", "-1")) + .startsWith("2021-01-30"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "show", "--name-only", "--oneline", "HEAD")) + .contains(BackupTask.DATABASE_FILE_NAME); + } } } \ No newline at end of file diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/backup/RemoteGitBackupTaskTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/backup/RemoteGitBackupTaskTest.java index f9dd50270a3c4738f608337ec16c92bb952e471b..96a31cb0df080e8bf9aea207c69dc281982024eb 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/backup/RemoteGitBackupTaskTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/backup/RemoteGitBackupTaskTest.java @@ -11,20 +11,21 @@ import de.deadlocker8.budgetmaster.database.model.v7.BackupDatabase_v7; import de.deadlocker8.budgetmaster.settings.Settings; import de.deadlocker8.budgetmaster.settings.SettingsService; import de.deadlocker8.budgetmaster.unit.helpers.Helpers; +import de.deadlocker8.budgetmaster.utils.DateHelper; import de.thecodelabs.utils.util.OS; -import org.joda.time.DateTimeUtils; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.Mockito; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.time.LocalDateTime; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -55,14 +56,6 @@ class RemoteGitBackupTaskTest { gitExecutable = "/usr/bin/git"; } - - DateTimeUtils.setCurrentMillisFixed(1612004400000L); - } - - @AfterAll - public static void cleanup() - { - DateTimeUtils.setCurrentMillisSystem(); } @Test @@ -152,36 +145,41 @@ class RemoteGitBackupTaskTest @Test void test_runBackup_firstCommit() throws IOException { - // create fake server - final Path fakeServerFolder = Files.createDirectory(tempFolder.resolve("server")); - final Path repositoryFolder = Files.createDirectory(tempFolder.resolve("client")).resolve(".git"); - - final RemoteGitBackupTask remoteGitBackupTask = createBackupTask(repositoryFolder, fakeServerFolder); - remoteGitBackupTask.run(); - - // check local git - assertThat(remoteGitBackupTask.getBackupStatus()). - isEqualByComparingTo(BackupStatus.OK); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "rev-list", "--all", "--count")) - .isEqualTo("1"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "log", "--pretty=%B", "-1")) - .startsWith("2021-01-30"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "show", "--name-only", "--oneline", "HEAD")) - .contains(BackupTask.DATABASE_FILE_NAME); - - // check remote git - assertThat(Helpers.runCommand(fakeServerFolder.toFile(), - gitExecutable, "rev-list", "--all", "--count")) - .isEqualTo("1"); - assertThat(Helpers.runCommand(fakeServerFolder.toFile(), - gitExecutable, "log", "--pretty=%B", "-1")) - .startsWith("2021-01-30"); - assertThat(Helpers.runCommand(fakeServerFolder.toFile(), - gitExecutable, "show", "--name-only", "--oneline", "HEAD")) - .contains(BackupTask.DATABASE_FILE_NAME); + try(MockedStatic<DateHelper> dateHelper = Mockito.mockStatic(DateHelper.class)) + { + dateHelper.when(DateHelper::getCurrentDateTime).thenReturn(LocalDateTime.of(2021, 1, 30, 12, 0, 0)); + + // create fake server + final Path fakeServerFolder = Files.createDirectory(tempFolder.resolve("server")); + final Path repositoryFolder = Files.createDirectory(tempFolder.resolve("client")).resolve(".git"); + + final RemoteGitBackupTask remoteGitBackupTask = createBackupTask(repositoryFolder, fakeServerFolder); + remoteGitBackupTask.run(); + + // check local git + assertThat(remoteGitBackupTask.getBackupStatus()). + isEqualByComparingTo(BackupStatus.OK); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "rev-list", "--all", "--count")) + .isEqualTo("1"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "log", "--pretty=%B", "-1")) + .startsWith("2021-01-30"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "show", "--name-only", "--oneline", "HEAD")) + .contains(BackupTask.DATABASE_FILE_NAME); + + // check remote git + assertThat(Helpers.runCommand(fakeServerFolder.toFile(), + gitExecutable, "rev-list", "--all", "--count")) + .isEqualTo("1"); + assertThat(Helpers.runCommand(fakeServerFolder.toFile(), + gitExecutable, "log", "--pretty=%B", "-1")) + .startsWith("2021-01-30"); + assertThat(Helpers.runCommand(fakeServerFolder.toFile(), + gitExecutable, "show", "--name-only", "--oneline", "HEAD")) + .contains(BackupTask.DATABASE_FILE_NAME); + } } @Test @@ -211,39 +209,43 @@ class RemoteGitBackupTaskTest @Test void test_runBackup_fileChanged() throws IOException { - // create fake server - final Path fakeServerFolder = Files.createDirectory(tempFolder.resolve("server")); - final Path repositoryFolder = Files.createDirectory(tempFolder.resolve("client")).resolve(".git"); - - final RemoteGitBackupTask remoteGitBackupTask = createBackupTask(repositoryFolder, fakeServerFolder); - remoteGitBackupTask.run(); - - final BackupDatabase_v7 databaseModified = new BackupDatabase_v7(List.of(new BackupCategory_v7(5, "myCategory", "#FF0000", CategoryType.CUSTOM, null)), List.of(), List.of(), List.of(), List.of(), List.of(), List.of()); - Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(databaseModified); - remoteGitBackupTask.run(); - - // check local git - assertThat(remoteGitBackupTask.getBackupStatus()).isEqualByComparingTo(BackupStatus.OK); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "rev-list", "--all", "--count")) - .isEqualTo("2"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "log", "--pretty=%B", "-1")) - .startsWith("2021-01-30"); - assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), - gitExecutable, "show", "--name-only", "--oneline", "HEAD")) - .contains(BackupTask.DATABASE_FILE_NAME); - - // check remote git - assertThat(Helpers.runCommand(fakeServerFolder.toFile(), - gitExecutable, "rev-list", "--all", "--count")) - .isEqualTo("2"); - assertThat(Helpers.runCommand(fakeServerFolder.toFile(), - gitExecutable, "log", "--pretty=%B", "-1")) - .startsWith("2021-01-30"); - assertThat(Helpers.runCommand(fakeServerFolder.toFile(), - gitExecutable, "show", "--name-only", "--oneline", "HEAD")) - .contains(BackupTask.DATABASE_FILE_NAME); + try(MockedStatic<DateHelper> dateHelper = Mockito.mockStatic(DateHelper.class)) + { + dateHelper.when(DateHelper::getCurrentDateTime).thenReturn(LocalDateTime.of(2021, 1, 30, 12, 0, 0)); + // create fake server + final Path fakeServerFolder = Files.createDirectory(tempFolder.resolve("server")); + final Path repositoryFolder = Files.createDirectory(tempFolder.resolve("client")).resolve(".git"); + + final RemoteGitBackupTask remoteGitBackupTask = createBackupTask(repositoryFolder, fakeServerFolder); + remoteGitBackupTask.run(); + + final BackupDatabase_v7 databaseModified = new BackupDatabase_v7(List.of(new BackupCategory_v7(5, "myCategory", "#FF0000", CategoryType.CUSTOM, null)), List.of(), List.of(), List.of(), List.of(), List.of(), List.of()); + Mockito.when(databaseService.getDatabaseForJsonSerialization()).thenReturn(databaseModified); + remoteGitBackupTask.run(); + + // check local git + assertThat(remoteGitBackupTask.getBackupStatus()).isEqualByComparingTo(BackupStatus.OK); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "rev-list", "--all", "--count")) + .isEqualTo("2"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "log", "--pretty=%B", "-1")) + .startsWith("2021-01-30"); + assertThat(Helpers.runCommand(repositoryFolder.getParent().toFile(), + gitExecutable, "show", "--name-only", "--oneline", "HEAD")) + .contains(BackupTask.DATABASE_FILE_NAME); + + // check remote git + assertThat(Helpers.runCommand(fakeServerFolder.toFile(), + gitExecutable, "rev-list", "--all", "--count")) + .isEqualTo("2"); + assertThat(Helpers.runCommand(fakeServerFolder.toFile(), + gitExecutable, "log", "--pretty=%B", "-1")) + .startsWith("2021-01-30"); + assertThat(Helpers.runCommand(fakeServerFolder.toFile(), + gitExecutable, "show", "--name-only", "--oneline", "HEAD")) + .contains(BackupTask.DATABASE_FILE_NAME); + } } private RemoteGitBackupTask createBackupTask(Path repositoryFolder, Path fakeServerFolder) diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java index ba4f82b26db3c6bfcccceb991b7e14d415e67dde..8d720c354d52907c81666ceba4a8426f0c23e3d6 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseExportTest.java @@ -38,7 +38,6 @@ import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionRepository; import de.deadlocker8.budgetmaster.transactions.TransactionService; import de.thecodelabs.utils.util.Localization; -import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -52,6 +51,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -204,7 +204,7 @@ class DatabaseExportTest transaction1.setName("ShouldGoInAccount_1"); transaction1.setAmount(200); transaction1.setIsExpenditure(false); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transaction1.setTags(tags); Transaction transaction2 = new Transaction(); @@ -213,7 +213,7 @@ class DatabaseExportTest transaction2.setName("ImPartOfAccount_2"); transaction2.setAmount(-525); transaction2.setIsExpenditure(true); - DateTime transaction2Date = new DateTime(2018, 10, 3, 12, 0, 0, 0); + LocalDate transaction2Date = LocalDate.of(2018, 10, 3); transaction2.setDate(transaction2Date); transaction2.setTags(new ArrayList<>()); RepeatingOption repeatingOption = new RepeatingOption(transaction2Date, diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v8_convertToInternalTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v8_convertToInternalTest.java index 8cba7d79222d675b11e9782a1592dfc9515d7486..147ac69aea745064800790f6e0d769adbaab1f89 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v8_convertToInternalTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseParser_v8_convertToInternalTest.java @@ -21,8 +21,6 @@ import de.deadlocker8.budgetmaster.templates.Template; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.thecodelabs.utils.util.Localization; import de.thecodelabs.utils.util.Localization.LocalizationDelegate; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,6 +28,7 @@ import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -231,8 +230,7 @@ class DatabaseParser_v8_convertToInternalTest Transaction normalTransaction_1 = new Transaction(); normalTransaction_1.setAmount(35000); - DateTime normalTransactionDate = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); - normalTransactionDate = normalTransactionDate.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate normalTransactionDate = LocalDate.of(2018, 3, 13); normalTransaction_1.setDate(normalTransactionDate); normalTransaction_1.setCategory(categoryNone); normalTransaction_1.setName("Income"); @@ -243,8 +241,7 @@ class DatabaseParser_v8_convertToInternalTest Transaction normalTransaction_2 = new Transaction(); normalTransaction_2.setAmount(-2000); - DateTime normalTransaction_2Date = DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")); - normalTransaction_2Date = normalTransaction_2Date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate normalTransaction_2Date = LocalDate.of(2018, 6, 15); normalTransaction_2.setDate(normalTransaction_2Date); normalTransaction_2.setName("Simple"); normalTransaction_2.setDescription(""); @@ -259,8 +256,7 @@ class DatabaseParser_v8_convertToInternalTest Transaction repeatingTransaction_1 = new Transaction(); repeatingTransaction_1.setAmount(-12300); - DateTime repeatingTransaction_1Date = DateTime.parse("2018-03-13", DateTimeFormat.forPattern("yyyy-MM-dd")); - repeatingTransaction_1Date = repeatingTransaction_1Date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate repeatingTransaction_1Date = LocalDate.of(2018, 3, 13); repeatingTransaction_1.setDate(repeatingTransaction_1Date); repeatingTransaction_1.setCategory(categoryNone); repeatingTransaction_1.setName("Test"); @@ -276,8 +272,7 @@ class DatabaseParser_v8_convertToInternalTest Transaction transferTransaction = new Transaction(); transferTransaction.setAmount(-250); - DateTime transferTransactionDate = DateTime.parse("2018-06-15", DateTimeFormat.forPattern("yyyy-MM-dd")); - transferTransactionDate = transferTransactionDate.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate transferTransactionDate = LocalDate.of(2018, 6, 15); transferTransaction.setDate(transferTransactionDate); transferTransaction.setName("Transfer"); transferTransaction.setDescription(""); @@ -289,8 +284,7 @@ class DatabaseParser_v8_convertToInternalTest Transaction repeatingTransferTransaction = new Transaction(); repeatingTransferTransaction.setAmount(-6000); - DateTime transferTransactionDate_2 = DateTime.parse("2018-03-15", DateTimeFormat.forPattern("yyyy-MM-dd")); - transferTransactionDate_2 = transferTransactionDate_2.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0); + LocalDate transferTransactionDate_2 = LocalDate.of(2018, 3, 15); repeatingTransferTransaction.setDate(transferTransactionDate_2); repeatingTransferTransaction.setCategory(categoryNone); repeatingTransferTransaction.setName("repeat my transfer"); diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java index 425c4d95c5b874ebaf37ac2f394b96d2cb696928..af645034eaf6843618f31c247453634dc39e6578 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java @@ -35,7 +35,6 @@ import de.deadlocker8.budgetmaster.templates.TemplateRepository; import de.deadlocker8.budgetmaster.transactions.Transaction; import de.deadlocker8.budgetmaster.transactions.TransactionBase; import de.deadlocker8.budgetmaster.transactions.TransactionRepository; -import org.joda.time.DateTime; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -43,6 +42,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -98,14 +98,14 @@ class ImportServiceTest Transaction transaction1 = new Transaction(); transaction1.setName("Test"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transaction1.setCategory(category1); transactionList.add(transaction1); Transaction transaction2 = new Transaction(); transaction2.setName("Test_2"); transaction2.setAmount(-525); - transaction2.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction2.setDate(LocalDate.of(2018, 10, 3)); transaction2.setCategory(category2); transactionList.add(transaction2); @@ -159,7 +159,7 @@ class ImportServiceTest Transaction transaction1 = new Transaction(); transaction1.setName("Test"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transaction1.setCategory(category1); transaction1.setAccount(new Account("Account", AccountType.CUSTOM)); transactionList.add(transaction1); @@ -167,7 +167,7 @@ class ImportServiceTest Transaction transaction2 = new Transaction(); transaction2.setName("Test_2"); transaction2.setAmount(-525); - transaction2.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction2.setDate(LocalDate.of(2018, 10, 3)); transaction2.setCategory(category2); transaction2.setAccount(new Account("Account", AccountType.CUSTOM)); transactionList.add(transaction2); @@ -198,14 +198,14 @@ class ImportServiceTest transaction1.setAccount(account1); transaction1.setName("ShouldGoInAccount_1"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transactionList.add(transaction1); Transaction transaction2 = new Transaction(); transaction2.setAccount(account2); transaction2.setName("ImPartOfAccount_2"); transaction2.setAmount(-525); - transaction2.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction2.setDate(LocalDate.of(2018, 10, 3)); transactionList.add(transaction2); List<TransactionBase> updatedTransactions = importService.updateAccountsForItems(transactionList, account1.getID(), destinationAccount); @@ -230,7 +230,7 @@ class ImportServiceTest transaction.setTransferAccount(transferAccount); transaction.setName("Whatever"); transaction.setAmount(-525); - transaction.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction.setDate(LocalDate.of(2018, 10, 3)); transactionList.add(transaction); // expected @@ -239,7 +239,7 @@ class ImportServiceTest expectedTransaction.setTransferAccount(destinationAccount); expectedTransaction.setName("Whatever"); expectedTransaction.setAmount(-525); - expectedTransaction.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + expectedTransaction.setDate(LocalDate.of(2018, 10, 3)); assertThat(importService.updateTransferAccountsForItems(transactionList, transferAccount.getID(), destinationAccount)) .hasSize(1) @@ -328,7 +328,7 @@ class ImportServiceTest transaction1.setAccount(account1); transaction1.setName("ShouldGoInAccount_1"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); List<Tag> tags = new ArrayList<>(); tags.add(existingTag); transaction1.setTags(tags); @@ -355,7 +355,7 @@ class ImportServiceTest transaction1.setAccount(account1); transaction1.setName("ShouldGoInAccount_1"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); List<Tag> tags = new ArrayList<>(); tags.add(newTag); transaction1.setTags(tags); @@ -402,7 +402,7 @@ class ImportServiceTest transaction1.setAccount(sourceAccount1); transaction1.setName("ShouldGoInAccount_1"); transaction1.setAmount(200); - transaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction1.setDate(LocalDate.of(2018, 10, 3)); transaction1.setTags(tags); transactions.add(transaction1); @@ -410,7 +410,7 @@ class ImportServiceTest transaction2.setAccount(sourceAccount2); transaction2.setName("ImPartOfAccount_2"); transaction2.setAmount(-525); - transaction2.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + transaction2.setDate(LocalDate.of(2018, 10, 3)); transaction2.setTags(new ArrayList<>()); transactions.add(transaction2); @@ -469,14 +469,14 @@ class ImportServiceTest expectedTransaction1.setAccount(destAccount1); expectedTransaction1.setName("ShouldGoInAccount_1"); expectedTransaction1.setAmount(200); - expectedTransaction1.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + expectedTransaction1.setDate(LocalDate.of(2018, 10, 3)); expectedTransaction1.setTags(tags); Transaction expectedTransaction2 = new Transaction(); expectedTransaction2.setAccount(destAccount2); expectedTransaction2.setName("ImPartOfAccount_2"); expectedTransaction2.setAmount(-525); - expectedTransaction2.setDate(new DateTime(2018, 10, 3, 12, 0, 0, 0)); + expectedTransaction2.setDate(LocalDate.of(2018, 10, 3)); expectedTransaction2.setTags(new ArrayList<>()); Template expectedTemplate1 = new Template(); @@ -655,7 +655,7 @@ class ImportServiceTest Mockito.when(iconService.getRepository()).thenReturn(iconRepositoryMock); Mockito.when(iconRepositoryMock.save(Mockito.any())).thenReturn(expectedIcon); - importService.importDatabase(database, new AccountMatchList(List.of(accountMatch)), true,true, true); + importService.importDatabase(database, new AccountMatchList(List.of(accountMatch)), true, true, true); Mockito.verify(accountRepository, Mockito.atLeast(1)).save(expectedAccount); } diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java index f44b7e850eed3f2087f2b9aaf5f0161b672058e3..44e88c344a7ef1ee0a31840107feb23ff4053397 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/unit/repeating/RepeatingOptionTest.java @@ -7,9 +7,9 @@ import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndNever; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierMonths; import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierYears; -import org.joda.time.DateTime; import org.junit.jupiter.api.Test; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -23,18 +23,18 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_Every3Days_EndAfter3Times() { - DateTime startDate = new DateTime(2018, 4, 22, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 22); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierDays(3), new RepeatingEndAfterXTimes(3)); - DateTime dateFetchLimit = new DateTime(2019, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2019, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2018, 4, 25, 12, 0)); - expected.add(new DateTime(2018, 4, 28, 12, 0)); - expected.add(new DateTime(2018, 5, 1, 12, 0)); + expected.add(LocalDate.of(2018, 4, 25)); + expected.add(LocalDate.of(2018, 4, 28)); + expected.add(LocalDate.of(2018, 5, 1)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -43,18 +43,18 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_Every3Days_EndAfterDate() { - DateTime startDate = new DateTime(2018, 4, 22, 12, 0); - DateTime endDate = new DateTime(2018, 4, 28, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 22); + LocalDate endDate = LocalDate.of(2018, 4, 28); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierDays(3), new RepeatingEndDate(endDate)); - DateTime dateFetchLimit = new DateTime(2019, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2019, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2018, 4, 25, 12, 0)); - expected.add(new DateTime(2018, 4, 28, 12, 0)); + expected.add(LocalDate.of(2018, 4, 25)); + expected.add(LocalDate.of(2018, 4, 28)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -63,18 +63,18 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_Every3Days_EndNever() { - DateTime startDate = new DateTime(2018, 4, 22, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 22); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierDays(3), new RepeatingEndNever()); - DateTime dateFetchLimit = new DateTime(2018, 5, 2, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2018, 5, 2); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2018, 4, 25, 12, 0)); - expected.add(new DateTime(2018, 4, 28, 12, 0)); - expected.add(new DateTime(2018, 5, 1, 12, 0)); + expected.add(LocalDate.of(2018, 4, 25)); + expected.add(LocalDate.of(2018, 4, 28)); + expected.add(LocalDate.of(2018, 5, 1)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -85,20 +85,20 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_Every2Month_EndAfter5Times() { - DateTime startDate = new DateTime(2018, 4, 30, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 30); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierMonths(2), new RepeatingEndAfterXTimes(5)); - DateTime dateFetchLimit = new DateTime(2020, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2020, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2018, 6, 30, 12, 0)); - expected.add(new DateTime(2018, 8, 30, 12, 0)); - expected.add(new DateTime(2018, 10, 30, 12, 0)); - expected.add(new DateTime(2018, 12, 30, 12, 0)); - expected.add(new DateTime(2019, 2, 28, 12, 0)); + expected.add(LocalDate.of(2018, 6, 30)); + expected.add(LocalDate.of(2018, 8, 30)); + expected.add(LocalDate.of(2018, 10, 30)); + expected.add(LocalDate.of(2018, 12, 30)); + expected.add(LocalDate.of(2019, 2, 28)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -107,18 +107,18 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_Every2Month_EndAfterDate() { - DateTime startDate = new DateTime(2018, 4, 30, 12, 0); - DateTime endDate = new DateTime(2018, 9, 28, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 30); + LocalDate endDate = LocalDate.of(2018, 9, 28); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierMonths(2), new RepeatingEndDate(endDate)); - DateTime dateFetchLimit = new DateTime(2020, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2020, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2018, 6, 30, 12, 0)); - expected.add(new DateTime(2018, 8, 30, 12, 0)); + expected.add(LocalDate.of(2018, 6, 30)); + expected.add(LocalDate.of(2018, 8, 30)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -127,17 +127,17 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_Every2Month_EndNever() { - DateTime startDate = new DateTime(2018, 4, 30, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 30); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierMonths(2), new RepeatingEndNever()); - DateTime dateFetchLimit = new DateTime(2018, 9, 2, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2018, 9, 2); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2018, 6, 30, 12, 0)); - expected.add(new DateTime(2018, 8, 30, 12, 0)); + expected.add(LocalDate.of(2018, 6, 30)); + expected.add(LocalDate.of(2018, 8, 30)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -148,17 +148,17 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_EveryYear_EndAfter2Times() { - DateTime startDate = new DateTime(2018, 4, 30, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 30); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierYears(1), new RepeatingEndAfterXTimes(2)); - DateTime dateFetchLimit = new DateTime(2022, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2022, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2019, 4, 30, 12, 0)); - expected.add(new DateTime(2020, 4, 30, 12, 0)); + expected.add(LocalDate.of(2019, 4, 30)); + expected.add(LocalDate.of(2020, 4, 30)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -167,17 +167,17 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_EveryYear_EndAfterDate() { - DateTime startDate = new DateTime(2018, 4, 30, 12, 0); - DateTime endDate = new DateTime(2019, 9, 28, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 30); + LocalDate endDate = LocalDate.of(2019, 9, 28); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierYears(1), new RepeatingEndDate(endDate)); - DateTime dateFetchLimit = new DateTime(2022, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2022, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2019, 4, 30, 12, 0)); + expected.add(LocalDate.of(2019, 4, 30)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected); @@ -186,16 +186,16 @@ class RepeatingOptionTest @Test void test_GetRepeatingDates_EveryYear_EndNever() { - DateTime startDate = new DateTime(2018, 4, 30, 12, 0); + LocalDate startDate = LocalDate.of(2018, 4, 30); RepeatingOption repeatingOption = new RepeatingOption(startDate, new RepeatingModifierYears(1), new RepeatingEndNever()); - DateTime dateFetchLimit = new DateTime(2020, 1, 1, 12, 0); + LocalDate dateFetchLimit = LocalDate.of(2020, 1, 1); - List<DateTime> expected = new ArrayList<>(); + List<LocalDate> expected = new ArrayList<>(); expected.add(startDate); - expected.add(new DateTime(2019, 4, 30, 12, 0)); + expected.add(LocalDate.of(2019, 4, 30)); assertThat(repeatingOption.getRepeatingDates(dateFetchLimit)) .isEqualTo(expected);