Skip to content

Commit

Permalink
#3058 TableRecordIdDAO tests
Browse files Browse the repository at this point in the history
  • Loading branch information
metas-rc committed Nov 29, 2017
1 parent 67b2712 commit 7e92bc5
Showing 1 changed file with 377 additions and 0 deletions.
@@ -0,0 +1,377 @@
package org.adempiere.ad.table.api.impl;

import static org.adempiere.model.InterfaceWrapperHelper.getTableId;
import static org.adempiere.model.InterfaceWrapperHelper.newInstance;
import static org.adempiere.model.InterfaceWrapperHelper.save;
import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;
import java.util.Properties;

import org.adempiere.ad.table.TableRecordIdDescriptor;
import org.adempiere.ad.table.api.IADTableDAO;
import org.adempiere.ad.table.api.ITableRecordIdDAO;
import org.adempiere.ad.trx.api.ITrx;
import org.adempiere.model.InterfaceWrapperHelper;
import org.adempiere.model.ZoomInfoFactory.IZoomSource;
import org.adempiere.test.AdempiereTestHelper;
import org.adempiere.util.Services;
import org.compiere.model.I_AD_ChangeLog;
import org.compiere.model.I_AD_Column;
import org.compiere.model.I_AD_Field;
import org.compiere.util.Env;
import org.compiere.util.Evaluatee;
import org.junit.Before;
import org.junit.Test;

import lombok.NonNull;

/*
* #%L
* de.metas.adempiere.adempiere.base
* %%
* Copyright (C) 2017 metas GmbH
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/

public class TableRecordIdDAO_Test
{

final ITableRecordIdDAO tableRecordIdDAO = Services.get(ITableRecordIdDAO.class);

@Before
public void init()
{

AdempiereTestHelper.get().init();

}

@Test
public void recordDescriptor_ChangeLog_Record_ID()
{
final IADTableDAO adTableDAO = Services.get(IADTableDAO.class);

final I_AD_Field referencedField = newInstance(I_AD_Field.class);
save(referencedField);
final int adfieldTableID = adTableDAO.retrieveTableId(I_AD_Field.Table_Name);

final Plain_I_AD_ChangeLog referencingChangeLog = newInstance(Plain_I_AD_ChangeLog.class);

referencingChangeLog.setAD_Table_ID(adfieldTableID);
referencingChangeLog.setRecord_ID(referencedField.getAD_Field_ID());
save(referencingChangeLog);

final int adChangeLogTableID = InterfaceWrapperHelper.getTableId(I_AD_ChangeLog.class);

// for the unit test need to explicitly create AD_Column records for the two AD_Changelog properties
{
createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_Record_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Table_ID);

}

final PlainZoomSource zoomSource = new PlainZoomSource(referencingChangeLog);

final List<TableRecordIdDescriptor> tableRecordReferences = tableRecordIdDAO.retrieveTableRecordIdReferences(zoomSource);

assertThat(tableRecordReferences.size()).isEqualTo(1);

final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor = createTableRecordIdDescriptor("AD_ChangeLog", Plain_I_AD_ChangeLog.COLUMNNAME_Record_ID, "AD_Field");

assertThat(equalsTableRecordIdDescriptor(expectedactualTableRecordIdDescriptor, tableRecordReferences.get(0))).isTrue();

}



@Test
public void recordDescriptor_ChangeLog_PrefixRecordId()
{
final IADTableDAO adTableDAO = Services.get(IADTableDAO.class);

final I_AD_Field referencedField = newInstance(I_AD_Field.class);
save(referencedField);
final int adfieldTableID = adTableDAO.retrieveTableId(I_AD_Field.Table_Name);

final Plain_I_AD_ChangeLog referencingChangeLog = newInstance(Plain_I_AD_ChangeLog.class);
referencingChangeLog.setAD_Field_AD_Table_ID(adfieldTableID);
referencingChangeLog.setAD_Field_Record_ID(referencedField.getAD_Field_ID());
save(referencingChangeLog);

final int adChangeLogTableID = getTableId(I_AD_ChangeLog.class);

// for the unit test need to explicitly create AD_Column records for the two AD_Changelog properties
{
createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_Record_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_AD_Table_ID);

}

final PlainZoomSource zoomSource = new PlainZoomSource(referencingChangeLog);

final List<TableRecordIdDescriptor> tableRecordReferences = tableRecordIdDAO.retrieveTableRecordIdReferences(zoomSource);

assertThat(tableRecordReferences.size()).isEqualTo(1);

final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor = createTableRecordIdDescriptor("AD_ChangeLog", Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_Record_ID, "AD_Field");

assertThat(equalsTableRecordIdDescriptor(expectedactualTableRecordIdDescriptor, tableRecordReferences.get(0))).isTrue();

}

@Test
public void recordDescriptor_ChangeLog_RecordId_And_Prefix_RecordId()
{
final IADTableDAO adTableDAO = Services.get(IADTableDAO.class);

final I_AD_Field referencedField = newInstance(I_AD_Field.class);
save(referencedField);
final int adfieldTableID = adTableDAO.retrieveTableId(I_AD_Field.Table_Name);

final Plain_I_AD_ChangeLog referencingChangeLog = newInstance(Plain_I_AD_ChangeLog.class);

referencingChangeLog.setAD_Table_ID(adfieldTableID);
referencingChangeLog.setRecord_ID(referencedField.getAD_Field_ID());
referencingChangeLog.setAD_Field_AD_Table_ID(adfieldTableID);
referencingChangeLog.setAD_Field_Record_ID(referencedField.getAD_Field_ID());
save(referencingChangeLog);

final int adChangeLogTableID = InterfaceWrapperHelper.getTableId(I_AD_ChangeLog.class);

// for the unit test need to explicitly create AD_Column records for the two AD_Changelog properties
{
createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_Record_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Table_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_Record_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_AD_Table_ID);

}

final PlainZoomSource zoomSource = new PlainZoomSource(referencingChangeLog);

final List<TableRecordIdDescriptor> tableRecordReferences = tableRecordIdDAO.retrieveTableRecordIdReferences(zoomSource);

final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor_Record_ID = createTableRecordIdDescriptor("AD_ChangeLog", Plain_I_AD_ChangeLog.COLUMNNAME_Record_ID, "AD_Field");
final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor_Prefix_Record_ID = createTableRecordIdDescriptor("AD_ChangeLog", Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_Record_ID, "AD_Field");

assertThat(tableRecordReferences.size()).isEqualTo(2);

assertThat(containsTableRecordReferences(tableRecordReferences, expectedactualTableRecordIdDescriptor_Record_ID)).isTrue();
assertThat(containsTableRecordReferences(tableRecordReferences, expectedactualTableRecordIdDescriptor_Prefix_Record_ID)).isTrue();

}

@Test
public void recordDescriptor_All_TableRecordIdDescriptors()
{
final IADTableDAO adTableDAO = Services.get(IADTableDAO.class);

final I_AD_Field referencedField = newInstance(I_AD_Field.class);
save(referencedField);
final int adfieldTableID = adTableDAO.retrieveTableId(I_AD_Field.Table_Name);

final Plain_I_AD_ChangeLog referencingChangeLog = newInstance(Plain_I_AD_ChangeLog.class);

referencingChangeLog.setAD_Table_ID(adfieldTableID);
referencingChangeLog.setRecord_ID(referencedField.getAD_Field_ID());
referencingChangeLog.setAD_Field_AD_Table_ID(adfieldTableID);
referencingChangeLog.setAD_Field_Record_ID(referencedField.getAD_Field_ID());
save(referencingChangeLog);

final int adChangeLogTableID = InterfaceWrapperHelper.getTableId(I_AD_ChangeLog.class);

// for the unit test need to explicitly create AD_Column records for the two AD_Changelog properties
{
createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_Record_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Table_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_Record_ID);

createColumn(adChangeLogTableID, Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_AD_Table_ID);

}

final List<TableRecordIdDescriptor> tableRecordReferences = tableRecordIdDAO.retrieveAllTableRecordIdReferences();

final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor_Record_ID = createTableRecordIdDescriptor("AD_ChangeLog", Plain_I_AD_ChangeLog.COLUMNNAME_Record_ID, "AD_Field");
final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor_Prefix_Record_ID = createTableRecordIdDescriptor("AD_ChangeLog", Plain_I_AD_ChangeLog.COLUMNNAME_AD_Field_Record_ID, "AD_Field");

assertThat(tableRecordReferences.size()).isEqualTo(2);

assertThat(containsTableRecordReferences(tableRecordReferences, expectedactualTableRecordIdDescriptor_Record_ID)).isTrue();
assertThat(containsTableRecordReferences(tableRecordReferences, expectedactualTableRecordIdDescriptor_Prefix_Record_ID)).isTrue();

}


private I_AD_Column createColumn(final int tableId, final String columnName)
{
final I_AD_Column column = newInstance(I_AD_Column.class);
column.setIsActive(true);
column.setAD_Table_ID(tableId);
column.setColumnName(columnName);
save(column);
return column;
}

public TableRecordIdDescriptor createTableRecordIdDescriptor(final String referencingTableName, final String referencingColumnName, final String referencedTableName)
{
final TableRecordIdDescriptor tableRecordIdDescriptor = TableRecordIdDescriptor.of(referencingTableName, referencingColumnName, referencedTableName);

return tableRecordIdDescriptor;

}

public boolean equalsTableRecordIdDescriptor(@NonNull final TableRecordIdDescriptor expectedTableRecordIdDescriptor, @NonNull final TableRecordIdDescriptor actualTableRecordIdDescriptor)
{
if (!(expectedTableRecordIdDescriptor.getReferencingTableName().equals(actualTableRecordIdDescriptor.getReferencingTableName())))
{
return false;
}
if (!(expectedTableRecordIdDescriptor.getReferencingColumnName().equals(actualTableRecordIdDescriptor.getReferencingColumnName())))
{
return false;
}
if (!(expectedTableRecordIdDescriptor.getReferencedTableName().equals(actualTableRecordIdDescriptor.getReferencedTableName())))
{
return false;
}

return true;
}

private boolean containsTableRecordReferences(final List<TableRecordIdDescriptor> tableRecordIdDescriptors, final TableRecordIdDescriptor expectedactualTableRecordIdDescriptor)
{
for (final TableRecordIdDescriptor tableRecordIdDescriptor : tableRecordIdDescriptors)
{
if (equalsTableRecordIdDescriptor(tableRecordIdDescriptor, expectedactualTableRecordIdDescriptor))
{
return true;
}
}

return false;

}

private class PlainZoomSource implements IZoomSource
{
final Plain_I_AD_ChangeLog changeLog;

public PlainZoomSource(@NonNull final Plain_I_AD_ChangeLog changeLog)
{
this.changeLog = changeLog;
}

@Override
public Properties getCtx()
{
return Env.getCtx();
}

@Override
public Evaluatee createEvaluationContext()
{
throw new UnsupportedOperationException();
}

@Override
public String getTrxName()
{
return ITrx.TRXNAME_None;
}

@Override
public int getAD_Window_ID()
{
throw new UnsupportedOperationException();
}

@Override
public String getTableName()
{
return Plain_I_AD_ChangeLog.Table_Name;
}

@Override
public int getAD_Table_ID()
{
return InterfaceWrapperHelper.getTableId(Plain_I_AD_ChangeLog.class);
}

@Override
public String getKeyColumnName()
{
return Plain_I_AD_ChangeLog.COLUMNNAME_AD_ChangeLog_ID;
}

@Override
public List<String> getKeyColumnNames()
{
throw new UnsupportedOperationException();
}

@Override
public int getRecord_ID()
{
return changeLog.getAD_ChangeLog_ID();
}

@Override
public boolean hasField(String columnName)
{
throw new UnsupportedOperationException();
}

@Override
public Object getFieldValue(String columnName)
{
throw new UnsupportedOperationException();
}

}

interface Plain_I_AD_ChangeLog extends org.compiere.model.I_AD_ChangeLog
{
public void setAD_Field_AD_Table_ID(int AD_Table_ID);

public int getAD_Field_AD_Table_ID();

public org.compiere.model.I_AD_Table getAD_Field_AD_Table();

public void setAD_Field_AD_Table(org.compiere.model.I_AD_Table AD_Table);

public static final String COLUMNNAME_AD_Field_AD_Table_ID = "AD_Field_AD_Table_ID";

//
public void setAD_Field_Record_ID(int AD_Field_Record_ID);

public int getAD_Field_Record_ID();

/** Column name Record_ID */
public static final String COLUMNNAME_AD_Field_Record_ID = "AD_Field_Record_ID";

}

}

0 comments on commit 7e92bc5

Please sign in to comment.