DivisionBy-Zero/erpa-sweng

View on GitHub
app/src/androidTest/java/ch/epfl/sweng/erpa/services/dummy/database/DummyDataServiceTest.java

Summary

Maintainability
A
0 mins
Test Coverage
package ch.epfl.sweng.erpa.services.dummy.database;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

import com.annimon.stream.Optional;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;

import ch.epfl.sweng.erpa.model.UuidObject;
import lombok.Data;

import static ch.epfl.sweng.erpa.util.TestUtils.populateUUIDObjects;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;

@RunWith(AndroidJUnit4.class)
public class DummyDataServiceTest {
    private DummyDataTester dts;

    @Before
    public void initDataService() {
        Context ctx = InstrumentationRegistry.getTargetContext();
        dts = new DummyDataTester(ctx);
    }

    @After
    public void removeStuff() {
        dts.removeAll();
    }

    @Test
    public void testAddedPersists() {
        TestData td = new TestData();
        dts.saveOne(td);

        Optional<TestData> res = dts.getOne(td.getUuid());
        assertTrue(res.isPresent());
        assertEquals(td, res.get());
    }

    @Test
    public void testAddedAll() {
        final int numTests = 500;
        List<TestData> list = new ArrayList<>(numTests);
        populateUUIDObjects(list, dts, (str) -> new TestData());
        Set<TestData> all = dts.getAll();
        assertTrue(all.containsAll(list));
    }

    @Test(expected = IllegalStateException.class)
    public void testExceptionOnIllegalSave() {
        TestData evilData = new TestData();
        File newFolder = new File(dts.getDataDir(), evilData.getUuid() + DummyDataService.SAVED_DATA_FILE_EXTENSION);
        newFolder.delete();
        newFolder.mkdir();
        dts.saveOne(evilData);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testExceptionOnGet() {
        File evilFile = new File(dts.getDataDir(), "Evil");
        evilFile.delete();
        dts.getFileFetcher().apply(evilFile);
    }

    @Test
    public void testDeletion() {
        dts.removeAll();
        File[] files = dts.getDataDir().listFiles();
        assertEquals(0, files.length);
    }

    @Data
    static class TestData implements UuidObject {
        private Integer x;
        private Integer y;

        TestData() {
            Random rnd = new Random();
            x = rnd.nextInt();
            y = rnd.nextInt();
        }

        @Override
        public String getUuid() {
            return String.valueOf(hashCode());
        }
    }

    static class DummyDataTester extends DummyDataService<TestData> {

        DummyDataTester(Context ctx) {
            super(ctx, TestData.class);
        }

        @Override
        public String dataFolder() {
            return "test_data";
        }
    }
}