/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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.openengsb.framework.edbi.hook.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openengsb.core.api.context.ContextHolder;
import org.openengsb.core.api.model.OpenEngSBModel;
import org.openengsb.core.api.model.OpenEngSBModelEntry;
import org.openengsb.core.api.security.AuthenticationContext;
import org.openengsb.core.edbi.api.IndexCommit;
import org.openengsb.core.ekb.api.EKBCommit;
public class CommitConverterTest {
private CommitConverter converter;
@Before
public void setUp() throws Exception {
// mock auth context
AuthenticationContext authenticationContext = mock(AuthenticationContext.class);
when(authenticationContext.getAuthenticatedPrincipal()).thenReturn("testUser");
// mock context
ContextHolder contextHolder = ContextHolder.get();
contextHolder.setCurrentContextId("testContext");
// commit converter
converter = new CommitConverter(authenticationContext, contextHolder);
}
@Test
public void convert_convertsCorrectly() throws Exception {
// build test commit
EKBCommit commit = new EKBCommit();
commit.setConnectorId("testConnector");
commit.setDomainId("testDomain");
commit.setInstanceId("testInstance");
commit.setRevisionNumber(UUID.fromString("550e8400-e29b-41d4-a716-446655440000"));
OpenEngSBModel insert1 = new TestModelA();
OpenEngSBModel insert2 = new TestModelA();
OpenEngSBModel insert3 = new TestModelB();
OpenEngSBModel update1 = new TestModelA();
OpenEngSBModel update2 = new TestModelA();
OpenEngSBModel delete1 = new TestModelA();
OpenEngSBModel delete2 = new TestModelB();
commit.addInsert(insert1).addInsert(insert2).addInsert(insert3);
commit.addUpdate(update1).addUpdate(update2);
commit.addDelete(delete1).addDelete(delete2);
// test
IndexCommit convertedCommit = converter.convert(commit);
// assert
assertEquals("testConnector", convertedCommit.getConnectorId());
assertEquals("testDomain", convertedCommit.getDomainId());
assertEquals("testInstance", convertedCommit.getInstanceId());
assertEquals("550e8400-e29b-41d4-a716-446655440000", convertedCommit.getCommitId().toString());
assertNotNull(convertedCommit.getTimestamp());
assertEquals("testContext", convertedCommit.getContextId());
assertEquals("testUser", convertedCommit.getUser());
Map<Class<?>, List<OpenEngSBModel>> inserts = convertedCommit.getInserts();
assertEquals(2, inserts.size());
assertEquals(2, inserts.get(TestModelA.class).size());
assertEquals(1, inserts.get(TestModelB.class).size());
assertSame(insert1, inserts.get(TestModelA.class).get(0));
assertSame(insert2, inserts.get(TestModelA.class).get(1));
assertSame(insert3, inserts.get(TestModelB.class).get(0));
Map<Class<?>, List<OpenEngSBModel>> updates = convertedCommit.getUpdates();
assertEquals(1, updates.size());
assertEquals(2, updates.get(TestModelA.class).size());
assertSame(update1, updates.get(TestModelA.class).get(0));
assertSame(update2, updates.get(TestModelA.class).get(1));
Map<Class<?>, List<OpenEngSBModel>> deletes = convertedCommit.getDeletes();
assertEquals(2, deletes.size());
assertEquals(1, deletes.get(TestModelA.class).size());
assertEquals(1, deletes.get(TestModelB.class).size());
assertSame(delete1, deletes.get(TestModelA.class).get(0));
assertSame(delete2, deletes.get(TestModelB.class).get(0));
Set<Class<?>> modelClasses = convertedCommit.getModelClasses();
assertEquals(2, modelClasses.size());
assertTrue("Model classes do not contain TestModel_A", modelClasses.contains(TestModelA.class));
assertTrue("Model classes do not contain TestModel_B", modelClasses.contains(TestModelB.class));
}
@After
public void tearDown() throws Exception {
converter = null;
}
private static class TestModelA extends OpenEngSBModelStub {
}
private static class TestModelB extends OpenEngSBModelStub {
}
private abstract static class OpenEngSBModelStub implements OpenEngSBModel {
@Override
public List<OpenEngSBModelEntry> toOpenEngSBModelValues() {
return null;
}
@Override
public List<OpenEngSBModelEntry> toOpenEngSBModelEntries() {
return null;
}
@Override
public Object retrieveInternalModelId() {
return null;
}
@Override
public String retrieveInternalModelIdName() {
return null;
}
@Override
public Long retrieveInternalModelTimestamp() {
return null;
}
@Override
public Integer retrieveInternalModelVersion() {
return null;
}
@Override
public void addOpenEngSBModelEntry(OpenEngSBModelEntry entry) {
}
@Override
public void removeOpenEngSBModelEntry(String key) {
}
@Override
public List<OpenEngSBModelEntry> getOpenEngSBModelTail() {
return null;
}
@Override
public void setOpenEngSBModelTail(List<OpenEngSBModelEntry> entries) {
}
@Override
public String retrieveModelName() {
return null;
}
@Override
public String retrieveModelVersion() {
return null;
}
}
}