// Copyright © 2015 HSL <https://www.hsl.fi> // This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses. package fi.hsl.parkandride.itest; import com.jayway.restassured.response.Response; import fi.hsl.parkandride.core.domain.Operator; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.junit.Test; import java.util.Arrays; import java.util.List; import java.util.Locale; import static com.google.common.collect.Lists.newArrayList; import static fi.hsl.parkandride.core.domain.CapacityType.*; import static java.util.Arrays.asList; import static java.util.stream.Collectors.toList; import static org.apache.commons.lang3.ArrayUtils.toArray; import static org.assertj.core.api.Assertions.assertThat; public class HubsAndFacilitiesReportITest extends AbstractReportingITest { private static final String HUBS_AND_FACILITIES = "HubsAndFacilities"; // --------------------- // HUBS AND FACILITIES REPORT // --------------------- @Test public void report_HubsAndFacilities_asOperator() { final Response whenPostingToReportUrl = postToReportUrl(baseParams(), HUBS_AND_FACILITIES, operator1User); // If this succeeds, the response was a valid excel file withWorkbook(whenPostingToReportUrl, workbook -> { assertThat(workbook.getNumberOfSheets()).isEqualTo(3); assertThat(getSheetNames(workbook)).containsExactly("Alueet", "Pysäköintipaikat", "Selite"); // Check that only operator1 is displayed checkHubsAndFacilities_operatorsAre(workbook, operator1); // Check that hub info is displayed correctly checkHubsAndFacilities_hubInfo(workbook); // Check that facility info is displayed correctly checkHubsAndFacilities_facilityInfo(workbook); }); } @Test public void report_HubsAndFacilities_asAdmin() { final Response whenPostingToReportUrl = postToReportUrl(baseParams(), HUBS_AND_FACILITIES, adminUser); // If this succeeds, the response was a valid excel file withWorkbook(whenPostingToReportUrl, workbook -> { checkHubsAndFacilities_operatorsAre(workbook, operator1, operator2); }); } private void checkHubsAndFacilities_operatorsAre(Workbook workbook, Operator... operators) { final Sheet facilities = workbook.getSheetAt(1); final List<String> expectedColumns = newArrayList("Operaattori"); expectedColumns.addAll(Arrays.stream(operators).map(o -> o.name.fi).collect(toList())); assertThat(getDataFromColumn(facilities, 3)).containsExactlyElementsOf(expectedColumns); } private void checkHubsAndFacilities_facilityInfo(Workbook workbook) { final Sheet facilities = workbook.getSheetAt(1); assertThat(facilities.getPhysicalNumberOfRows()).isEqualTo(2); final List<String> facilityInfo = getDataFromRow(facilities, 1); assertThat(facilityInfo).containsSequence( facility1.name.fi, String.join(", ", facility1.aliases), hub.name.fi, operator1.name.fi, translationService.translate(facility1.status), facility1.statusDescription.fi, String.format(Locale.ENGLISH, "%.4f", facility1.location.getCentroid().getX()), String.format(Locale.ENGLISH, "%.4f", facility1.location.getCentroid().getY()), "", "08:00 - 18:00", "08:00 - 18:00", facility1.openingHours.info.fi, "" + facility1.builtCapacity.entrySet().stream() .filter(entry -> asList(motorCapacities).contains(entry.getKey())) .mapToInt(entry -> entry.getValue()) .sum(), "" + facility1.builtCapacity.entrySet().stream() .filter(entry -> asList(bicycleCapacities).contains(entry.getKey())) .mapToInt(entry -> entry.getValue()) .sum(), "" + facility1.builtCapacity.getOrDefault(CAR, 0), "" + facility1.builtCapacity.getOrDefault(DISABLED, 0), "" + facility1.builtCapacity.getOrDefault(ELECTRIC_CAR, 0), "" + facility1.builtCapacity.getOrDefault(MOTORCYCLE, 0), "" + facility1.builtCapacity.getOrDefault(BICYCLE, 0), "" + facility1.builtCapacity.getOrDefault(BICYCLE_SECURE_SPACE, 0) ); } private void checkHubsAndFacilities_hubInfo(Workbook workbook) { final Sheet hubs = workbook.getSheetAt(0); assertThat(hubs.getPhysicalNumberOfRows()).isEqualTo(2); final List<String> hubInfo = getDataFromRow(hubs, 1); assertThat(hubInfo).containsExactly( hub.name.fi, String.join(", ", toArray(hub.address.streetAddress.fi, hub.address.postalCode, hub.address.city.fi)), String.format(Locale.ENGLISH, "%.4f", hub.location.getX()), String.format(Locale.ENGLISH, "%.4f", hub.location.getY()), "" + facility1.builtCapacity.entrySet().stream() .filter(entry -> asList(motorCapacities).contains(entry.getKey())) .mapToInt(entry -> entry.getValue()) .sum(), "" + facility1.builtCapacity.entrySet().stream() .filter(entry -> asList(bicycleCapacities).contains(entry.getKey())) .mapToInt(entry -> entry.getValue()) .sum(), "" + facility1.builtCapacity.getOrDefault(CAR, 0), "" + facility1.builtCapacity.getOrDefault(DISABLED, 0), "" + facility1.builtCapacity.getOrDefault(ELECTRIC_CAR, 0), "" + facility1.builtCapacity.getOrDefault(MOTORCYCLE, 0), "" + facility1.builtCapacity.getOrDefault(BICYCLE, 0), "" + facility1.builtCapacity.getOrDefault(BICYCLE_SECURE_SPACE, 0), facility1.name.fi ); } }