/*
* Copyright (c) 2012 Denis Solonenko.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
package ru.orangesoftware.financisto2.test.backup;
import android.content.Context;
import android.content.pm.PackageInfo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import java.util.zip.GZIPInputStream;
import ru.orangesoftware.financisto2.backup.DatabaseExport;
import ru.orangesoftware.financisto2.backup.DatabaseImport;
import ru.orangesoftware.financisto2.db.CategoryRepository;
import ru.orangesoftware.financisto2.export.Export;
import ru.orangesoftware.financisto2.model.Account;
import ru.orangesoftware.financisto2.test.export.AbstractImportExportTest;
import ru.orangesoftware.financisto2.utils.Utils;
/**
* Created by IntelliJ IDEA.
* User: denis.solonenko
* Date: 1/4/12 8:42 PM
*/
public class DatabaseBackupTest extends AbstractImportExportTest {
@Override
public void setUp() throws Exception {
super.setUp();
createFirstAccount();
}
public void test_should_restore_database_from_plain_text() throws Exception {
String fileName = backupDatabase(false);
assertHeader(fileName, false);
restoreDatabase(fileName);
assertAccounts();
}
public void test_should_restore_database_from_gzipped_text() throws Exception {
String fileName = backupDatabase(true);
assertHeader(fileName, true);
restoreDatabase(fileName);
assertAccounts();
}
private String backupDatabase(boolean useGzip) throws Exception {
Context context = getContext();
DatabaseExport databaseExport = new DatabaseExport(context, db.db(), useGzip);
return databaseExport.export();
}
private void restoreDatabase(String fileName) throws IOException {
Context context = getContext();
DatabaseImport databaseImport = DatabaseImport.createFromFileBackup(context, db, categoryRepository, fileName);
databaseImport.importDatabase();
}
private void assertHeader(String fileName, boolean useGzip) throws Exception {
BufferedReader br = createFileReader(fileName, useGzip);
try {
PackageInfo pi = Utils.getPackageInfo(getContext());
assertEquals("PACKAGE:" + pi.packageName, br.readLine());
assertEquals("VERSION_CODE:"+pi.versionCode, br.readLine());
assertEquals("VERSION_NAME:"+pi.versionName, br.readLine());
assertEquals("DATABASE_VERSION:"+db.db().getVersion(), br.readLine());
assertEquals("#START", br.readLine());
} finally {
br.close();
}
}
private BufferedReader createFileReader(String fileName, boolean useGzip) throws IOException {
File backupPath = Export.getBackupFolder(getContext());
File file = new File(backupPath, fileName);
InputStream in = new FileInputStream(file);
if (useGzip) {
in = new GZIPInputStream(in);
}
InputStreamReader r = new InputStreamReader(in);
return new BufferedReader(r);
}
private void assertAccounts() {
List<Account> accounts = db.getAllAccountsList();
assertEquals(1, accounts.size());
assertEquals("My Cash Account", accounts.get(0).title);
assertEquals("AAA BBB:CCC", accounts.get(0).note);
}
}