/**
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
* and/or other contributors as indicated by the @authors tag. See the
* copyright.txt file in the distribution for a full listing of all
* contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mapstruct.ap.test.updatemethods.selection;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mapstruct.ap.test.updatemethods.BossDto;
import org.mapstruct.ap.test.updatemethods.BossEntity;
import org.mapstruct.ap.test.updatemethods.CompanyDto;
import org.mapstruct.ap.test.updatemethods.CompanyEntity;
import org.mapstruct.ap.test.updatemethods.ConstructableDepartmentEntity;
import org.mapstruct.ap.test.updatemethods.DepartmentDto;
import org.mapstruct.ap.test.updatemethods.DepartmentEntity;
import org.mapstruct.ap.test.updatemethods.DepartmentEntityFactory;
import org.mapstruct.ap.test.updatemethods.EmployeeDto;
import org.mapstruct.ap.test.updatemethods.EmployeeEntity;
import org.mapstruct.ap.test.updatemethods.SecretaryDto;
import org.mapstruct.ap.test.updatemethods.SecretaryEntity;
import org.mapstruct.ap.testutil.IssueKey;
import org.mapstruct.ap.testutil.WithClasses;
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
import org.mapstruct.ap.testutil.runner.GeneratedSource;
import static org.assertj.core.api.Assertions.assertThat;
/**
*
* @author Sjaak Derksen
*/
@IssueKey("160")
@RunWith(AnnotationProcessorTestRunner.class)
@WithClasses({
OrganizationMapper1.class,
ExternalMapper.class,
ExternalHandWrittenMapper.class,
CompanyDto.class,
CompanyEntity.class,
DepartmentMapper.class,
DepartmentDto.class,
DepartmentEntityFactory.class,
DepartmentEntity.class,
EmployeeDto.class,
EmployeeEntity.class,
SecretaryDto.class,
SecretaryEntity.class,
BossDto.class,
BossEntity.class,
ConstructableDepartmentEntity.class
})
public class ExternalSelectionTest {
@Rule
public final GeneratedSource generatedSource = new GeneratedSource().addComparisonToFixtureFor(
OrganizationMapper1.class,
ExternalMapper.class,
DepartmentMapper.class
);
@Test
@WithClasses({
OrganizationMapper1.class
})
public void shouldSelectGeneratedExternalMapper() {
generatedSource.addComparisonToFixtureFor( OrganizationMapper1.class );
CompanyEntity entity = new CompanyEntity();
CompanyDto dto = new CompanyDto();
OrganizationMapper1.INSTANCE.toCompanyEntity( dto, entity );
}
@Test
@WithClasses({
OrganizationMapper3.class
})
@IssueKey("604")
public void shouldSelectGeneratedExternalMapperWithImportForPropertyType() {
generatedSource.addComparisonToFixtureFor( OrganizationMapper3.class );
BossEntity entity = new BossEntity();
BossDto dto = new BossDto();
OrganizationMapper3.INSTANCE.toBossEntity( dto, entity );
}
@Test
@WithClasses({
OrganizationMapper2.class
})
public void shouldSelectGeneratedHandWrittenExternalMapper() {
generatedSource.addComparisonToFixtureFor( OrganizationMapper2.class );
CompanyEntity entity = new CompanyEntity();
CompanyDto dto = new CompanyDto();
OrganizationMapper2.INSTANCE.toCompanyEntity( dto, entity );
}
@Test
@IssueKey( "487" )
public void shouldSelectGeneratedExternalMapperForIterablesAndMaps() {
DepartmentDto departmentDto = new DepartmentDto();
EmployeeDto employeeDto = new EmployeeDto();
employeeDto.setName( "Sarah" );
SecretaryDto secretaryDto = new SecretaryDto();
secretaryDto.setName( "Jim" );
departmentDto.setEmployees( Arrays.asList( employeeDto ) );
Map<SecretaryDto, EmployeeDto> secretaryToEmployee = new HashMap<SecretaryDto, EmployeeDto>();
secretaryToEmployee.put( secretaryDto, employeeDto );
departmentDto.setSecretaryToEmployee( secretaryToEmployee );
DepartmentEntity departmentEntity = new DepartmentEntity( 5 );
DepartmentMapper.INSTANCE.toDepartmentEntity( departmentDto, departmentEntity );
assertThat( departmentEntity ).isNotNull();
assertThat( departmentEntity.getEmployees() ).isNotEmpty();
assertThat( departmentEntity.getEmployees().get( 0 ).getName() ).isEqualTo( "Sarah" );
assertThat( departmentEntity.getSecretaryToEmployee() ).isNotEmpty();
Map.Entry<SecretaryEntity, EmployeeEntity> firstEntry =
departmentEntity.getSecretaryToEmployee().entrySet().iterator().next();
assertThat( firstEntry.getKey().getName() ).isEqualTo( "Jim" );
assertThat( firstEntry.getValue().getName() ).isEqualTo( "Sarah" );
}
}