From 6dd93d2512d4c37ee8a29f911cf92bbcccaafc47 Mon Sep 17 00:00:00 2001 From: Lorenzo Verri Date: Sun, 19 Jun 2022 18:04:59 +0200 Subject: [PATCH] #218 Fixed tests --- .../AdminAccessibilityReportController.java | 22 ++++++++++--------- .../admin/AdminTrailRawController.java | 9 ++++---- .../repository/AccessibilityReportDao.java | 2 +- .../org/sc/data/repository/TrailRawDAO.java | 2 +- .../validator/AccessibilityReportValidator.kt | 6 +---- .../sc/processor/PlacesTrailSyncProcessor.kt | 14 ++++++++---- .../sc/service/AccessibilityReportService.kt | 1 + .../main/java/org/sc/service/TrailService.kt | 18 +++++++++++---- .../AccessibilityReportIntegrationTest.java | 3 ++- .../sc/integration/PlaceIntegrationTest.java | 12 ++++++---- 10 files changed, 55 insertions(+), 34 deletions(-) diff --git a/backend/src/main/java/org/sc/controller/admin/AdminAccessibilityReportController.java b/backend/src/main/java/org/sc/controller/admin/AdminAccessibilityReportController.java index 19a6c348..00452978 100644 --- a/backend/src/main/java/org/sc/controller/admin/AdminAccessibilityReportController.java +++ b/backend/src/main/java/org/sc/controller/admin/AdminAccessibilityReportController.java @@ -16,6 +16,8 @@ import static java.util.Collections.emptyList; import static java.util.Collections.emptySet; +import static org.sc.controller.Constants.ONE; +import static org.sc.controller.Constants.ZERO; import static org.sc.controller.admin.Constants.PREFIX_REPORT; @RestController @@ -43,12 +45,12 @@ public AccessibilityReportResponse create( final Set errors = generalValidator.validate(accReport); if (!errors.isEmpty() || accReport.getId() != null) { return accessibilityIssueResponseHelper.constructResponse(errors, emptyList(), reportService.count(), - org.sc.controller.Constants.ZERO, org.sc.controller.Constants.ONE); + ZERO, ONE); } return accessibilityIssueResponseHelper .constructResponse(errors, reportService.create(accReport), reportService.count(), - org.sc.controller.Constants.ZERO, org.sc.controller.Constants.ONE); + ZERO, ONE); } @Operation(summary = "Updates a report") @@ -60,12 +62,12 @@ public AccessibilityReportResponse update( final Set updateError = generalValidator.validateReportAcc(accReport.getId()); if (!updateError.isEmpty() || !errors.isEmpty()) { return accessibilityIssueResponseHelper.constructResponse(updateError, emptyList(), reportService.count(), - org.sc.controller.Constants.ZERO, org.sc.controller.Constants.ONE); + ZERO, ONE); } return accessibilityIssueResponseHelper .constructResponse(updateError, reportService.update(accReport), reportService.count(), - org.sc.controller.Constants.ZERO, org.sc.controller.Constants.ONE); + ZERO, ONE); } @Operation(summary = "Remove accessibility reports") @@ -75,15 +77,15 @@ public AccessibilityReportResponse deleteAccessibilityNotificationReport( final Set errors = generalValidator.validateReportAcc(id); if (!errors.isEmpty()) { return accessibilityIssueResponseHelper.constructResponse(errors, emptyList(), reportService.count(), - org.sc.controller.Constants.ZERO, org.sc.controller.Constants.ONE); + ZERO, ONE); } final List isDeleted = reportService.delete(id); return accessibilityIssueResponseHelper .constructResponse(emptySet(), isDeleted, reportService.count(), - org.sc.controller.Constants.ZERO, - org.sc.controller.Constants.ONE); + ZERO, + ONE); } @Operation(summary = "Upgrade a report") @@ -93,15 +95,15 @@ public AccessibilityReportResponse upgradeReport( final Set errors = generalValidator.validateReportAcc(id); if (!errors.isEmpty()) { return accessibilityIssueResponseHelper.constructResponse(errors, emptyList(), reportService.count(), - org.sc.controller.Constants.ZERO, org.sc.controller.Constants.ONE); + ZERO, ONE); } final List upgraded = reportService.upgrade(id); return accessibilityIssueResponseHelper .constructResponse(emptySet(), upgraded, reportService.count(), - org.sc.controller.Constants.ZERO, - org.sc.controller.Constants.ONE); + ZERO, + ONE); } } diff --git a/backend/src/main/java/org/sc/controller/admin/AdminTrailRawController.java b/backend/src/main/java/org/sc/controller/admin/AdminTrailRawController.java index 6d8c6d45..47d87447 100644 --- a/backend/src/main/java/org/sc/controller/admin/AdminTrailRawController.java +++ b/backend/src/main/java/org/sc/controller/admin/AdminTrailRawController.java @@ -3,6 +3,7 @@ import io.swagger.v3.oas.annotations.Operation; import org.sc.common.rest.response.TrailRawResponse; import org.sc.controller.response.TrailRawResponseHelper; +import org.sc.data.validator.GeneralValidator; import org.sc.data.validator.auth.AuthRealmValidator; import org.sc.manager.TrailRawManager; import org.springframework.beans.factory.annotation.Autowired; @@ -24,21 +25,21 @@ public class AdminTrailRawController { private final TrailRawManager trailRawManager; private final TrailRawResponseHelper trailRawResponseHelper; - private final AuthRealmValidator authRealmValidator; + private final GeneralValidator generalValidator; @Autowired public AdminTrailRawController(final TrailRawManager trailRawManager, final TrailRawResponseHelper trailRawResponseHelper, - final AuthRealmValidator authRealmValidator) { + final GeneralValidator generalValidator) { this.trailRawManager = trailRawManager; this.trailRawResponseHelper = trailRawResponseHelper; - this.authRealmValidator = authRealmValidator; + this.generalValidator = generalValidator; } @Operation(summary = "Delete a single raw trail") @DeleteMapping("/{id}") public TrailRawResponse deleteById(final @PathVariable String id) { - final Set errors = authRealmValidator.validate(id); + final Set errors = generalValidator.validateDeleteRawTrail(id); if(errors.isEmpty()) { return trailRawResponseHelper .constructResponse(Collections.emptySet(), diff --git a/backend/src/main/java/org/sc/data/repository/AccessibilityReportDao.java b/backend/src/main/java/org/sc/data/repository/AccessibilityReportDao.java index 18a68a24..6d0d1405 100644 --- a/backend/src/main/java/org/sc/data/repository/AccessibilityReportDao.java +++ b/backend/src/main/java/org/sc/data/repository/AccessibilityReportDao.java @@ -117,7 +117,7 @@ public List getUnapgradedByRealm(final String realm, final return toNotificationList(collection.find( new Document(AccessibilityReport.RECORD_DETAILS + "." + RecordDetails.REALM, realm) .append(AccessibilityReport.ISSUE_ID, "") - .append(AccessibilityReport.IS_VALID, true)) + .append(AccessibilityReport.IS_VALID, false)) .sort(new Document(AccessibilityReport.REPORT_DATE, MongoUtils.ASCENDING_ORDER)) .skip(skip) .limit(limit) diff --git a/backend/src/main/java/org/sc/data/repository/TrailRawDAO.java b/backend/src/main/java/org/sc/data/repository/TrailRawDAO.java index 61201e1c..0bf8e957 100644 --- a/backend/src/main/java/org/sc/data/repository/TrailRawDAO.java +++ b/backend/src/main/java/org/sc/data/repository/TrailRawDAO.java @@ -45,7 +45,7 @@ public List getById(final String id) { } public List deleteById(final String id) { - List byIdInMemory = getById(id); + final List byIdInMemory = getById(id); collection.deleteOne(new Document(TrailRaw.ID, id)); LOGGER.info("delete TrailRaws with ID: {}", id); return byIdInMemory; diff --git a/backend/src/main/java/org/sc/data/validator/AccessibilityReportValidator.kt b/backend/src/main/java/org/sc/data/validator/AccessibilityReportValidator.kt index 091f9c5a..2777d9ad 100644 --- a/backend/src/main/java/org/sc/data/validator/AccessibilityReportValidator.kt +++ b/backend/src/main/java/org/sc/data/validator/AccessibilityReportValidator.kt @@ -23,7 +23,7 @@ class AccessibilityReportValidator @Autowired constructor( ) : Validator { companion object { - const val maxDistanceBound = 300 + const val maxDistanceBound = 3000 const val emailNotValid = "Field 'mail' is not valid" const val noParamSpecifiedError = "Empty field '%s'" const val noTrailError = "Trail with id '%s', does not exist" @@ -91,8 +91,4 @@ class AccessibilityReportValidator @Autowired constructor( trailCoords: List) = trailCoords.minOf { DistanceProcessor.distanceBetweenPoints(targetCoords, it) } - private fun getClosesCoord(targetCoords: CoordinatesDto, - trailCoords: List) = - trailCoords.minByOrNull { DistanceProcessor.distanceBetweenPoints(targetCoords, it) } - } \ No newline at end of file diff --git a/backend/src/main/java/org/sc/processor/PlacesTrailSyncProcessor.kt b/backend/src/main/java/org/sc/processor/PlacesTrailSyncProcessor.kt index 827817f5..7225ead6 100644 --- a/backend/src/main/java/org/sc/processor/PlacesTrailSyncProcessor.kt +++ b/backend/src/main/java/org/sc/processor/PlacesTrailSyncProcessor.kt @@ -6,7 +6,6 @@ import org.sc.manager.TrailManager import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import java.lang.IllegalStateException @Component class PlacesTrailSyncProcessor @Autowired constructor(private val trailManager: TrailManager, @@ -31,14 +30,21 @@ class PlacesTrailSyncProcessor @Autowired constructor(private val trailManager: } if(it.isDynamicCrossway) { - updateCrosswayNameWithTrailsPassingCodes(it.placeId) + updateDynamicCrosswayNameWithTrailsPassingCodes(it.placeId) } } } - fun updateCrosswayNameWithTrailsPassingCodes(placeId: String) { + fun updateDynamicCrosswayNameWithTrailsPassingCodes(placeId: String) { val placeList = placeManager.getById(placeId) - if(placeList.isEmpty()) throw IllegalStateException("Cannot update place name of a not-existing location") + if (placeList.isEmpty()) { + logger.warn("Cannot update place name of a not-existing location (id=${placeId})") + return + } + if (placeList.any { !it.isDynamic }) { + logger.warn("Cannot update no-auto place (id=${placeId})") + return + } val place = placeList.first() val placeCrossingTrailsNames = trailManager.getCodesByTrailIds(place.crossingTrailIds).joinToString(", ") diff --git a/backend/src/main/java/org/sc/service/AccessibilityReportService.kt b/backend/src/main/java/org/sc/service/AccessibilityReportService.kt index 39e35402..b32d0d0e 100644 --- a/backend/src/main/java/org/sc/service/AccessibilityReportService.kt +++ b/backend/src/main/java/org/sc/service/AccessibilityReportService.kt @@ -72,6 +72,7 @@ class AccessibilityReportService @Autowired constructor( } val createdReport = createdNotification.first() reportDto.issueId = createdReport.id + reportDto.valid = true resourceManager.addEntry( createdReport.trailId, RegenerationEntryType.ACCESSIBILITY_ISSUE, createdReport.id, authHelper.username, RegenerationActionType.CREATE) diff --git a/backend/src/main/java/org/sc/service/TrailService.kt b/backend/src/main/java/org/sc/service/TrailService.kt index ec49e358..506a6de0 100644 --- a/backend/src/main/java/org/sc/service/TrailService.kt +++ b/backend/src/main/java/org/sc/service/TrailService.kt @@ -3,7 +3,6 @@ package org.sc.service import org.sc.common.rest.PlaceRefDto import org.sc.common.rest.TrailDto import org.sc.data.mapper.TrailMapper -import org.sc.data.model.Trail import org.sc.data.model.TrailStatus import org.sc.manager.* import org.sc.processor.PlacesTrailSyncProcessor @@ -30,6 +29,7 @@ class TrailService @Autowired constructor(private val trailManager: TrailManager maintenanceManager.deleteByTrailId(id) accessibilityNotificationManager.deleteByTrailId(id) placeManager.deleteTrailReference(deletedTrail.id, deletedTrail.locations) + updateDynamicCrosswayNamesForTrail(deletedTrail) poiManager.deleteTrailReference(deletedTrail.id) logger.info("Purge deleting trail $id") return deletedTrails @@ -55,6 +55,7 @@ class TrailService @Autowired constructor(private val trailManager: TrailManager placesTrailSyncProcessor.populatePlacesWithTrailData(trailDto) } trailToUpdate.status = trailDto.status + updateDynamicCrosswayNamesForTrail(trailToUpdate) return trailManager.update(trailMapper.map(trailToUpdate)) } @@ -62,12 +63,21 @@ class TrailService @Autowired constructor(private val trailManager: TrailManager placeRef: PlaceRefDto): List { val unLinkPlace = trailManager.unlinkPlace(trailId, placeRef) if (placeRef.isDynamicCrossway) - placesTrailSyncProcessor.updateCrosswayNameWithTrailsPassingCodes(placeRef.placeId) + placesTrailSyncProcessor.updateDynamicCrosswayNameWithTrailsPassingCodes(placeRef.placeId) return unLinkPlace } - fun linkTrailToPlace(id: String, placeRefDto: PlaceRefDto): List { - TODO("Not yet implemented") + fun linkTrailToPlace(id: String, placeRef: PlaceRefDto): List { + val linkedPlaces = trailManager.linkTrailToPlace(id, placeRef) + if (placeRef.isDynamicCrossway) + placesTrailSyncProcessor.updateDynamicCrosswayNameWithTrailsPassingCodes(placeRef.placeId) + return linkedPlaces + } + + private fun updateDynamicCrosswayNamesForTrail(trailToUpdate: TrailDto) { + trailToUpdate.locations.forEach { + if (it.isDynamicCrossway) placesTrailSyncProcessor.updateDynamicCrosswayNameWithTrailsPassingCodes(it.placeId) + } } private fun isSwitchingToDraft( diff --git a/backend/src/test/java/org/sc/integration/AccessibilityReportIntegrationTest.java b/backend/src/test/java/org/sc/integration/AccessibilityReportIntegrationTest.java index 6906dfb3..c59b7714 100644 --- a/backend/src/test/java/org/sc/integration/AccessibilityReportIntegrationTest.java +++ b/backend/src/test/java/org/sc/integration/AccessibilityReportIntegrationTest.java @@ -30,6 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sc.integration.ImportTrailIT.INTERMEDIATE_COORDINATES_DTO; +import static org.sc.integration.TrailImportRestIntegrationTest.INTERMEDIATE_EXPECTED_COORDINATE; @RunWith(SpringRunner.class) @SpringBootTest @@ -74,7 +75,7 @@ public void setup() { trailResponse = trailController.importTrail(trailImportDto); trailId = trailResponse.getContent().get(0).getId(); reportDate = new Date(); - anyTrailCoord = new CoordinatesDto(INTERMEDIATE_COORDINATES_DTO.getLatitude(), INTERMEDIATE_COORDINATES_DTO.getLongitude(), INTERMEDIATE_COORDINATES_DTO.getAltitude()); + anyTrailCoord = new CoordinatesDto(INTERMEDIATE_EXPECTED_COORDINATE.getLatitude(), INTERMEDIATE_EXPECTED_COORDINATE.getLongitude(), INTERMEDIATE_EXPECTED_COORDINATE.getAltitude()); createResponse = accessibilityReportController.create(new AccessibilityReportDto(null, ANY_DESCRIPTION, trailId, ANY_TARGET_EMAIL, ANY_TEL, "", reportDate, false, anyTrailCoord, null)); } diff --git a/backend/src/test/java/org/sc/integration/PlaceIntegrationTest.java b/backend/src/test/java/org/sc/integration/PlaceIntegrationTest.java index bce34ced..7d170387 100644 --- a/backend/src/test/java/org/sc/integration/PlaceIntegrationTest.java +++ b/backend/src/test/java/org/sc/integration/PlaceIntegrationTest.java @@ -3,10 +3,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.sc.common.rest.PlaceDto; -import org.sc.common.rest.PlaceRefDto; -import org.sc.common.rest.Status; -import org.sc.common.rest.TrailImportDto; +import org.sc.common.rest.*; import org.sc.common.rest.response.PlaceResponse; import org.sc.common.rest.response.TrailResponse; import org.sc.configuration.DataSource; @@ -22,6 +19,7 @@ import org.springframework.test.context.junit4.SpringRunner; import java.util.Collections; +import java.util.stream.Collectors; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.sc.data.repository.MongoUtils.NO_FILTERING_TOKEN; @@ -99,6 +97,12 @@ public void shouldRetrieveAndDeleteIt() { assertThat(trailResponse.getContent().isEmpty()).isEqualTo(false); + final TrailDto trail = trailResponse.getContent().stream().findFirst().get(); + + // Remove refs first + adminTrailController.removePlaceFromTrail(trail.getId(), + trail.getLocations().stream().filter(it-> it.getPlaceId().equals(placeId)).collect(Collectors.toList()).stream().findFirst().get()); + adminPlaceController.delete(placeId); // Removed from place collection