def test_register(self):
        expense = Expense()
        expense.setUp({"test": True})

        proj1 = ConsumingProject(9999, date(2012, 1, 1), 3333)
        proj2 = ConsumingProject(256, date(2012, 1, 1), 3333)
        proj3 = ConsumingProject(999, date(2012, 1, 1), 3333, "type", u"Food & Drinks")
        proj4 = ConsumingProject(300, date(2012, 1, 1), 3333, "tag", u"Like")
        expense.addProject("proj1", proj1)
        expense.addProject("proj2", proj2)
        expense.addProject("proj3", proj3)
        expense.addProject("proj4", proj4)
        addSampleRecords(expense)

        # test proj1
        self.assertEqual(proj1.p_accumt_amount, 2320.0)
        self.assertEqual(proj1.p_recs_amount, 21)
        self.assertEqual(proj1.p_accomplish_date, "")
        self.assertFalse(proj1.p_statdict["hasQuarter"])
        self.assertFalse(proj1.p_statdict["hasHalf"])
        self.assertFalse(proj1.p_statdict["hasThreeQuarters"])
        self.assertEqual(len(proj1.p_progress_info), 6)

        # test proj2
        self.assertEqual(proj2.p_accumt_amount, 2320.0)
        self.assertEqual(proj2.p_recs_amount, 21)
        self.assertEqual(proj2.p_accomplish_date, date.today().isoformat())
        self.assertTrue(proj2.p_statdict["hasQuarter"])
        self.assertTrue(proj2.p_statdict["hasHalf"])
        self.assertTrue(proj2.p_statdict["hasThreeQuarters"])
        self.assertEqual(proj2.p_statdict["DateOfQuarter"], date.today().isoformat())
        self.assertEqual(proj2.p_statdict["DateOfHalf"], date.today().isoformat())
        self.assertEqual(proj2.p_statdict["DateOfThreeQuarters"], date.today().isoformat())
        self.assertEqual(len(proj2.p_progress_info), 7)

        # test proj3
        self.assertEqual(proj3.p_accumt_amount, 322.0)
        self.assertEqual(proj3.p_recs_amount, 16)
        self.assertEqual(proj3.p_accomplish_date, "")
        self.assertTrue(proj3.p_statdict["hasQuarter"])
        self.assertFalse(proj3.p_statdict["hasHalf"])
        self.assertFalse(proj3.p_statdict["hasThreeQuarters"])
        self.assertEqual(proj3.p_statdict["DateOfQuarter"], date.today().isoformat())
        self.assertEqual(len(proj3.p_progress_info), 7)

        # test proj4
        self.assertEqual(proj4.p_accumt_amount, 154.0)
        self.assertEqual(proj4.p_recs_amount, 2)
        self.assertEqual(proj4.p_accomplish_date, "")
        self.assertTrue(proj4.p_statdict["hasQuarter"])
        self.assertTrue(proj4.p_statdict["hasHalf"])
        self.assertFalse(proj4.p_statdict["hasThreeQuarters"])
        self.assertEqual(proj4.p_statdict["DateOfQuarter"], date.today().isoformat())
        self.assertEqual(proj4.p_statdict["DateOfHalf"], date.today().isoformat())
        self.assertEqual(len(proj4.p_progress_info), 7)
    def test_Expense_mutable_operation(self):
        expense = Expense()
        expense.setUp()
        addSampleRecords(expense)

        expense.updatePassword(DEFAULT_PASSWORD, 'JL')
        expense.save()

        exp2 = Expense()
        exp2.setUp({'pwd':'JL'})
        self.assertEqual(
            sum(len(cont._storage) for cont in expense.rec_m.impl._reclist),
            sum(len(cont._storage) for cont in exp2.rec_m.impl._reclist),
        )
        self.assertEqual(
            expense.rec_m.impl._pwd,
            exp2.rec_m.impl._pwd,
        )
        self.assertEqual(
            expense.rec_m.impl._len,
            exp2.rec_m.impl._len,
        )

        exp2.resetAll()