# -*- coding: utf-8 -*- """ (c) 2015-2017 - Copyright Red Hat Inc Authors: Pierre-Yves Chibon """ from __future__ import unicode_literals, absolute_import import unittest import sys import os from mock import patch sys.path.insert( 0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") ) import pagure.lib.model import pagure.lib.query import tests class PagureLibModeltests(tests.Modeltests): """ Tests for pagure.lib.model """ def test_user__repr__(self): """ Test the User.__repr__ function of pagure.lib.model. """ item = pagure.lib.query.search_user(self.session, email="foo@bar.com") self.assertEqual(str(item), "User: 2 - name foo") self.assertEqual("foo", item.user) self.assertEqual("foo", item.username) self.assertEqual([], item.groups) @patch("pagure.lib.git.update_git") @patch("pagure.lib.notify.send_email") def test_issue__repr__(self, p_send_email, p_ugt): """ Test the Issue.__repr__ function of pagure.lib.model. """ p_send_email.return_value = True p_ugt.return_value = True tests.create_projects(self.session) repo = pagure.lib.query.get_authorized_project(self.session, "test") # Create an issue msg = pagure.lib.query.new_issue( session=self.session, repo=repo, title="Test issue", content="We should work on this", user="pingou", ) self.assertEqual(msg.title, "Test issue") issues = pagure.lib.query.search_issues(self.session, repo) self.assertEqual(len(issues), 1) self.assertEqual( str(issues[0]), "Issue(1, project:test, user:pingou, title:Test issue)", ) @patch("pagure.lib.git.update_git") @patch("pagure.lib.notify.send_email") def test_pullrequest__repr__(self, p_send_email, p_ugt): """ Test the PullRequest.__repr__ function of pagure.lib.model. """ p_send_email.return_value = True p_ugt.return_value = True tests.create_projects(self.session) # Create a forked repo item = pagure.lib.model.Project( user_id=1, # pingou name="test", description="test project #1", is_fork=True, parent_id=1, hook_token="aaabbbyyy", ) self.session.commit() self.session.add(item) repo = pagure.lib.query.get_authorized_project(self.session, "test") forked_repo = pagure.lib.query.get_authorized_project( self.session, "test", user="pingou" ) # Create an pull-request req = pagure.lib.query.new_pull_request( session=self.session, repo_from=forked_repo, branch_from="master", repo_to=repo, branch_to="master", title="test pull-request", user="pingou", ) self.assertEqual(req.id, 1) self.assertEqual(req.title, "test pull-request") self.assertEqual( str(req), "PullRequest(1, project:test, user:pingou, " "title:test pull-request)", ) request = pagure.lib.query.search_pull_requests( self.session, requestid=1 ) self.assertEqual( str(request), "PullRequest(1, project:test, user:pingou, " "title:test pull-request)", ) def test_paguregroup__repr__(self): """ Test the PagureGroup.__repr__ function of pagure.lib.model. """ item = pagure.lib.model.PagureGroup( group_name="admin", display_name="admin group", description="the local admin group", user_id=1, ) self.session.add(item) self.session.commit() self.assertEqual(str(item), "Group: 1 - name admin") def test_tagissue__repr__(self): """ Test the TagIssue.__repr__ function of pagure.lib.model. """ self.test_issue__repr__() repo = pagure.lib.query.get_authorized_project(self.session, "test") issues = pagure.lib.query.search_issues(self.session, repo) self.assertEqual(len(issues), 1) item = pagure.lib.model.Tag(tag="foo") self.session.add(item) self.session.commit() item = pagure.lib.model.TagIssue(issue_uid=issues[0].uid, tag="foo") self.session.add(item) self.session.commit() self.assertEqual(str(item), "TagIssue(issue:1, tag:foo)") def test_tagissuecolor__repr__(self): """ Test the TagIssue.__repr__ function of pagure.lib.model. """ self.test_issue__repr__() repo = pagure.lib.query.get_authorized_project(self.session, "test") issues = pagure.lib.query.search_issues(self.session, repo) self.assertEqual(len(issues), 1) item = pagure.lib.model.TagColored( tag="foo", tag_description="bar", tag_color="DeepSkyBlue", project_id=repo.id, ) self.session.add(item) self.session.commit() item = pagure.lib.model.TagIssueColored( issue_uid=issues[0].uid, tag_id=item.id ) self.session.add(item) self.session.commit() self.assertEqual( str(item), "TagIssueColored(issue:1, tag:foo, project:test)" ) def test_group_project_ordering(self): """ Test the ordering of project.groups. """ # Create three projects item = pagure.lib.model.Project( user_id=1, # pingou name="aaa", description="Project aaa", hook_token="aaabbbccc", ) item.close_status = ["Invalid", "Fixed", "Duplicate"] self.session.add(item) item = pagure.lib.model.Project( user_id=1, # pingou name="KKK", description="project KKK", hook_token="aaabbbddd", ) item.close_status = ["Invalid", "Fixed", "Duplicate"] self.session.add(item) item = pagure.lib.model.Project( user_id=1, # pingou name="zzz", description="Namespaced project zzz", hook_token="aaabbbeee", namespace="somenamespace", ) item.close_status = ["Invalid", "Fixed", "Duplicate"] self.session.add(item) # Create a group group = pagure.lib.model.PagureGroup( group_name="testgrp", display_name="Test group", description=None, group_type="user", user_id=1, # pingou ) item.close_status = ["Invalid", "Fixed", "Duplicate"] self.session.add(group) self.session.commit() # Add projects to group for ns, reponame in [ (None, "aaa"), (None, "KKK"), ("somenamespace", "zzz"), ]: repo = pagure.lib.query.get_authorized_project( self.session, reponame, namespace=ns ) msg = pagure.lib.query.add_group_to_project( self.session, project=repo, new_group="testgrp", user="pingou", create=False, is_admin=False, ) self.session.commit() self.assertEqual(msg, "Group added") # Check the ordering group = pagure.lib.query.search_groups( self.session, group_name="testgrp" ) # Default PostgreSQL order order = ["aaa", "KKK", "somenamespace/zzz"] # Odd, SQLite order if str(self.session.bind.engine.url).startswith("sqlite:"): order = ["somenamespace/zzz", "aaa", "KKK"] self.assertEqual([p.fullname for p in group.projects], order) if __name__ == "__main__": unittest.main(verbosity=2)