You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/01/21 22:53:16 UTC
[11/16] git commit: [#4339] ticket:237 move ticket improvements
[#4339] ticket:237 move ticket improvements
* restrict user field values to project members when moving
* minor fixes and tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/f602a5cf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/f602a5cf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/f602a5cf
Branch: refs/heads/tv/5336
Commit: f602a5cff41d2be6452ff5c069db051fbeaafc09
Parents: 3eefd5d
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Dec 18 14:08:09 2012 +0000
Committer: Cory Johns <jo...@geek.net>
Committed: Fri Jan 18 21:53:18 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/model/ticket.py | 31 +++++++++---
.../forgetracker/tests/unit/test_ticket_model.py | 39 ++++++++++++++-
2 files changed, 62 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f602a5cf/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index b1919b6..b33cd45 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -552,16 +552,33 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
(cf['name'], cf['type'], cf['label'])
for cf in app.globals.custom_fields or []]
skipped_fields = []
+ user_fields = []
for cf in prior_cfs:
- if cf not in new_cfs:
+ if cf not in new_cfs: # can't convert
skipped_fields.append(cf)
-
+ elif cf[1] == 'user': # can convert and field type == user
+ user_fields.append(cf)
+
+ messages = []
+ for cf in skipped_fields:
+ name = cf[0]
+ messages.append('- **%s**: %s' % (name, self.custom_fields[name]))
+ for cf in user_fields:
+ name = cf[0]
+ username = self.custom_fields[name]
+ user = app_config.project.user_in_project(username)
+ if not user or user == User.anonymous():
+ messages.append('- **%s**: %s (user not in project)' % (name, username))
+ self.custom_fields[name] = ''
+ # special case: not custom user field (assigned_to_id)
+ user = self.assigned_to
+ if user and not app_config.project.user_in_project(user.username):
+ messages.append('- **assigned_to**: %s (user not in project)' % user.username)
+ self.assigned_to_id = None
message = 'Ticket moved from %s' % prior_url
- if skipped_fields:
- message += '\n\nCan\'t be converted:\n'
- for cf in skipped_fields:
- name = cf[0]
- message += '\n- **%s**: %s' % (name, self.custom_fields[name])
+ if messages:
+ message += '\n\nCan\'t be converted:\n\n'
+ message += '\n'.join(messages)
self.discussion_thread.post(text=message)
# need this to reset app_config RelationProperty on ticket to a new one
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f602a5cf/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
index 95c4d5e..b6afa91 100644
--- a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
+++ b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
@@ -7,7 +7,7 @@ from nose.tools import raises, assert_raises, assert_equal
from forgetracker.model import Ticket
from forgetracker.tests.unit import TrackerTestWithModel
-from allura.model import Feed, Post
+from allura.model import Feed, Post, User
from allura.lib import helpers as h
from allura.tests import decorators as td
@@ -141,6 +141,7 @@ class TestTicketModel(TrackerTestWithModel):
ticket = Ticket.new()
ticket.summary = 'test ticket'
ticket.description = 'test description'
+ ticket.assigned_to_id = User.by_username('test-user')._id
assert_equal(Ticket.query.find({'app_config_id': app1.config._id}).count(), 1)
assert_equal(Ticket.query.find({'app_config_id': app2.config._id}).count(), 0)
@@ -150,6 +151,7 @@ class TestTicketModel(TrackerTestWithModel):
assert_equal(Ticket.query.find({'app_config_id': app2.config._id}).count(), 1)
assert_equal(t.summary, 'test ticket')
assert_equal(t.description, 'test description')
+ assert_equal(t.assigned_to.username, 'test-user')
assert_equal(t.url(), '/p/test/bugs2/1/')
post = Post.query.find(dict(thread_id=ticket.discussion_thread._id)).first()
@@ -186,3 +188,38 @@ class TestTicketModel(TrackerTestWithModel):
message += '\n\nCan\'t be converted:\n'
message += '\n- **_test2**: test val 2'
assert_equal(post.text, message)
+
+ @td.with_tool('test', 'Tickets', 'bugs', username='test-user')
+ @td.with_tool('test', 'Tickets', 'bugs2', username='test-user')
+ def test_ticket_move_with_users_not_in_project(self):
+ app1 = c.project.app_instance('bugs')
+ app2 = c.project.app_instance('bugs2')
+ app1.globals.custom_fields.extend([
+ {'name': '_user_field', 'type': 'user', 'label': 'User field'},
+ {'name': '_user_field_2', 'type': 'user', 'label': 'User field 2'}])
+ app2.globals.custom_fields.extend([
+ {'name': '_user_field', 'type': 'user', 'label': 'User field'},
+ {'name': '_user_field_2', 'type': 'user', 'label': 'User field 2'}])
+ ThreadLocalORMSession.flush_all()
+ ThreadLocalORMSession.close_all()
+ from allura.websetup import bootstrap
+ bootstrap.create_user('test-user-0')
+ with h.push_context(c.project._id, app_config_id=app1.config._id):
+ ticket = Ticket.new()
+ ticket.summary = 'test ticket'
+ ticket.description = 'test description'
+ ticket.custom_fields['_user_field'] = 'test-user' # in project
+ ticket.custom_fields['_user_field_2'] = 'test-user-0' # not in project
+ ticket.assigned_to_id = User.by_username('test-user-0')._id # not in project
+
+ t = ticket.move(app2.config)
+ assert_equal(t.assigned_to_id, None)
+ assert_equal(t.custom_fields['_user_field'], 'test-user')
+ assert_equal(t.custom_fields['_user_field_2'], '')
+ post = Post.query.find(dict(thread_id=ticket.discussion_thread._id)).first()
+ assert post is not None, 'No comment about ticket moving'
+ message = 'Ticket moved from /p/test/bugs/1/'
+ message += '\n\nCan\'t be converted:\n'
+ message += '\n- **_user_field_2**: test-user-0 (user not in project)'
+ message += '\n- **assigned_to**: test-user-0 (user not in project)'
+ assert_equal(post.text, message)