private boolean shouldInsert(String migration) { return extractDate(migration) > startDate; }
public boolean add(String migration) { if (shouldInsert(migration)) { return migrations.add(migration); } return false; }
public MigratingSQLiteOpenHelper(Context context, CursorFactory factory) throws IOException { this(context, context.getPackageName() + ".db", factory, Migrations.getVersion(context.getAssets(), MIGRATIONS_PATH)); }
@Test public void testStartDate() { Migrations migration = new Migrations(4); migration.add("3_test.sql"); migration.add("1_test.sql"); migration.add("2_test.sql"); migration.add("5_test.sql"); migration.add("0_test.sql"); assertThat(migration.getMigrationsFiles().size(), equalTo(1)); assertThat(migration.getMigrationsFiles().last(), equalTo("5_test.sql")); }
public static int getVersion(AssetManager assets, String migrationsPath) throws IOException { int version = 1; String[] sqls = assets.list(migrationsPath); if (sqls.length == 0) { w("You need to add atleast one SQL file in your assets/" + migrationsPath + " folder"); } else { Migrations migrations = new Migrations(-1); for (String sqlfile : sqls) { migrations.add(sqlfile); } version = (migrations.extractDate(migrations.getMigrationsFiles().last())); if (infoLoggingEnabled()) { i("current migration file version is: " + version); } } return version; } }
@Override public void onCreate(SQLiteDatabase db) { try { Migrations.migrate(db, context.getAssets(), MIGRATIONS_PATH); } catch (IOException e) { Log.Migration.e(e); } }
@Test public void testOrderedOfImport() { Migrations migration = new Migrations(); migration.add("3_test.sql"); migration.add("1_test.sql"); migration.add("2_test.sql"); migration.add("5_test.sql"); migration.add("0_test.sql"); assertThat(migration.getMigrationsFiles().size(), equalTo(5)); assertThat(migration.getMigrationsFiles().first(), equalTo("0_test.sql")); assertThat(migration.getMigrationsFiles().last(), equalTo("5_test.sql")); }
Migrations migrations = new Migrations(db.getVersion()); Reader reader; migrations.add(sqlfile); for (String sql : migrations.getMigrationsFiles()) { reader = new InputStreamReader(manager.open(assetLocation + File.separator + sql, AssetManager.ACCESS_RANDOM)); if (infoLoggingEnabled()) { if (migrations.getMigrationsFiles().size() > 0) { int v = migrations.extractDate(migrations.getMigrationsFiles().last()); db.setVersion(v); if (infoLoggingEnabled()) {
@Test public void testNoFiles() throws IOException { when(db.getVersion()).thenReturn(0); AssetManager manager = mock(AssetManager.class); when(manager.list(anyString())).thenReturn(new String[] { }); Migrations.migrate(db, manager, "sql"); } }
@Test public void testShouldInsertOrNotFileCorrectly() { Migrations migration = new Migrations(); assertTrue("a correct file name can be inserted", migration.add("12_test.sql")); assertTrue("a correct file name can be inserted", migration.add("121321313_test_teste.sql")); assertFalse("a file name without .sql can not be inserted", migration.add("12_test")); assertFalse("a file name without timestamp can not be inserted", migration.add("test.sql")); assertThat(migration.getMigrationsFiles().size(), equalTo(2)); }
@Test public void setDBVersion() throws IOException { String execute = "CREATE TABLE IF NOT EXIST test(id integer);"; when(db.getVersion()).thenReturn(0); AssetManager manager = mock(AssetManager.class); when(manager.list(anyString())).thenReturn(new String[] { "1234_test.sql", "12345_test.sql", "123456_test.sql" }); when(manager.open(anyString(), anyInt())).thenReturn( new ByteArrayInputStream(execute.getBytes("UTF-8"))); Migrations.migrate(db, manager, "sql"); //verify(db, times(3)).execSQL(anyString()); verify(db).setVersion(123456); }