def test_unwatch(self):
        w = CQDEWatchlistStore()
        w.watch_project(32, 23, "immediate")
        w.watch_project(34, 23, "daily")

        w.unwatch_project(32, 23)

        watchlist = w.get_projects_by_user(32)
        self.assertTrue(len(watchlist) == 0)
        watchlist = w.get_projects_by_user(34)
        self.assertTrue(len(watchlist) == 1)

        watchlist = w.get_watchers_by_project(23)
        self.assertTrue(len(watchlist) == 1)
        self.assertFalse(w.is_watching(32, 23))
    def test_unwatch(self):
        w = CQDEWatchlistStore()
        w.watch_project(32, 23, "immediate")
        w.watch_project(34, 23, "daily")

        w.unwatch_project(32, 23)

        watchlist = w.get_projects_by_user(32)
        self.assertTrue(len(watchlist) == 0)
        watchlist = w.get_projects_by_user(34)
        self.assertTrue(len(watchlist) == 1)

        watchlist = w.get_watchers_by_project(23)
        self.assertTrue(len(watchlist) == 1)
        self.assertFalse(w.is_watching(32, 23))
    def test_watch(self):
        w = CQDEWatchlistStore()
        self.assertTrue(w)
        w.watch_project(32, 23)
        w.watch_project(34, 23, "daily")

        watchlist = w.get_projects_by_user(32)
        self.assertTrue(len(watchlist) == 1)
        self.assertTrue(watchlist[0].user_id == 32)
        self.assertTrue(watchlist[0].project_id == 23)
        self.assertTrue(watchlist[0].notification == "immediate")

        watchlist = w.get_watchers_by_project(23)
        self.assertTrue(len(watchlist) == 2)
        self.assertTrue(w.is_watching(32, 23))
        self.assertTrue(w.is_watching(34, 23))
    def test_watch(self):
        w = CQDEWatchlistStore()
        self.assertTrue(w)
        w.watch_project(32, 23)
        w.watch_project(34, 23, "daily")

        watchlist = w.get_projects_by_user(32)
        self.assertTrue(len(watchlist) == 1)
        self.assertTrue(watchlist[0].user_id == 32)
        self.assertTrue(watchlist[0].project_id == 23)
        self.assertTrue(watchlist[0].notification == "immediate")

        watchlist = w.get_watchers_by_project(23)
        self.assertTrue(len(watchlist) == 2)
        self.assertTrue(w.is_watching(32, 23))
        self.assertTrue(w.is_watching(34, 23))
    def render_preference_panel(self, req, panel):

        if req.authname == 'anonymous':
            raise TracError("Can't change preferences!", "No access!")

        if req.method == 'POST':
            self.save_watchlist(req)

        watchlist = []
        projects = {}
        user = get_userstore().getUser(req.authname)
        w = CQDEWatchlistStore()
        if user:
            watchlist = w.get_projects_by_user(user.id)
            # TODO: inefficient querying
            for watch in watchlist:
                projects[watch.project_id] = Project.get(id=watch.project_id)
        return 'multiproject_user_prefs_watchlist.html', { 'watchlist': watchlist, 'projects' : projects,
            'notification_values': w.notifications }