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 upgrade(): """ Alter the DB schema for the changes related to colored tags. """ engine = op.get_bind() Session = sa.orm.scoped_session(sa.orm.sessionmaker()) Session.configure(bind=engine) session = Session() projects = collections.defaultdict(list) for issue in session.query(model.Issue).all(): for issuetag in issue.old_tags: tag = issuetag.tag # Add the tag to the project if it isn't already there if tag not in projects[issue.project.id]: tagobj = model.TagColored( tag=tag, project_id=issue.project.id) session.add(tagobj) session.flush() projects[issue.project.id].append(tag) else: tagobj = session.query( model.TagColored ).filter( model.TagColored.tag == tag ).filter( model.TagColored.project_id == issue.project.id ).first() # Link the tag to the ticket as it was tagissueobj = model.TagIssueColored( tag_id=tagobj.id, issue_uid=issue.uid, date_created=tagobj.date_created, ) session.add(tagissueobj) session.flush() session.commit()
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)