package mobisocial.musubi.model.helpers;
import android.database.Cursor;
import android.database.sqlite.SQLiteOpenHelper;
import mobisocial.musubi.model.MApp;
import mobisocial.musubi.model.MFact;
import mobisocial.musubi.model.MFactType;
import mobisocial.test.TestBase;
import mobisocial.test.TestDatabase;
public class FactManagerTest extends TestBase {
SQLiteOpenHelper dbh;
private TestDatabase database;
public void setUp() {
dbh = new DatabaseFile(getContext(), null, new DebugSQLiteCursorFactory());
database = new TestDatabase(getContext(), dbh);
}
public void tearDown() {
dbh.close();
}
public void testLearnFacts() {
FactManager fm = database.getFactManager();
String appId = "super.app";
MApp app = database.getAppManager().ensureApp(appId);
String typeAttr = "mimeType";
String typeEdit = "editOf";
String typeScore = "score";
Object scoreField = null;
MFactType ftAttr = fm.ensureFactType(typeAttr);
assertEquals(typeAttr, ftAttr.factType_);
assertTrue(ftAttr.id_ >= 0);
MFactType ftEdit = fm.ensureFactType(typeEdit);
assertEquals(typeEdit, ftEdit.factType_);
assertTrue(ftEdit.id_ > ftAttr.id_);
MFactType ftEdit2 = fm.ensureFactType(typeEdit);
assertEquals(ftEdit.id_, ftEdit2.id_);
MFactType ftScore = fm.ensureFactType(typeScore);
assertEquals(typeScore, ftScore.factType_);
assertTrue(ftScore.id_ > ftEdit.id_);
MFact mimeType = fm.ensureFact(app, ftAttr, "image/jpeg", "file/image");
MFact dupe = fm.ensureFact(app, ftEdit, 303, 412);
MFact score = fm.ensureFact(app, ftScore, 1337, "level 1", 20.8, scoreField, "twenty.eight");
assertTrue(mimeType.id_ > -1);
assertTrue(dupe.id_ > mimeType.id_);
assertTrue(score.id_ > dupe.id_);
MFact mimeLookup = fm.getFact(mimeType.id_);
assertEquals(app.id_, mimeLookup.appId_);
assertEquals(ftAttr.id_, mimeLookup.fact_type_id);
assertEquals("file/image", mimeLookup.A_);
assertEquals("image/jpeg", mimeLookup.V_);
assertNull(mimeLookup.B_);
assertNull(mimeLookup.C_);
assertNull(mimeLookup.D_);
MFact dupeLookup = fm.getFact(dupe.id_);
assertEquals(ftEdit.id_, dupeLookup.fact_type_id);
assertEquals(303, dupeLookup.V_);
assertEquals(412, dupeLookup.A_);
assertNull(dupeLookup.B_);
assertNull(dupeLookup.C_);
assertNull(dupeLookup.D_);
MFact scoreLookup = fm.getFact(score.id_);
assertEquals(ftScore.id_, scoreLookup.fact_type_id);
assertEquals(1337, scoreLookup.V_);
assertEquals("level 1", scoreLookup.A_);
assertEquals(20.8, scoreLookup.B_);
assertEquals(scoreField, scoreLookup.C_);
assertEquals("twenty.eight", scoreLookup.D_);
fm.ensureFact(app, ftEdit, "V", "A", "B", "C", "D");
Cursor c = database.getReadableDatabase().rawQuery("select count(*) from facts", null);
c.moveToNext();
assertEquals(4, c.getInt(0));
// Dupe rows
fm.ensureFact(app, ftEdit, "V", "A", "B", "C", "D");
fm.ensureFact(app, ftEdit, 303, 412);
fm.ensureFact(app, ftScore, 1337, "level 1", 20.8, scoreField, "twenty.eight");
c = database.getReadableDatabase().rawQuery("select count(*) from facts", null);
c.moveToNext();
assertEquals(4, c.getInt(0));
}
}