/******************************************************************************* | |
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.tools.workbench.test.mappingsmodel.mapping; | |
import java.util.Collection; | |
import junit.framework.Test; | |
import junit.framework.TestSuite; | |
import org.eclipse.persistence.tools.workbench.mappingsmodel.ProblemConstants; | |
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWReference; | |
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWTable; | |
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWManyToManyMapping; | |
import org.eclipse.persistence.tools.workbench.test.mappingsmodel.ModelProblemsTestCase; | |
import org.eclipse.persistence.tools.workbench.test.models.projects.ComplexMappingProject; | |
import org.eclipse.persistence.tools.workbench.test.models.projects.CrimeSceneProject; | |
import org.eclipse.persistence.tools.workbench.utility.CollectionTools; | |
public class MWManyToManyMappingTests | |
extends ModelProblemsTestCase | |
{ | |
public static Test suite() { | |
return new TestSuite(MWManyToManyMappingTests.class); | |
} | |
public MWManyToManyMappingTests(String name) { | |
super(name); | |
} | |
public void testManyToManyPossibleReferences() { | |
CrimeSceneProject crimeSceneProject = new CrimeSceneProject(); | |
MWManyToManyMapping suspectsMappingInCrimeScene = crimeSceneProject.getSuspectsMappingInCrimeScene(); | |
// add a reference from the relation table to the crime scene table so that we get two. | |
MWTable referenceTable = crimeSceneProject.getProject().getDatabase().tableNamed("CS_SUSPECT"); | |
MWTable crimeSceneTable = crimeSceneProject.getProject().getDatabase().tableNamed("CRIME_SCENE"); | |
MWTable personTable = crimeSceneProject.getProject().getDatabase().tableNamed("PERSON"); | |
MWReference sourceRef = referenceTable.addReference("CSSUS_CRIMESCENE", crimeSceneTable); | |
sourceRef.addColumnPair(referenceTable.columnNamed("CS_ID"), crimeSceneTable.columnNamed("ID")); | |
Collection refsToCrimeScene = CollectionTools.collection(suspectsMappingInCrimeScene.candidateRelationTableSourceReferences()); | |
assertTrue("Didn't get newly created source reference.", (refsToCrimeScene.contains(sourceRef))); | |
assertTrue("Didn't get original source reference used in mapping.", (refsToCrimeScene.contains(suspectsMappingInCrimeScene.getSourceReference()))); | |
assertTrue("Expected 2 references to the source table - CrimeScene.", refsToCrimeScene.size() == 2); | |
MWReference targetRef = referenceTable.addReference("CSSUS_PERSON", personTable); | |
targetRef.addColumnPair(referenceTable.columnNamed("SUSPECT_ID"), personTable.columnNamed("ID")); | |
Collection refsToPerson = CollectionTools.collection(suspectsMappingInCrimeScene.candidateRelationTableTargetReferences()); | |
assertTrue("Didn't get newly created target reference.", (refsToPerson.contains(targetRef))); | |
assertTrue("Didn't get original target reference used in mapping.", (refsToPerson.contains(suspectsMappingInCrimeScene.getTargetReference()))); | |
assertTrue("Expected 2 reference to the target table - CrimeScene.", refsToPerson.size() == 2); | |
} | |
public void testManyToManyMappingsHaveSameRelationTableProblem() { | |
String errorName = ProblemConstants.MAPPING_RELATION_TABLE_NOT_DEDICATED; | |
checkMappingsForFalseFailures( errorName, MWManyToManyMapping.class ); | |
ComplexMappingProject project = new ComplexMappingProject(); | |
MWManyToManyMapping pNmapping = (MWManyToManyMapping)project.getEmployeeDescriptor().mappingNamed("phoneNumbers"); | |
MWManyToManyMapping empMapping = (MWManyToManyMapping)project.getShipmentDescriptor().mappingNamed("employees"); | |
MWTable table = pNmapping.getRelationTable(); | |
empMapping.setRelationTable(table); | |
empMapping.setReadOnly(false); | |
assertTrue( "should have problem", hasProblem(errorName, pNmapping)); | |
} | |
public void testRelationTableNotNullProblem() { | |
String errorName = ProblemConstants.MAPPING_RELATION_TABLE_NOT_SPECIFIED; | |
checkMappingsForFalseFailures( errorName, MWManyToManyMapping.class ); | |
MWManyToManyMapping mapping = (MWManyToManyMapping) getMappingForClass(MWManyToManyMapping.class, getCrimeSceneProject()); | |
MWTable oldTable = mapping.getRelationTable(); | |
mapping.setRelationTable(null); | |
assertTrue( "should have problem", hasProblem(errorName, mapping)); | |
// restore old values | |
mapping.setRelationTable(oldTable); | |
assertTrue( "restored old values -- should not have problem", !hasProblem(errorName, mapping)); | |
} | |
public void testSourceReferenceNotNullProblem() { | |
String errorName = ProblemConstants.MAPPING_SOURCE_TABLE_REFERENCE_NOT_SPECIFIED; | |
checkMappingsForFalseFailures( errorName, MWManyToManyMapping.class ); | |
MWManyToManyMapping mapping = (MWManyToManyMapping) getMappingForClass(MWManyToManyMapping.class, getCrimeSceneProject()); | |
MWReference oldSourceReference = mapping.getSourceReference(); | |
mapping.setSourceReference(null); | |
assertTrue( "should have problem", hasProblem(errorName, mapping)); | |
mapping.setSourceReference(oldSourceReference); | |
assertTrue( "restored old values -- should not have problem", !hasProblem(errorName, mapping) ); | |
} | |
public void testTargetReferenceNotNullProblem() { | |
String errorName = ProblemConstants.MAPPING_TARGET_TABLE_REFERENCE_NOT_SPECIFIED; | |
checkMappingsForFalseFailures( errorName, MWManyToManyMapping.class ); | |
MWManyToManyMapping mapping = (MWManyToManyMapping) getMappingForClass(MWManyToManyMapping.class, getCrimeSceneProject()); | |
MWReference oldTargetReference = mapping.getTargetReference(); | |
mapping.setTargetReference(null); | |
assertTrue( "should have problem", hasProblem(errorName, mapping) ); | |
mapping.setTargetReference(oldTargetReference); | |
} | |
} |