Package org.axonframework.repository

Source Code of org.axonframework.repository.JpaRepositoryIntegrationTest

/*
* Copyright (c) 2010-2012. Axon Framework
*
* Licensed 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.axonframework.repository;

import org.axonframework.domain.DomainEventMessage;
import org.axonframework.domain.EventMessage;
import org.axonframework.eventhandling.EventBus;
import org.axonframework.eventhandling.EventListener;
import org.axonframework.unitofwork.DefaultUnitOfWork;
import org.axonframework.unitofwork.UnitOfWork;
import org.junit.*;
import org.junit.runner.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import static org.junit.Assert.*;

/**
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/META-INF/spring/jpa-repository-context.xml",
        "/META-INF/spring/db-context.xml"})
@Transactional
public class JpaRepositoryIntegrationTest implements EventListener {

    @Autowired
    @Qualifier("simpleRepository")
    private GenericJpaRepository<JpaAggregate> repository;

    @Autowired
    private EventBus eventBus;

    @PersistenceContext
    private EntityManager entityManager;

    private List<DomainEventMessage> capturedEvents;

    @Before
    public void setUp() {
        capturedEvents = new ArrayList<DomainEventMessage>();
        eventBus.subscribe(this);
    }

    @SuppressWarnings({"unchecked"})
    @Test
    public void testStoreAndLoadNewAggregate() {
        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate originalAggregate = new JpaAggregate("Hello");
        repository.add(originalAggregate);
        uow.commit();

        entityManager.flush();
        entityManager.clear();
        List<JpaAggregate> results = entityManager.createQuery("SELECT a FROM JpaAggregate a").getResultList();
        assertEquals(1, results.size());
        JpaAggregate aggregate = results.get(0);
        assertEquals(originalAggregate.getIdentifier(), aggregate.getIdentifier());
        assertEquals(0, aggregate.getUncommittedEventCount());

        uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate storedAggregate = repository.load(originalAggregate.getIdentifier());
        uow.commit();
        assertEquals(storedAggregate.getIdentifier(), originalAggregate.getIdentifier());
        assertEquals((Long) 0L, originalAggregate.getVersion());
        assertTrue(capturedEvents.isEmpty());
    }

    @Test
    public void testUpdateAnAggregate() {
        JpaAggregate agg = new JpaAggregate("First message");
        entityManager.persist(agg);
        entityManager.flush();
        entityManager.clear();
        assertEquals((Long) 0L, agg.getVersion());

        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate aggregate = repository.load(agg.getIdentifier());
        aggregate.setMessage("And again");
        aggregate.setMessage("And more");
        uow.commit();

        assertEquals((Long) 1L, aggregate.getVersion());
        assertEquals(0L, aggregate.getUncommittedEventCount());
        assertEquals(2, capturedEvents.size());
        assertEquals(0L, capturedEvents.get(0).getSequenceNumber());
        assertEquals(1L, capturedEvents.get(1).getSequenceNumber());
    }

    @Test
    public void testDeleteAnAggregate() {
        JpaAggregate agg = new JpaAggregate("First message");
        entityManager.persist(agg);
        entityManager.flush();
        entityManager.clear();
        assertEquals((Long) 0L, agg.getVersion());

        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate aggregate = repository.load(agg.getIdentifier());
        aggregate.setMessage("And again");
        aggregate.setMessage("And more");
        aggregate.delete();
        uow.commit();
        entityManager.flush();
        entityManager.clear();

        assertEquals(0L, aggregate.getUncommittedEventCount());
        assertEquals(2, capturedEvents.size());
        assertEquals(0L, capturedEvents.get(0).getSequenceNumber());
        assertEquals(1L, capturedEvents.get(1).getSequenceNumber());

        assertNull(entityManager.find(JpaAggregate.class, aggregate.getIdentifier()));
    }

    @Override
    public void handle(EventMessage event) {
        if (DomainEventMessage.class.isInstance(event)) {
            this.capturedEvents.add((DomainEventMessage) event);
        }
    }
}
TOP

Related Classes of org.axonframework.repository.JpaRepositoryIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.