package org.wordpress.android.util;
import android.content.Context;
import android.test.InstrumentationTestCase;
import android.test.RenamingDelegatingContext;
import com.yarolegovich.wellsql.WellSql;
import org.mockito.Mockito;
import org.wordpress.android.TestUtils;
import org.wordpress.android.TestWellSqlConfig;
import org.wordpress.android.fluxc.Dispatcher;
import org.wordpress.android.fluxc.model.PostModel;
import org.wordpress.android.fluxc.model.SiteModel;
import org.wordpress.android.fluxc.network.rest.wpcom.site.SiteRestClient;
import org.wordpress.android.fluxc.network.xmlrpc.site.SiteXMLRPCClient;
import org.wordpress.android.fluxc.persistence.SiteSqlUtils;
import org.wordpress.android.fluxc.persistence.SiteSqlUtils.DuplicateSiteException;
import org.wordpress.android.fluxc.persistence.WellSqlConfig;
import org.wordpress.android.fluxc.store.SiteStore;
import java.util.List;
public class FluxCMigrationTest extends InstrumentationTestCase {
private Context mTestContext;
private Context mRenamingTargetAppContext;
private SiteStore mSiteStore;
@Override
protected void setUp() throws Exception {
// Needed for Mockito
System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath());
mRenamingTargetAppContext = new RenamingDelegatingContext(
getInstrumentation().getTargetContext().getApplicationContext(), "test_");
mTestContext = getInstrumentation().getContext();
mSiteStore = new SiteStore(new Dispatcher(), Mockito.mock(SiteRestClient.class),
Mockito.mock(SiteXMLRPCClient.class));
WellSqlConfig config = new TestWellSqlConfig(mRenamingTargetAppContext);
WellSql.init(config);
config.reset();
super.setUp();
}
public void testSelfHostedSiteMigration() {
TestUtils.loadDBFromDump(mRenamingTargetAppContext, mTestContext, "FluxC-migration.sql");
List<SiteModel> sites = WPLegacyMigrationUtils.getSelfHostedSitesFromDeprecatedDB(mRenamingTargetAppContext);
AppLog.d(AppLog.T.DB, "Found " + sites.size() + " site to migrate");
// Expect three self-hosted sites:
// One normal
// One blank except for username, password, and XML-RPC URL
// One blank except for username, password, and XML-RPC URL, and with a 'false' api_blogid
assertEquals(3, sites.size());
}
public void testDraftMigration() throws DuplicateSiteException {
TestUtils.loadDBFromDump(mRenamingTargetAppContext, mTestContext, "FluxC-migration.sql");
// Migrate sites first so that SiteStore is populated
List<SiteModel> sites = WPLegacyMigrationUtils.getSelfHostedSitesFromDeprecatedDB(mRenamingTargetAppContext);
for (SiteModel site : sites) {
SiteSqlUtils.insertOrUpdateSite(site);
}
AppLog.d(AppLog.T.DB, "Added " + mSiteStore.getSitesCount() + " sites to SiteStore");
List<PostModel> posts = WPLegacyMigrationUtils.getDraftsFromDeprecatedDB(mRenamingTargetAppContext, mSiteStore);
AppLog.d(AppLog.T.DB, "Extracted " + posts.size() + " drafts from legacy DB");
assertEquals(3, posts.size());
assertEquals("", posts.get(0).getTitle());
assertEquals("This is a title", posts.get(1).getTitle());
assertEquals("This is a title also", posts.get(2).getTitle());
}
}