def test_single_project(self): skip_test() u_to = User("admin") u_from = User("testuser") to_proj = self._prj("test", "admin") self._add(to_proj, u_to, "README.md", "hi") from_proj = self._prj("testuser/test", "testuser", to_proj.id) self._add(from_proj, u_from, "README.md", "hello") pullreq = PullRequest.open(from_proj, "master", to_proj, "master") ticket = Ticket(None, None, to_proj.id, "title", "desc", "testuser", None, None) pullreq = add_pull(ticket, pullreq, u_from) iss = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=to_proj.id) IssuePRSearch.index_a_project(to_proj) res = IssueSearch.search_a_phrase('title1', to_proj.id) res = SearchEngine.decode(res, ('issue_id',)) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss.id res = PullRequestSearch.search_a_phrase('title', to_proj.id) res = SearchEngine.decode(res, ('issue_id',)) res = [id for id, in res] assert len(res) == 1
def test_single_project(self): skip_test() u_to = User("admin") u_from = User("testuser") to_proj = self._prj("test", "admin") self._add(to_proj, u_to, "README.md", "hi") from_proj = self._prj("testuser/test", "testuser", to_proj.id) self._add(from_proj, u_from, "README.md", "hello") pullreq = PullRequest.open(from_proj, "master", to_proj, "master") ticket = Ticket(None, None, to_proj.id, "title", "desc", "testuser", None, None) pullreq = add_pull(ticket, pullreq, u_from) iss = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=to_proj.id) IssuePRSearch.index_a_project(to_proj) res = IssueSearch.search_a_phrase('title1', to_proj.id) res = SearchEngine.decode(res, ('issue_id', )) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss.id res = PullRequestSearch.search_a_phrase('title', to_proj.id) res = SearchEngine.decode(res, ('issue_id', )) res = [id for id, in res] assert len(res) == 1
def test_multiple_project(self): skip_test() p1 = self._prj("test_1") p2 = self._prj("test_2") iss1 = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=p1.id) iss2 = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=p2.id) IssueSearch.index_a_project_issue(p1) IssueSearch.index_a_project_issue(p2) res = IssueSearch.search_a_phrase('title1', p1.id) res = SearchEngine.decode(res, ('issue_id',)) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss1.id res = IssueSearch.search_a_phrase('title1', p2.id) res = SearchEngine.decode(res, ('issue_id',)) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss2.id
def test_single_project(self): skip_test() p = self._prj("test") iss1 = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=p.id) IssueSearch.index_a_project_issue(p) res = IssueSearch.search_a_phrase('owner', p.id) res = SearchEngine.decode(res, ('issue_id',)) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss1.id iss2 = ProjectIssue.add(title='title2', description='desc2', creator='owner', project=p.id) IssueSearch.index_a_project_issue(p) res = IssueSearch.search_a_phrase('owner', p.id) res = SearchEngine.decode(res, ('issue_id',)) res = [id for id, in res] assert len(res) == 2 assert iss1.id in res assert iss2.id in res
def test_multiple_project(self): skip_test() p1 = self._prj("test_1") p2 = self._prj("test_2") iss1 = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=p1.id) iss2 = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=p2.id) IssueSearch.index_a_project_issue(p1) IssueSearch.index_a_project_issue(p2) res = IssueSearch.search_a_phrase('title1', p1.id) res = SearchEngine.decode(res, ('issue_id', )) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss1.id res = IssueSearch.search_a_phrase('title1', p2.id) res = SearchEngine.decode(res, ('issue_id', )) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss2.id
def test_single_project(self): skip_test() p = self._prj("test") iss1 = ProjectIssue.add(title='title1', description='desc1', creator='owner', project=p.id) IssueSearch.index_a_project_issue(p) res = IssueSearch.search_a_phrase('owner', p.id) res = SearchEngine.decode(res, ('issue_id', )) res = [id for id, in res] assert len(res) == 1 assert res[0] == iss1.id iss2 = ProjectIssue.add(title='title2', description='desc2', creator='owner', project=p.id) IssueSearch.index_a_project_issue(p) res = IssueSearch.search_a_phrase('owner', p.id) res = SearchEngine.decode(res, ('issue_id', )) res = [id for id, in res] assert len(res) == 2 assert iss1.id in res assert iss2.id in res
def index(request): if list_type == 'search': key_word = request.get_form_var('q', None) if not key_word: return self._index(request) milestone_number = request.get_form_var('milestone') state = request.get_form_var('state', 'open') page = request.get_form_var('page', 1) project_name = self.proj_name user = request.user project = self.project order = get_order_type(request, 'project_issues_order') # noqa 目前支持list_type = repo的sort_by n_open_issues = project.n_open_issues n_closed_issues = project.n_closed_issues n_everyone_issues = 0 n_assigned_issues = 0 n_created_issues = 0 n_pages = 0 selected_tag_names = request.get_form_var('tags', '') start = ISSUES_COUNT_PER_PAGE * (int(page) - 1) limit = ISSUES_COUNT_PER_PAGE is_closed_tab = None if state == "open" else True issue_list = [] total_issues = 0 opts = dict(project=project, state=state, start=start, limit=limit, order=order) if selected_tag_names: selected_tag_names = selected_tag_names.split(',') tags = filter(None, [TagName.get_project_issue_tag( name, project) for name in selected_tag_names]) opts['tags'] = tags show_tags = project.get_group_tags(selected_tag_names) if milestone_number: milestone = Milestone.get_by_project( project, number=milestone_number) opts['milestone'] = milestone # FIXME: why user or list_type ? if user or list_type in ('repo', 'search'): if list_type == 'search': # FIXME: search with assigned or creator search_result = IssueSearch.search_a_phrase( key_word, self.project.id, size=n_open_issues + n_closed_issues, state=state) or [] search_issue_ids = [] if search_result and not search_result.get('error'): search_issue_ids = [ id for id, in SearchEngine.decode( search_result, ['issue_id'])] # FIXME: is search_issue_ids int[]? opts['issue_ids'] = search_issue_ids elif list_type == 'created_by': opts['creator'] = user elif list_type == 'assigned': opts['assignee'] = user # FIXME: update n_closed_issues & n_open_issues multi_dict = ProjectIssue.get_multi_by(**opts) issue_list = multi_dict['issues'] total_issues = multi_dict['total'] if user: if list_type == 'repo': n_assigned_issues = user.get_n_assigned_issues_by_project(project.id, state) # noqa n_created_issues = user.get_n_created_issues_by_project(project.id, state) # noqa elif list_type == 'created_by': n_assigned_issues = user.get_n_assigned_issues_by_project(project.id, state) # noqa n_created_issues = total_issues elif list_type == 'assigned': n_assigned_issues = total_issues n_created_issues = user.get_n_created_issues_by_project(project.id, state) # noqa elif list_type == 'search' and search_issue_ids: n_assigned_issues = ProjectIssue.get_n_by_issue_ids_and_assignee_id( # noqa search_issue_ids, state, user.name) n_created_issues = ProjectIssue.get_n_by_issue_ids_and_creator_id( # noqa search_issue_ids, state, user.name) n_pages = (total_issues - 1) / ISSUES_COUNT_PER_PAGE + 1 # tags 的选择只会改变选中的filter的显示issue数 if list_type in ('repo', 'search'): n_everyone_issues = total_issues else: n_everyone_issues = n_open_issues \ if state == "open" else n_closed_issues return st('issue/issues.html', **locals())
def index(request): if list_type == 'search': key_word = request.get_form_var('q', None) if not key_word: return self._index(request) milestone_number = request.get_form_var('milestone') state = request.get_form_var('state', 'open') page = request.get_form_var('page', 1) project_name = self.proj_name user = request.user project = self.project order = get_order_type( request, 'project_issues_order') # noqa 目前支持list_type = repo的sort_by n_open_issues = project.n_open_issues n_closed_issues = project.n_closed_issues n_everyone_issues = 0 n_assigned_issues = 0 n_created_issues = 0 n_pages = 0 selected_tag_names = request.get_form_var('tags', '') start = ISSUES_COUNT_PER_PAGE * (int(page) - 1) limit = ISSUES_COUNT_PER_PAGE is_closed_tab = None if state == "open" else True issue_list = [] total_issues = 0 opts = dict(project=project, state=state, start=start, limit=limit, order=order) if selected_tag_names: selected_tag_names = selected_tag_names.split(',') tags = filter(None, [ TagName.get_project_issue_tag(name, project) for name in selected_tag_names ]) opts['tags'] = tags show_tags = project.get_group_tags(selected_tag_names) if milestone_number: milestone = Milestone.get_by_project(project, number=milestone_number) opts['milestone'] = milestone # FIXME: why user or list_type ? if user or list_type in ('repo', 'search'): if list_type == 'search': # FIXME: search with assigned or creator search_result = IssueSearch.search_a_phrase( key_word, self.project.id, size=n_open_issues + n_closed_issues, state=state) or [] search_issue_ids = [] if search_result and not search_result.get('error'): search_issue_ids = [ id for id, in SearchEngine.decode( search_result, ['issue_id']) ] # FIXME: is search_issue_ids int[]? opts['issue_ids'] = search_issue_ids elif list_type == 'created_by': opts['creator'] = user elif list_type == 'assigned': opts['assignee'] = user # FIXME: update n_closed_issues & n_open_issues multi_dict = ProjectIssue.get_multi_by(**opts) issue_list = multi_dict['issues'] total_issues = multi_dict['total'] if user: if list_type == 'repo': n_assigned_issues = user.get_n_assigned_issues_by_project( project.id, state) # noqa n_created_issues = user.get_n_created_issues_by_project( project.id, state) # noqa elif list_type == 'created_by': n_assigned_issues = user.get_n_assigned_issues_by_project( project.id, state) # noqa n_created_issues = total_issues elif list_type == 'assigned': n_assigned_issues = total_issues n_created_issues = user.get_n_created_issues_by_project( project.id, state) # noqa elif list_type == 'search' and search_issue_ids: n_assigned_issues = ProjectIssue.get_n_by_issue_ids_and_assignee_id( # noqa search_issue_ids, state, user.name) n_created_issues = ProjectIssue.get_n_by_issue_ids_and_creator_id( # noqa search_issue_ids, state, user.name) n_pages = (total_issues - 1) / ISSUES_COUNT_PER_PAGE + 1 # tags 的选择只会改变选中的filter的显示issue数 if list_type in ('repo', 'search'): n_everyone_issues = total_issues else: n_everyone_issues = n_open_issues \ if state == "open" else n_closed_issues return st('issue/issues.html', **locals())