# -*- coding: utf-8 -*- """ (c) 2017 - Copyright Red Hat Inc Authors: Pierre-Yves Chibon """ from __future__ import unicode_literals, absolute_import import json import unittest import sys import os import uuid sys.path.insert( 0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") ) import pagure.lib.model as model import pagure.lib.query import tests class DeleteProjectTests(tests.Modeltests): """ Tests for flask issues controller of pagure """ def test_delete_project_with_group(self): """ Test the model when we delete a project with a group. """ # Create a project item = model.Project( user_id=1, # pingou name="test", description="test project #1", hook_token="aaabbbiii", ) self.session.add(item) self.session.commit() # Create a group grp = model.PagureGroup( group_name="testgrp", display_name="Test group", description=None, group_type="user", user_id=1, # pingou ) self.session.add(grp) self.session.commit() # Add group to project project_group = model.ProjectGroup( project_id=1, group_id=1, access="admin" ) self.session.add(project_group) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 1) self.assertEqual(self.session.query(model.ProjectGroup).count(), 1) project = ( self.session.query(model.Project) .filter(model.Project.id == 1) .one() ) self.session.delete(project) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 0) self.assertEqual(self.session.query(model.ProjectGroup).count(), 0) def test_delete_project_with_user(self): """ Test the model when we delete a project with users. """ # Create a project item = model.Project( user_id=1, # pingou name="test", description="test project #1", hook_token="aaabbbiii", ) self.session.add(item) self.session.commit() # Add user #2 to project project_user = model.ProjectUser( project_id=1, user_id=2, access="admin" ) self.session.add(project_user) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 1) self.assertEqual(self.session.query(model.ProjectUser).count(), 1) self.assertEqual(self.session.query(model.User).count(), 2) project = ( self.session.query(model.Project) .filter(model.Project.id == 1) .one() ) self.session.delete(project) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 0) self.assertEqual(self.session.query(model.ProjectUser).count(), 0) self.assertEqual(self.session.query(model.User).count(), 2) def test_delete_project_with_coloredtags(self): """ Test the model when we delete a project with Colored tags. """ # Create a project item = model.Project( user_id=1, # pingou name="test", description="test project #1", hook_token="aaabbbiii", ) self.session.add(item) self.session.commit() # Create two ColoredTags tagobj = model.TagColored(tag="Tag#1", project_id=1) self.session.add(tagobj) self.session.flush() tagobj = model.TagColored(tag="Tag#2", project_id=1) self.session.add(tagobj) self.session.flush() self.assertEqual(self.session.query(model.Project).count(), 1) self.assertEqual(self.session.query(model.TagColored).count(), 2) project = ( self.session.query(model.Project) .filter(model.Project.id == 1) .one() ) self.session.delete(project) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 0) self.assertEqual(self.session.query(model.TagColored).count(), 0) def test_delete_project_with_coloredtags_and_issues(self): """ Test the model when we delete a project with Colored tags and issues. """ # Create a project item = model.Project( user_id=1, # pingou name="test", description="test project #1", hook_token="aaabbbiii", ) self.session.add(item) self.session.commit() # Create two ColoredTags tagobj = model.TagColored(tag="Tag#1", project_id=1) self.session.add(tagobj) self.session.flush() tagobj = model.TagColored(tag="Tag#2", project_id=1) self.session.add(tagobj) self.session.flush() # Create issues issue = model.Issue( id=pagure.lib.query.get_next_id(self.session, 1), project_id=1, title="Issue #1", content="Description #1", user_id=1, uid=uuid.uuid4().hex, private=False, ) self.session.add(issue) self.session.commit() issue = model.Issue( id=pagure.lib.query.get_next_id(self.session, 1), project_id=1, title="Issue #2", content="Description #2", user_id=1, uid=uuid.uuid4().hex, private=False, ) self.session.add(issue) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 1) self.assertEqual(self.session.query(model.TagColored).count(), 2) self.assertEqual(self.session.query(model.Issue).count(), 2) project = ( self.session.query(model.Project) .filter(model.Project.id == 1) .one() ) self.session.delete(project) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 0) self.assertEqual(self.session.query(model.TagColored).count(), 0) self.assertEqual(self.session.query(model.Issue).count(), 0) def test_delete_project_with_coloredtags_and_tagged_issues(self): """ Test the model when we delete a project with Colored tags and tagged issues. """ # Create a project item = model.Project( user_id=1, # pingou name="test", description="test project #1", hook_token="aaabbbiii", ) self.session.add(item) self.session.commit() # Create two ColoredTags tagobj = model.TagColored(tag="Tag#1", project_id=1) self.session.add(tagobj) self.session.flush() tagobj = model.TagColored(tag="Tag#2", project_id=1) self.session.add(tagobj) self.session.flush() # Create issues issue = model.Issue( id=pagure.lib.query.get_next_id(self.session, 1), project_id=1, title="Issue #1", content="Description #1", user_id=1, uid="Issue#1", private=False, ) self.session.add(issue) self.session.commit() issue = model.Issue( id=pagure.lib.query.get_next_id(self.session, 1), project_id=1, title="Issue #2", content="Description #2", user_id=1, uid="Issue#2", private=False, ) self.session.add(issue) self.session.commit() # Tag the issue tagissue = model.TagIssueColored(issue_uid="Issue#1", tag_id=1) self.session.add(tagissue) self.session.commit() tagissue = model.TagIssueColored(issue_uid="Issue#2", tag_id=2) self.session.add(tagissue) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 1) self.assertEqual(self.session.query(model.TagColored).count(), 2) self.assertEqual(self.session.query(model.Issue).count(), 2) project = ( self.session.query(model.Project) .filter(model.Project.id == 1) .one() ) self.session.delete(project) self.session.commit() self.assertEqual(self.session.query(model.Project).count(), 0) self.assertEqual(self.session.query(model.TagColored).count(), 0) self.assertEqual(self.session.query(model.Issue).count(), 0) if __name__ == "__main__": unittest.main(verbosity=2)