package mondrian.rolap;
import mondrian.olap.*;
import mondrian.test.FoodMartTestCase;
import mondrian.test.TestContext;
import java.util.*;
/**
* Unit test for {@link RolapCube}.
*
* @author mkambol
* @since 25 January, 2007
*/
public class RolapCubeTest extends FoodMartTestCase {
public void testProcessFormatStringAttributeToIgnoreNullFormatString() {
RolapCube cube =
(RolapCube) getConnection().getSchema().lookupCube("Sales", false);
StringBuilder builder = new StringBuilder();
cube.processFormatStringAttribute(
new MondrianDef.CalculatedMember(), builder);
assertEquals(0, builder.length());
}
public void testProcessFormatStringAttribute() {
RolapCube cube =
(RolapCube) getConnection().getSchema().lookupCube("Sales", false);
StringBuilder builder = new StringBuilder();
MondrianDef.CalculatedMember xmlCalcMember =
new MondrianDef.CalculatedMember();
String format = "FORMAT";
xmlCalcMember.formatString = format;
cube.processFormatStringAttribute(xmlCalcMember, builder);
assertEquals(
"," + Util.nl + "FORMAT_STRING = \"" + format + "\"",
builder.toString());
}
public void testGetCalculatedMembersWithNoRole() {
String[] expectedCalculatedMembers = {
"[Measures].[Profit]",
"[Measures].[Average Warehouse Sale]",
"[Measures].[Profit Growth]",
"[Measures].[Profit Per Unit Shipped]"
};
Connection connection = getTestContext().getConnection();
try {
Cube warehouseAndSalesCube =
cubeByName(connection, "Warehouse and Sales");
SchemaReader schemaReader =
warehouseAndSalesCube.getSchemaReader(null);
List<Member> calculatedMembers =
schemaReader.getCalculatedMembers();
assertEquals(
expectedCalculatedMembers.length,
calculatedMembers.size());
assertCalculatedMemberExists(
expectedCalculatedMembers,
calculatedMembers);
} finally {
connection.close();
}
}
public void testGetCalculatedMembersForCaliforniaManager() {
String[] expectedCalculatedMembers = new String[] {
"[Measures].[Profit]", "[Measures].[Profit last Period]",
"[Measures].[Profit Growth]"
};
Connection connection = getTestContext().withRole("California manager")
.getConnection();
try {
Cube salesCube = cubeByName(connection, "Sales");
SchemaReader schemaReader = salesCube
.getSchemaReader(connection.getRole());
List<Member> calculatedMembers =
schemaReader.getCalculatedMembers();
assertEquals(
expectedCalculatedMembers.length,
calculatedMembers.size());
assertCalculatedMemberExists(
expectedCalculatedMembers,
calculatedMembers);
} finally {
connection.close();
}
}
public void testGetCalculatedMembersReturnsOnlyAccessibleMembers() {
String[] expectedCalculatedMembers = {
"[Measures].[Profit]",
"[Measures].[Profit last Period]",
"[Measures].[Profit Growth]",
"[Product].[~Missing]"
};
TestContext testContext =
createTestContextWithAdditionalMembersAndARole();
Connection connection = testContext.getConnection();
try {
Cube salesCube = cubeByName(connection, "Sales");
SchemaReader schemaReader =
salesCube.getSchemaReader(connection.getRole());
List<Member> calculatedMembers =
schemaReader.getCalculatedMembers();
assertEquals(
expectedCalculatedMembers.length,
calculatedMembers.size());
assertCalculatedMemberExists(
expectedCalculatedMembers,
calculatedMembers);
} finally {
connection.close();
}
}
public void
testGetCalculatedMembersReturnsOnlyAccessibleMembersForHierarchy()
{
String[] expectedCalculatedMembersFromProduct = {
"[Product].[~Missing]"
};
TestContext testContext =
createTestContextWithAdditionalMembersAndARole();
Connection connection = testContext.getConnection();
try {
Cube salesCube = cubeByName(connection, "Sales");
SchemaReader schemaReader =
salesCube.getSchemaReader(connection.getRole());
// Product.~Missing accessible
List<Member> calculatedMembers =
schemaReader.getCalculatedMembers(
getDimensionWithName(
"Product",
salesCube.getDimensions()).getHierarchy());
assertEquals(
expectedCalculatedMembersFromProduct.length,
calculatedMembers.size());
assertCalculatedMemberExists(
expectedCalculatedMembersFromProduct,
calculatedMembers);
// Gender.~Missing not accessible
calculatedMembers =
schemaReader.getCalculatedMembers(
getDimensionWithName(
"Gender",
salesCube.getDimensions()).getHierarchy());
assertEquals(0, calculatedMembers.size());
} finally {
connection.close();
}
}
public void testGetCalculatedMembersReturnsOnlyAccessibleMembersForLevel() {
String[] expectedCalculatedMembersFromProduct = new String[]{
"[Product].[~Missing]"
};
TestContext testContext =
createTestContextWithAdditionalMembersAndARole();
Connection connection = testContext.getConnection();
try {
Cube salesCube = cubeByName(connection, "Sales");
SchemaReader schemaReader =
salesCube.getSchemaReader(connection.getRole());
// Product.~Missing accessible
List<Member> calculatedMembers =
schemaReader.getCalculatedMembers(
getDimensionWithName(
"Product",
salesCube.getDimensions())
.getHierarchy().getLevels()[0]);
assertEquals(
expectedCalculatedMembersFromProduct.length,
calculatedMembers.size());
assertCalculatedMemberExists(
expectedCalculatedMembersFromProduct,
calculatedMembers);
// Gender.~Missing not accessible
calculatedMembers =
schemaReader.getCalculatedMembers(
getDimensionWithName(
"Gender",
salesCube.getDimensions())
.getHierarchy().getLevels()[0]);
assertEquals(0, calculatedMembers.size());
} finally {
connection.close();
}
}
public void testNonJoiningDimensions() {
TestContext testContext = this.getTestContext();
Connection connection = testContext.getConnection();
try {
RolapCube salesCube = (RolapCube) cubeByName(connection, "Sales");
RolapCube warehouseAndSalesCube =
(RolapCube) cubeByName(connection, "Warehouse and Sales");
SchemaReader readerWarehouseAndSales =
warehouseAndSalesCube.getSchemaReader().withLocus();
List<Member> members = new ArrayList<Member>();
List<Member> warehouseMembers =
warehouseMembersCanadaMexicoUsa(readerWarehouseAndSales);
Dimension warehouseDim = warehouseMembers.get(0).getDimension();
members.addAll(warehouseMembers);
List<Member> storeMembers =
storeMembersCAAndOR(readerWarehouseAndSales).slice(0);
Dimension storeDim = storeMembers.get(0).getDimension();
members.addAll(storeMembers);
Set<Dimension> nonJoiningDims =
salesCube.nonJoiningDimensions(members.toArray(new Member[0]));
assertFalse(nonJoiningDims.contains(storeDim));
assertTrue(nonJoiningDims.contains(warehouseDim));
} finally {
connection.close();
}
}
public void testRolapCubeDimensionEquality() {
TestContext testContext = getTestContext();
Connection connection1 = testContext.getConnection();
Connection connection2 =
TestContext.instance().withSchema(null).getConnection();
try {
RolapCube salesCube1 = (RolapCube) cubeByName(connection1, "Sales");
SchemaReader readerSales1 =
salesCube1.getSchemaReader().withLocus();
List<Member> storeMembersSales =
storeMembersCAAndOR(readerSales1).slice(0);
Dimension storeDim1 = storeMembersSales.get(0).getDimension();
assertEquals(storeDim1, storeDim1);
RolapCube salesCube2 = (RolapCube) cubeByName(connection2, "Sales");
SchemaReader readerSales2 =
salesCube2.getSchemaReader().withLocus();
List<Member> storeMembersSales2 =
storeMembersCAAndOR(readerSales2).slice(0);
Dimension storeDim2 = storeMembersSales2.get(0).getDimension();
assertEquals(storeDim1, storeDim2);
RolapCube warehouseAndSalesCube =
(RolapCube) cubeByName(connection1, "Warehouse and Sales");
SchemaReader readerWarehouseAndSales =
warehouseAndSalesCube.getSchemaReader().withLocus();
List<Member> storeMembersWarehouseAndSales =
storeMembersCAAndOR(readerWarehouseAndSales).slice(0);
Dimension storeDim3 =
storeMembersWarehouseAndSales.get(0).getDimension();
assertFalse(storeDim1.equals(storeDim3));
List<Member> warehouseMembers =
warehouseMembersCanadaMexicoUsa(readerWarehouseAndSales);
Dimension warehouseDim = warehouseMembers.get(0).getDimension();
assertFalse(storeDim3.equals(warehouseDim));
} finally {
connection1.close();
connection2.close();
}
}
private TestContext createTestContextWithAdditionalMembersAndARole() {
String nonAccessibleMember =
" <CalculatedMember name=\"~Missing\" dimension=\"Gender\">\n"
+ " <Formula>100</Formula>\n"
+ " </CalculatedMember>\n";
String accessibleMember =
" <CalculatedMember name=\"~Missing\" dimension=\"Product\">\n"
+ " <Formula>100</Formula>\n"
+ " </CalculatedMember>\n";
TestContext testContext = TestContext.instance().createSubstitutingCube(
"Sales",
null,
nonAccessibleMember
+ accessibleMember);
return testContext.withRole("California manager");
}
private void assertCalculatedMemberExists(
String[] expectedCalculatedMembers,
List<Member> calculatedMembers)
{
List expectedCalculatedMemberNames =
Arrays.asList(expectedCalculatedMembers);
for (Member calculatedMember : calculatedMembers) {
String calculatedMemberName = calculatedMember.getUniqueName();
assertTrue(
"Calculated member name not found: " + calculatedMemberName,
expectedCalculatedMemberNames.contains(calculatedMemberName));
}
}
}
// End RolapCubeTest.java