All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.droidparts.test.testcase.EntityTestCase Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2016 Alex Yanchenko
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. 
 */
package org.droidparts.test.testcase;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

import org.droidparts.persist.sql.EntityManager;
import org.droidparts.persist.sql.stmt.Is;
import org.droidparts.test.model.Album;
import org.droidparts.test.model.AlbumToTag;
import org.droidparts.test.model.Nested;
import org.droidparts.test.model.Primitives;
import org.droidparts.test.model.Primitives.En;
import org.droidparts.test.model.Tag;
import org.droidparts.test.model.Track;
import org.droidparts.test.persist.DB;
import org.droidparts.test.persist.sql.AlbumManager;
import org.droidparts.test.persist.sql.TrackManager;

import android.database.Cursor;
import android.test.AndroidTestCase;

public class EntityTestCase extends AndroidTestCase implements DB {

	private static final String[] ALBUMS = new String[] { "Diamond", "Iris" };
	private static final int[] YEARS = new int[] { 2007, 2009 };
	private static final String[] TRACKS = new String[] { "Diamond", "Beautiful", "Stay", "Secret Desire", "The Sun",
			"Buddha" };
	private static final String[] TAGS = new String[] { "downtempo", "lounge", "chillout" };

	private EntityManager primitivesManager;
	private EntityManager albumToTagManager;
	private AlbumManager albumManager;
	private EntityManager tagManager;
	private TrackManager trackManager;

	@Override
	protected void setUp() {
		if (primitivesManager == null) {
			primitivesManager = new EntityManager(Primitives.class, getContext());
			albumToTagManager = new EntityManager(AlbumToTag.class, getContext());
			tagManager = new EntityManager(Tag.class, getContext());
			albumManager = new AlbumManager(getContext());
			trackManager = new TrackManager(getContext());
		}
	}

	@Override
	protected void tearDown() {
		primitivesManager.delete().execute();
		tagManager.delete().execute();
		albumManager.delete().execute();
		trackManager.delete().execute();
	}

	public void testUniqueIndex() {
		Album album = new Album(ALBUMS[0], YEARS[0]);
		Tag tag = new Tag(TAGS[0]);
		AlbumToTag att = new AlbumToTag(album, tag);
		assertTrue(albumToTagManager.create(att));
		assertFalse(albumToTagManager.create(att));
		album.name = ALBUMS[1];
		album.id = 0;
		assertTrue(albumToTagManager.create(att));
		assertEquals(2, albumToTagManager.select().count());
	}

	public void testCRUD() {
		Album album1 = createAlbum();
		assertFalse(album1.id == 0);
		Album album2 = albumManager.read(album1.id);
		assertEquals(album1.name, album2.name);
		album2.name = ALBUMS[1];
		albumManager.update(album2);
		Album album3 = albumManager.read(album2.id);
		assertEquals(album2.name, album3.name);
		assertEquals(album1.id, album3.id);
		albumManager.delete(album1.id);
		assertNull(albumManager.read(album1.id));
	}

	public void testUniqueAndNull() {
		Album album1 = new Album(ALBUMS[0], YEARS[0]);
		album1.comment = TAGS[0];
		boolean created = albumManager.create(album1);
		assertTrue(created);

		Album album2 = new Album();
		created = albumManager.create(album2);
		assertFalse(created);

		album2.name = album1.name;
		created = albumManager.create(album2);
		assertFalse(created);

		album2.name = album1.name + "x";
		created = albumManager.create(album2);
		assertTrue(created);

		int count = albumManager.select().whereId(album1.id).count();
		assertEquals(1, count);

		Cursor cursor = albumManager.select().where(Column.COMMENT, Is.NOT_NULL).execute();
		assertEquals(1, cursor.getCount());
		cursor.moveToFirst();
		Album album11 = albumManager.readRow(cursor);
		assertEquals(album1.name, album11.name);
		cursor.close();

		cursor = albumManager.select().where(Column.COMMENT, Is.NULL).execute();
		assertEquals(1, cursor.getCount());
		cursor.moveToFirst();
		Album album21 = albumManager.readRow(cursor);
		assertEquals(album2.name, album21.name);
		cursor.close();
	}

	public void testModel() {
		Album album = createAlbum();
		album.nested.str = "str";
		for (String str : TRACKS) {
			Nested n = new Nested();
			n.str = str;
			album.nestedList.add(n);
		}
		album.nestedArr = album.nestedList.toArray(new Nested[album.nestedList.size()]);
		albumManager.update(album);
		album = albumManager.read(album.id);
		assertEquals("str", album.nested.str);
		assertEquals(TRACKS.length, album.nestedList.size());
		assertEquals(TRACKS.length, album.nestedArr.length);
	}

	public void testDate() {
		long now = System.currentTimeMillis();
		Primitives pri = new Primitives();
		pri.date = new Date(now);
		pri.dates.add(pri.date);
		assertTrue(primitivesManager.create(pri));
		pri = primitivesManager.read(pri.id);
		assertEquals(now, pri.date.getTime());
		assertEquals(1, pri.dates.size());
		assertEquals(now, pri.dates.get(0).getTime());

	}

	public void testEnum() {
		Primitives pri = new Primitives();
		pri.en = En.HI;
		pri.enArr = new En[] { En.HI, En.THERE };
		primitivesManager.create(pri);
		pri = primitivesManager.read(pri.id);
		assertEquals(En.HI, pri.en);
		assertEquals(En.THERE.id, pri.enArr[1].id);
	}

	public void testArraysAndCollections() {
		Primitives pri = new Primitives();
		pri.strArr = new String[] { "one", "two" };
		pri.intArr = new int[] { 10, 20, 30 };
		pri.strList.addAll(Arrays.asList(pri.strArr));
		pri.doubleSet.add(100.500);
		pri.doubleSet.add(12.5);
		assertTrue(primitivesManager.create(pri));
		pri = primitivesManager.read(pri.id);
		assertEquals(2, pri.strArr.length);
		assertEquals(30, pri.intArr[2]);
		assertTrue(pri.strList.contains("one"));
		assertTrue(pri.doubleSet.contains(12.5));
	}

	public void testWhereId() {
		createAlbums(10);
		//
		int count = albumManager.select().whereId(5, 8).count();
		assertEquals(2, count);
		count = albumManager.select().whereId(3).count();
		assertEquals(1, count);
		count = albumManager.select().whereId(15).count();
		assertEquals(0, count);
	}

	public void testBetween() {
		createAlbums(20);
		//
		int count = albumManager.select().where(Column.ID, Is.BETWEEN, 5, 10).count();
		assertEquals(6, count);
		count = albumManager.select().where(Column.ID, Is.NOT_BETWEEN, 5, 10).count();
		assertEquals(14, count);
	}

	public void testIn() {
		createAlbums(3);
		//
		int[] arr = new int[] { 1, 2 };
		int count = albumManager.select().where(Column.ID, Is.IN, arr).count();
		assertEquals(2, count);
		count = albumManager.select().where(Column.ID, Is.NOT_IN, arr).count();
		assertEquals(1, count);
	}

	public void testLike() {
		ArrayList list = new ArrayList();
		for (String str : TRACKS) {
			Album album = new Album();
			album.name = str;
			list.add(album);
		}
		albumManager.create(list);
		int count = albumManager.select().where(Column.NAME, Is.LIKE, "%%udd%%").count();
		assertEquals(1, count);
		count = albumManager.select().where(Column.NAME, Is.NOT_LIKE, "%%udd%%").count();
		assertEquals(TRACKS.length - 1, count);
	}

	public void testForeignKeys() {
		Album album = createAlbum();
		for (String name : TRACKS) {
			Track track = new Track();
			track.album = album;
			track.name = name;
			trackManager.create(track);
		}
		assertEquals(TRACKS.length, trackManager.select().where(Column.ALBUM_ID, Is.EQUAL, album.id).count());
		albumManager.delete(album.id);
		assertEquals(0, trackManager.select().count());
	}

	public void testEagerForeignKeys() {
		Album album = createAlbum();
		Track track = new Track();
		track.name = TRACKS[0];
		track.album = album;
		track.nullableAlbum = album;
		trackManager.create(track);
		track = trackManager.read(track.id);
		assertNotNull(track.album.name);
		assertNull(track.nullableAlbum.name);
	}

	public void testUniqueAndNullable() {
		Album album = new Album();
		assertFalse(albumManager.create(album));
		album.name = "name";
		assertTrue(albumManager.create(album));
		assertFalse(albumManager.create(album));
		//
		Track track = new Track();
		track.name = "tr";
		assertFalse(trackManager.create(track));
		track.album = album;
		assertTrue(trackManager.create(track));
		//
		Album album2 = new Album();
		album2.name = "name2";
		track.nullableAlbum = album2;
		assertTrue(trackManager.update(track));
		assertFalse(track.nullableAlbum.id == 0);
		//
		album.name = null;
		assertFalse(albumManager.update(album));
		//
		track.nullableAlbum = null;
		assertTrue(trackManager.update(track));
		assertNull(trackManager.read(track.id).nullableAlbum);
	}

	public void testOffsetLimit() {
		int count = 100;
		int offset = 10;
		int limit = 20;
		createAlbums(count);
		assertEquals(count, albumManager.select().count());
		assertEquals(limit, albumManager.select().limit(limit).count());
		assertEquals(limit, albumManager.select().offset(offset).limit(limit).count());
		assertEquals(count - offset, albumManager.select().offset(offset).count());
	}

	public void testWhere() {
		Album album = createAlbum();
		assertEquals(1, albumManager.select().where("_id = ?", album.id).count());
		assertEquals(1, albumManager.select().where("_id = " + album.id).count());
	}

	public void testM2M() {
		Album album = createAlbum();
		ArrayList tags = new ArrayList();
		for (String name : TAGS) {
			tags.add(new Tag(name));
		}
		albumManager.addTags(album.id, tags);
		//
		assertEquals(TAGS.length, albumToTagManager.select().count());
		tags = albumManager.getTags(album.id);
		assertEquals(TAGS.length, tags.size());
		//
		tagManager.delete(tags);
		tags = albumManager.getTags(album.id);
		assertEquals(0, albumToTagManager.select().count());
		assertEquals(0, tags.size());
	}

	private Album createAlbum() {
		Album album = new Album(ALBUMS[0], YEARS[0]);
		albumManager.create(album);
		return album;
	}

	private int createAlbums(int count) {
		ArrayList albums = new ArrayList();
		for (int i = 0; i < count; i++) {
			albums.add(new Album("A " + i, i));
		}
		return albumManager.create(albums);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy