package mobisocial.musubi.service;
import gnu.trove.list.linked.TLongLinkedList;
import mobisocial.crypto.IBIdentity;
import mobisocial.musubi.model.MFeed;
import mobisocial.musubi.model.MIdentity;
import mobisocial.musubi.model.MMyAccount;
import mobisocial.musubi.model.helpers.DatabaseFile;
import mobisocial.test.TestBase;
import mobisocial.test.TestDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class ProfilePushTest extends TestBase {
TestDatabase database;
SQLiteOpenHelper dbh;
private MMyAccount myAccount;
private MIdentity myIdentity;
private MIdentity friend1;
private MIdentity friend2;
private MIdentity stranger;
@Override
protected void setUp() throws Exception {
super.setUp();
dbh = new DatabaseFile(getContext(), null);
database = new TestDatabase(getContext(), dbh);
IBIdentity me = randomIBIdentity();
myIdentity = database.insertIdentity(me, true, true);
myAccount = new MMyAccount();
myAccount.accountName_ = "bjdodson@gmail.com";
myAccount.accountType_ = "google";
myAccount.identityId_ = myIdentity.id_;
database.getMyAccountManager().insertAccount(myAccount);
MFeed feed = new MFeed();
feed.accepted_ = false; //not visible
feed.type_ = MFeed.FeedType.ASYMMETRIC;
feed.name_ = myAccount.accountName_;
database.getFeedManager().insertFeed(feed);
myAccount.feedId_ = feed.id_;
database.getMyAccountManager().updateAccount(myAccount);
friend1 = database.insertIdentity(randomIBIdentity(), false, true);
friend2 = database.insertIdentity(randomIBIdentity(), false, false);
stranger = database.insertIdentity(randomIBIdentity(), false, true);
friend1.whitelisted_ = true;
friend2.whitelisted_ = true;
stranger.whitelisted_ = true;
database.getIdentityManager().updateIdentity(friend1);
database.getIdentityManager().updateIdentity(friend2);
database.getIdentityManager().updateIdentity(stranger);
}
public void testProfilePush() {
ProfilePushProcessor push = ProfilePushProcessor.newInstance(getContext(), dbh);
MFeed sync = push.prepareFeedForSync(myAccount, myIdentity, 1L, true);
assertNull(sync);
assertNotNull(myAccount.feedId_);
database.getFeedManager().ensureFeedMember(myAccount.feedId_, friend1.id_);
database.getFeedManager().ensureFeedMember(myAccount.feedId_, friend2.id_);
MFeed accountFeed = database.getFeedManager().lookupFeed(myAccount.feedId_);
MIdentity[] ids = database.getFeedManager().getFeedMembers(accountFeed);
assertEquals(2, ids.length);
assertEquals(0, friend1.receivedProfileVersion_);
assertEquals(0, friend2.receivedProfileVersion_);
MFeed newFeed = new MFeed();
newFeed.type_ = MFeed.FeedType.ONE_TIME_USE;
newFeed.id_ = -1;
database.getFeedManager().insertFeed(newFeed);
assertNotSame(-1, newFeed.id_);
sync = push.prepareFeedForSync(myAccount, myIdentity, 1L, true);
assertNotNull(sync);
MIdentity[] members = database.getFeedManager().getFeedMembers(sync);
TLongLinkedList memberIds = new TLongLinkedList();
for(MIdentity member : members) {
memberIds.add(member.id_);
}
push.markIdentitiesSynced(memberIds.toArray(), 1L);
MIdentity friend1Lookup = database.getIdentityManager().getIdentityForId(friend1.id_);
assertEquals(1L, friend1Lookup.sentProfileVersion_);
sync = push.prepareFeedForSync(myAccount, myIdentity, 1L, true);
assertNull(sync);
// All accounts have been synced at least once.
sync = push.prepareFeedForSync(myAccount, myIdentity, 2L, true);
assertNull(sync);
sync = push.prepareFeedForSync(myAccount, myIdentity, 2L, false);
assertNotNull(sync);
}
}