/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.segmentation.server.preference.treatment; import static net.codjo.segmentation.server.preference.treatment.SegmentationPreference.createPreference; import net.codjo.tokio.TokioFixture; import java.sql.PreparedStatement; import java.sql.SQLException; import static java.sql.Types.INTEGER; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; public class SegmentationPreferenceTest extends TestCase { private static final Map<String, String> NO_PARAMETERS = new HashMap<String, String>(0); private TokioFixture fixture = new TokioFixture(SegmentationPreferenceTest.class); public void test_load_segmentation() throws Exception { insertPmSegmentation(1, "TEST", "ACTION"); insertPmExpression(1, 1, "DEST_1", "DEST_EXPRESS", 1, 0, null); insertPmExpression(2, 1, "SLEEVE_CODE", "CPFT", 999, 0, null); int segmentationId = 1; SegmentationPreference segmentationPreference = createPreference(fixture.getConnection(), segmentationId, NO_PARAMETERS); assertEquals(segmentationId, segmentationPreference.getSegmentationId()); assertEquals("TEST", segmentationPreference.getSegmentationName()); assertEquals("ACTION", segmentationPreference.getFamily()); } public void test_load_segmentation_ko() throws Exception { int segmentationId = 1; try { createPreference(fixture.getConnection(), segmentationId, NO_PARAMETERS); fail("IllegalArgumentException attendue."); } catch (IllegalArgumentException ex) { assertEquals("Le traitement " + segmentationId + " est inconnu", ex.getMessage()); } } public void test_load_expressions() throws Exception { insertPmSegmentation(1, "TEST", "ACTION"); insertPmExpression(1, 1, "DEST_1", "DEST_EXPRESS", 1, 0, null); insertPmExpression(2, 1, "VAR_1", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(3, 1, "SLEEVE_CODE", "CPFT", 999, 0, null); int segmentationId = 1; SegmentationPreference segmentationPreference = createPreference(fixture.getConnection(), segmentationId, NO_PARAMETERS); assertEquals(3, segmentationPreference.getExpressions().size()); Expression expression = segmentationPreference.getExpressions().get(0); assertEquals("DEST_1", expression.getDestinationField()); assertEquals("DEST_EXPRESS", expression.getExpression()); assertEquals(1, expression.getPriority()); assertEquals(0, expression.getType()); assertEquals(false, expression.isVariable()); expression = segmentationPreference.getExpressions().get(1); assertEquals("VAR_1", expression.getDestinationField()); assertEquals("VAR_EXPRESS", expression.getExpression()); assertEquals(2, expression.getPriority()); assertEquals(7, expression.getType()); assertEquals(true, expression.isVariable()); } public void test_load_expressions_with_variables() throws Exception { insertPmSegmentation(1, "TEST", "ACTION"); insertPmExpression(1, 1, "DEST_1", "\"$photo$\" == \"$segmentation.id$\"", 1, 0, null); insertPmExpression(2, 1, "SLEEVE_CODE", "CPFT", 999, 0, null); Map<String, String> parameters = new HashMap<String, String>(); parameters.put("photo", "200511"); parameters.put("segmentation.id", "1"); SegmentationPreference segmentationPreference = createPreference(fixture.getConnection(), 1, parameters); assertEquals(2, segmentationPreference.getExpressions().size()); Expression expression = segmentationPreference.getExpressions().get(0); assertEquals("\"200511\" == \"1\"", expression.getExpression()); } public void test_load_expressions_ko() throws Exception { insertPmSegmentation(1, "TEST", "ACTION"); int segmentationId = 1; try { createPreference(fixture.getConnection(), segmentationId, NO_PARAMETERS); fail("IllegalArgumentException attendue."); } catch (IllegalArgumentException ex) { assertEquals("Aucune expression pour le traitement " + segmentationId, ex.getMessage()); } } public void testSleeveCodeTransformation() throws SQLException, NullDustbinException { insertPmSegmentation(1, "TEST", "ACTION"); insertPmExpression(1, 1, "SLEEVE_CODE", "cpft", 2, 1, 7); insertPmExpression(2, 1, "VAR_01_1", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(3, 1, "VAR_01_2", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(4, 1, "VAR_001_3", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(5, 1, "VAR_01_3_15666", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(6, 1, "VAR_01_3_01_02", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(7, 1, "TAR_01_3_01_02", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(8, 1, "VAR_AP_SLEEVE_02", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(9, 1, "VAR_AP_SLEEVE-02", "VAR_EXPRESS", 2, 1, 7); insertPmExpression(10, 1, "VAR_AP_SLEEVE", "VAR_EXPRESS", 2, 1, 7); SegmentationPreference preference = createPreference(fixture.getConnection(), 1, NO_PARAMETERS); for (Expression expression : preference.getExpressions()) { if ("SLEEVE_CODE".equals(expression.getDestinationField())) { assertEquals( "utils.caseOf(new boolean[] {VAR_01_1,VAR_01_2,VAR_001_3,VAR_01_3_15666,VAR_01_3_01_02}, new String[] {\"01-1\",\"01-2\",\"001-3\",\"01-3.15666\",\"01-3.01.02\"}, \"cpft\")", expression.getExpression()); return; } } fail("Aucune expression SLEEVE_CODE n'a �t� trouv�e "); } private void insertPmExpression(Integer idExpression, Integer idSegmentation, String destinationField, String expr, Integer priority, Integer variable, Integer variableType) throws SQLException { PreparedStatement statement = null; try { String sql = "insert into PM_EXPRESSION (EXPRESSION_ID,SEGMENTATION_ID,DESTINATION_FIELD,EXPRESSION,PRIORITY,IS_VARIABLE,VARIABLE_TYPE)" + " values (?, ?, ?, ?, ?, ?, ?)"; statement = fixture.getConnection().prepareStatement(sql); statement.setInt(1, idExpression); statement.setInt(2, idSegmentation); statement.setString(3, destinationField); statement.setString(4, expr); statement.setInt(5, priority); statement.setInt(6, variable); if (variableType == null) { statement.setNull(7, INTEGER); } else { statement.setInt(7, variableType); } statement.execute(); } finally { if (statement != null) { statement.close(); } } } private void insertPmSegmentation(Integer idSegmentation, String segmentationName, String family) throws SQLException { PreparedStatement statement = null; try { String sql = "insert into PM_SEGMENTATION (SEGMENTATION_ID, SEGMENTATION_NAME, FAMILY) values (?, ?, ?)"; statement = fixture.getConnection().prepareStatement(sql); statement.setInt(1, idSegmentation); statement.setString(2, segmentationName); statement.setString(3, family); statement.execute(); } finally { if (statement != null) { statement.close(); } } } public void testReplace() { assertEquals("01-01.01.01", SegmentationPreference.replace("VAR_01_01_01_01")); assertEquals("0256-09", SegmentationPreference.replace("VAR_0256_09")); } @Override protected void setUp() throws Exception { fixture.doSetUp(); deleteTables(); } @Override protected void tearDown() throws Exception { deleteTables(); fixture.doTearDown(); } private void deleteTables() throws SQLException { fixture.executeQuery("delete from PM_EXPRESSION"); fixture.executeQuery("delete from PM_SEGMENTATION"); } }