Search in sources :

Example 1 with BackupRestore

use of org.qi4j.spi.entitystore.BackupRestore in project qi4j-sdk by Qi4j.

the class MigrationTest method testMigration.

@Test
public void testMigration() throws UnitOfWorkCompletionException, IOException, ActivationException, AssemblyException {
    // Set up version 1
    String id;
    StringInputOutput data_v1 = new StringInputOutput();
    {
        SingletonAssembler v1 = new SingletonAssembler() {

            @Override
            public void assemble(ModuleAssembly module) throws AssemblyException {
                MigrationTest.this.assemble(module);
                module.layer().application().setVersion("1.0");
            }
        };
        UnitOfWork uow = v1.module().newUnitOfWork();
        TestEntity1_0 entity = uow.newEntity(TestEntity1_0.class);
        entity.foo().set("Some value");
        entity.fooManyAssoc().add(entity);
        entity.fooAssoc().set(entity);
        id = entity.identity().get();
        uow.complete();
        BackupRestore backupRestore = v1.module().findService(BackupRestore.class).get();
        backupRestore.backup().transferTo(data_v1);
    }
    // Set up version 1.1
    StringInputOutput data_v1_1 = new StringInputOutput();
    {
        SingletonAssembler v1_1 = new SingletonAssembler() {

            @Override
            public void assemble(ModuleAssembly module) throws AssemblyException {
                MigrationTest.this.assemble(module);
                module.layer().application().setVersion("1.1");
            }
        };
        BackupRestore testData = v1_1.module().findService(BackupRestore.class).get();
        data_v1.transferTo(testData.restore());
        UnitOfWork uow = v1_1.module().newUnitOfWork();
        TestEntity1_1 entity = uow.get(TestEntity1_1.class, id);
        assertThat("Property has been renamed", entity.newFoo().get(), CoreMatchers.equalTo("Some value"));
        assertThat("ManyAssociation has been renamed", entity.newFooManyAssoc().count(), CoreMatchers.equalTo(1));
        assertThat("Association has been renamed", entity.newFooAssoc().get(), CoreMatchers.equalTo(entity));
        uow.complete();
        testData.backup().transferTo(data_v1_1);
    }
    // Set up version 2.0
    {
        SingletonAssembler v2_0 = new SingletonAssembler() {

            @Override
            public void assemble(ModuleAssembly module) throws AssemblyException {
                MigrationTest.this.assemble(module);
                module.layer().application().setVersion("2.0");
            }
        };
        BackupRestore testData = v2_0.module().findService(BackupRestore.class).get();
        // Test migration from 1.0 -> 2.0
        {
            data_v1.transferTo(testData.restore());
            UnitOfWork uow = v2_0.module().newUnitOfWork();
            TestEntity2_0 entity = uow.get(TestEntity2_0.class, id);
            assertThat("Property has been created", entity.bar().get(), CoreMatchers.equalTo("Some value"));
            assertThat("Custom Property has been created", entity.customBar().get(), CoreMatchers.equalTo("Hello Some value"));
            assertThat("ManyAssociation has been renamed", entity.newFooManyAssoc().count(), CoreMatchers.equalTo(1));
            assertThat("Association has been renamed", entity.newFooAssoc().get(), CoreMatchers.equalTo(entity));
            uow.complete();
        }
    }
    // Set up version 3.0
    {
        SingletonAssembler v3_0 = new SingletonAssembler() {

            @Override
            public void assemble(ModuleAssembly module) throws AssemblyException {
                MigrationTest.this.assemble(module);
                module.layer().application().setVersion("3.0");
            }
        };
        BackupRestore testData = v3_0.module().findService(BackupRestore.class).get();
        data_v1_1.transferTo(testData.restore());
        // Test migration from 1.0 -> 3.0
        {
            data_v1.transferTo(testData.restore());
            UnitOfWork uow = v3_0.module().newUnitOfWork();
            org.qi4j.migration.moved.TestEntity2_0 entity = uow.get(org.qi4j.migration.moved.TestEntity2_0.class, id);
            uow.complete();
        }
    }
}
Also used : UnitOfWork(org.qi4j.api.unitofwork.UnitOfWork) BackupRestore(org.qi4j.spi.entitystore.BackupRestore) ModuleAssembly(org.qi4j.bootstrap.ModuleAssembly) AssemblyException(org.qi4j.bootstrap.AssemblyException) SingletonAssembler(org.qi4j.bootstrap.SingletonAssembler) AbstractQi4jTest(org.qi4j.test.AbstractQi4jTest) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)1 UnitOfWork (org.qi4j.api.unitofwork.UnitOfWork)1 AssemblyException (org.qi4j.bootstrap.AssemblyException)1 ModuleAssembly (org.qi4j.bootstrap.ModuleAssembly)1 SingletonAssembler (org.qi4j.bootstrap.SingletonAssembler)1 BackupRestore (org.qi4j.spi.entitystore.BackupRestore)1 AbstractQi4jTest (org.qi4j.test.AbstractQi4jTest)1