From 28dad560a6efd962060f433beba2b05fcaafc71e Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 25 Mar 2016 07:09:06 -0400 Subject: [PATCH] Write tests for CSV exporter --- .../unit/io/HabitsCSVExporterTest.java | 115 ++++++++++++++++++ .../isoron/uhabits/io/HabitsCSVExporter.java | 2 +- 2 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 app/src/androidTest/java/org/isoron/uhabits/unit/io/HabitsCSVExporterTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/unit/io/HabitsCSVExporterTest.java b/app/src/androidTest/java/org/isoron/uhabits/unit/io/HabitsCSVExporterTest.java new file mode 100644 index 000000000..6cd998515 --- /dev/null +++ b/app/src/androidTest/java/org/isoron/uhabits/unit/io/HabitsCSVExporterTest.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.unit.io; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; +import android.test.suitebuilder.annotation.SmallTest; + +import org.isoron.uhabits.helpers.DatabaseHelper; +import org.isoron.uhabits.io.HabitsCSVExporter; +import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.unit.models.HabitFixtures; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import static junit.framework.Assert.assertTrue; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class HabitsCSVExporterTest +{ + private File baseDir; + + @Before + public void setup() + { + HabitFixtures.purgeHabits(); + HabitFixtures.createNonDailyHabit(); + HabitFixtures.createEmptyHabit(); + + Context targetContext = InstrumentationRegistry.getTargetContext(); + baseDir = targetContext.getCacheDir(); + } + + private void unzip(File file) throws IOException + { + ZipFile zip = new ZipFile(file); + Enumeration e = zip.entries(); + + while(e.hasMoreElements()) + { + ZipEntry entry = e.nextElement(); + InputStream stream = zip.getInputStream(entry); + + String outputFilename = String.format("%s/%s", baseDir.getAbsolutePath(), + entry.getName()); + File outputFile = new File(outputFilename); + + File parent = outputFile.getParentFile(); + if(parent != null) parent.mkdirs(); + + DatabaseHelper.copy(stream, outputFile); + } + + zip.close(); + } + + @Test + public void exportCSV() throws IOException + { + List habits = Habit.getAll(true); + + HabitsCSVExporter exporter = new HabitsCSVExporter(habits, baseDir); + String filename = exporter.writeArchive(); + assertAbsolutePathExists(filename); + + File archive = new File(filename); + unzip(archive); + + assertPathExists("Habits.csv"); + assertPathExists("001 Wake up early"); + assertPathExists("001 Wake up early/Checkmarks.csv"); + assertPathExists("001 Wake up early/Scores.csv"); + assertPathExists("002 Meditate/Checkmarks.csv"); + assertPathExists("002 Meditate/Scores.csv"); + } + + private void assertPathExists(String s) + { + assertAbsolutePathExists(String.format("%s/%s", baseDir.getAbsolutePath(), s)); + } + + private void assertAbsolutePathExists(String s) + { + File file = new File(s); + assertTrue(String.format("File %s should exist", file.getAbsolutePath()), file.exists()); + } +} diff --git a/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java b/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java index 6370dc6bc..f84ad666c 100644 --- a/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java +++ b/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java @@ -64,7 +64,7 @@ public class HabitsCSVExporter for(Habit h : habits) { - String habitDirName = String.format("%03d %s/", h.position, h.name); + String habitDirName = String.format("%03d %s/", h.position + 1, h.name); new File(exportDirName + habitDirName).mkdirs(); generateDirs.add(habitDirName);