// Copyright © 2015 HSL <https://www.hsl.fi> // This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses. package fi.hsl.parkandride.back; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; import javax.annotation.Resource; import org.junit.Test; import fi.hsl.parkandride.core.back.OperatorRepository; import fi.hsl.parkandride.core.domain.MultilingualString; import fi.hsl.parkandride.core.domain.Operator; import fi.hsl.parkandride.core.domain.OperatorSearch; import fi.hsl.parkandride.core.domain.SearchResults; import fi.hsl.parkandride.core.service.ValidationException; public class OperatorDaoTest extends AbstractDaoTest { @Resource OperatorRepository operatorRepository; @Test public void operator_management_flow() { Operator op = new Operator("operator"); long id = operatorRepository.insertOperator(op); assertThat(id).isGreaterThan(0); op = operatorRepository.getOperator(id); assertThat(op.id).isEqualTo(id); assertThat(op.name).isEqualTo(new MultilingualString("operator")); SearchResults<Operator> operators = operatorRepository.findOperators(new OperatorSearch()); assertThat(operators.results).hasSize(1); assertThat(operators.results.get(0).name).isEqualTo(new MultilingualString("operator")); op.name = new MultilingualString("fi", "sv", "en"); operatorRepository.updateOperator(id, op); op = operatorRepository.getOperator(id); assertThat(op.name).isEqualTo(new MultilingualString("fi", "sv", "en")); } @Test public void unique_name() { Operator op = new Operator("operator"); operatorRepository.insertOperator(op); verifyUniqueName(op, "fi"); verifyUniqueName(op, "sv"); verifyUniqueName(op, "en"); } private void verifyUniqueName(Operator op, String lang) { op.name = new MultilingualString("another"); try { op.name.asMap().put(lang, "operator"); operatorRepository.insertOperator(op); fail("should not allow duplicate names"); } catch (ValidationException e) { assertThat(e.violations).hasSize(1); assertThat(e.violations.get(0).path).isEqualTo("name." + lang); } } }