1e8f7d5a67ef71b1c6488f52145482a8876c1b708Sunny Goyalpackage com.android.launcher3.provider;
2c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
3c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport android.content.ContentValues;
4c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport android.database.Cursor;
5c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport android.database.sqlite.SQLiteDatabase;
6c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport android.test.AndroidTestCase;
7c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport android.test.suitebuilder.annotation.MediumTest;
8c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
9c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport com.android.launcher3.LauncherProvider.DatabaseHelper;
10c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyalimport com.android.launcher3.LauncherSettings.Favorites;
11c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
12c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal/**
13e8f7d5a67ef71b1c6488f52145482a8876c1b708Sunny Goyal * Tests for {@link RestoreDbTask}
14c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal */
15c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal@MediumTest
16e8f7d5a67ef71b1c6488f52145482a8876c1b708Sunny Goyalpublic class RestoreDbTaskTest extends AndroidTestCase {
17c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
18c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    public void testGetProfileId() throws Exception {
19c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        SQLiteDatabase db = new MyDatabaseHelper(23).getWritableDatabase();
20e8f7d5a67ef71b1c6488f52145482a8876c1b708Sunny Goyal        assertEquals(23, new RestoreDbTask().getDefaultProfileId(db));
21c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    }
22c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
23c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    public void testMigrateProfileId() throws Exception {
24c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        SQLiteDatabase db = new MyDatabaseHelper(42).getWritableDatabase();
25c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        // Add some dummy data
26c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        for (int i = 0; i < 5; i++) {
27c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            ContentValues values = new ContentValues();
28c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            values.put(Favorites._ID, i);
29c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            values.put(Favorites.TITLE, "item " + i);
30c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            db.insert(Favorites.TABLE_NAME, null, values);
31c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        }
32c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        // Verify item add
33c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        assertEquals(5, getCount(db, "select * from favorites where profileId = 42"));
34c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
35e8f7d5a67ef71b1c6488f52145482a8876c1b708Sunny Goyal        new RestoreDbTask().migrateProfileId(db, 33);
36c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
37c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        // verify data migrated
38c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        assertEquals(0, getCount(db, "select * from favorites where profileId = 42"));
39c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        assertEquals(5, getCount(db, "select * from favorites where profileId = 33"));
40c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
41c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        // Verify default value changed
42c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        ContentValues values = new ContentValues();
43c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        values.put(Favorites._ID, 100);
44c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        values.put(Favorites.TITLE, "item 100");
45c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        db.insert(Favorites.TABLE_NAME, null, values);
46c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        assertEquals(6, getCount(db, "select * from favorites where profileId = 33"));
47c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    }
48c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
49c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    private int getCount(SQLiteDatabase db, String sql) {
50c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        Cursor c = db.rawQuery(sql, null);
51c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        try {
52c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            return c.getCount();
53c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        } finally {
54c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            c.getCount();
55c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        }
56c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    }
57c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
58c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    private class MyDatabaseHelper extends DatabaseHelper {
59c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
60c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        private final long mProfileId;
61c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
62c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        public MyDatabaseHelper(long profileId) {
63bc543af01c2b37aba61e6979ae3424e5eca72e2bSunny Goyal            super(getContext(), null, null);
64c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            mProfileId = profileId;
65c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        }
66c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
67c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        @Override
68c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        public long getDefaultUserSerial() {
69c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal            return mProfileId;
70c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        }
71c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal
72c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal        protected void onEmptyDbCreated() { }
73c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal    }
74c190dbfb784c0bca629b6966ce314d735cf98db3Sunny Goyal}
75