Skip to content
This repository has been archived by the owner on Mar 1, 2021. It is now read-only.

Commit

Permalink
Finesh the functionality to create USs in bulk
Browse files Browse the repository at this point in the history
  • Loading branch information
bameda committed Mar 2, 2014
1 parent d485fc7 commit e01281b
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 20 deletions.
36 changes: 17 additions & 19 deletions taiga_ncurses/controllers/backlog.py
Expand Up @@ -236,32 +236,30 @@ def handler_edit_user_story_response(self, future):
def handler_create_user_stories_in_bulk_request(self):
data = self.view.get_user_stories_in_bulk_form_data()

if not data.get("subjects", None):
if not data.get("bulkStories", None):
self.view.notifier.error_msg("Subjects are required")
else:
pass
#TODO
# us_post_f = self.executor.create_user_stories_in_bulk(data)
# us_post_f.add_done_callback(self.handler_create_user_stories_in_bulk_response)
us_post_f = self.executor.create_user_stories_in_bulk(data)
us_post_f.add_done_callback(self.handler_create_user_stories_in_bulk_response)

#def handler_create_user_stories_in_bulk_response(self, future):
# response = future.result()
def handler_create_user_stories_in_bulk_response(self, future):
response = future.result()

# if response is None:
# self.view.notifier.error_msg("Create error")
# else:
# self.view.notifier.info_msg("Create successful!")
# self.view.close_user_story_form()
if response is None:
self.view.notifier.error_msg("Create error")
else:
self.view.notifier.info_msg("Create successful!")
self.view.close_user_stories_in_bulk_form()

# project_stats_f = self.executor.project_stats(self.view.project)
# project_stats_f.add_done_callback(self.handle_project_stats)
project_stats_f = self.executor.project_stats(self.view.project)
project_stats_f.add_done_callback(self.handle_project_stats)

# user_stories_f = self.executor.unassigned_user_stories(self.view.project)
# user_stories_f.add_done_callback(self.handle_user_stories)
user_stories_f = self.executor.unassigned_user_stories(self.view.project)
user_stories_f.add_done_callback(self.handle_user_stories)

# futures = (project_stats_f, user_stories_f)
# futures_completed_f = self.executor.pool.submit(lambda : wait(futures, 10))
# futures_completed_f.add_done_callback(self.when_backlog_info_fetched)
futures = (project_stats_f, user_stories_f)
futures_completed_f = self.executor.pool.submit(lambda : wait(futures, 10))
futures_completed_f.add_done_callback(self.when_backlog_info_fetched)

def handler_delete_user_story_response(self, future):
response = future.result()
Expand Down
3 changes: 3 additions & 0 deletions taiga_ncurses/executor.py
Expand Up @@ -45,6 +45,9 @@ def milestone_stats(self, milestone, project):
def create_user_story(self, data):
return self.pool.submit(self.client.create_user_story, data_dict=data)

def create_user_stories_in_bulk(self, data):
return self.pool.submit(self.client.create_user_stories_in_bulk, data_dict=data)

def update_user_story(self, user_story, data):
return self.pool.submit(self.client.update_user_story, id=user_story["id"], data_dict=data)

Expand Down
3 changes: 2 additions & 1 deletion taiga_ncurses/ui/views/backlog.py
Expand Up @@ -91,7 +91,8 @@ def get_user_stories_in_bulk_form_data(self):
data = {}
if hasattr(self, "user_stories_in_bulk_form"):
data.update({
"subjects": self.user_stories_in_bulk_form.subjects,
"bulkStories": self.user_stories_in_bulk_form.subjects,
"projectId": self.project["id"],
})
return data

Expand Down
58 changes: 58 additions & 0 deletions tests/controllers/test_backlog_controller.py
Expand Up @@ -340,3 +340,61 @@ def test_backlog_controller_change_user_story_points():
assert project_view.backlog.notifier.info_msg.call_count == 1
assert list(executor.update_user_story.call_args.call_list()[0][0][1]["points"].values())[0] == item.value
assert executor.update_user_story.call_count == 1

# BULK

def test_backlog_controller_show_the_new_user_stories_in_bulk_form():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)

assert not hasattr(project_detail_controller.view.backlog, "user_stories_in_bulk_form")
project_detail_controller.handle(config.ProjectBacklogKeys.CREATE_USER_STORIES_IN_BULK)
assert hasattr(project_detail_controller.view.backlog, "user_stories_in_bulk_form")

def test_backlog_controller_cancel_the_new_user_stories_in_bulk_form():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectBacklogKeys.CREATE_USER_STORIES_IN_BULK)

assert hasattr(project_detail_controller.view.backlog, "user_stories_in_bulk_form")
form = project_detail_controller.view.backlog.user_stories_in_bulk_form
signals.emit(form.cancel_button, "click")
assert not hasattr(project_detail_controller.view.backlog, "user_stories_in_bulk_form")

def test_backlog_controller_submit_new_user_stories_in_bulk_form_with_errors():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.backlog.notifier = mock.Mock()
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectBacklogKeys.CREATE_USER_STORIES_IN_BULK)
form = project_detail_controller.view.backlog.user_stories_in_bulk_form

signals.emit(form.save_button, "click")
assert project_view.backlog.notifier.error_msg.call_count == 1

def test_backlog_controller_submit_new_user_stories_in_bulk_form_successfully():
us_subjects = "Create a new user story 1\nCreate a new user story 2"
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.backlog.notifier = mock.Mock()
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectBacklogKeys.CREATE_USER_STORIES_IN_BULK)
form = project_detail_controller.view.backlog.user_stories_in_bulk_form
project_view.backlog.notifier.reset_mock()

form._subjects_edit.set_edit_text(us_subjects)
signals.emit(form.save_button, "click")
assert project_view.backlog.notifier.info_msg.call_count == 1
assert executor.create_user_stories_in_bulk.call_args.call_list()[0][0][0]["bulkStories"] == us_subjects
assert executor.create_user_stories_in_bulk.call_count == 1
assert executor.create_user_stories_in_bulk.return_value.result()
6 changes: 6 additions & 0 deletions tests/factories.py
Expand Up @@ -111,6 +111,9 @@ def successful_update_user_story_response(subject):
"watchers": []
}

def successful_create_user_stories_in_bulk_response():
return True

def successful_update_user_stories_order_response():
return True

Expand Down Expand Up @@ -250,6 +253,8 @@ def patched_executor(login_response=future(successful_login_response("admin")),
user_stories=future(user_stories()),
create_user_story_response=future(successful_create_user_story_response("Create us")),
update_user_story_response=future(successful_update_user_story_response("Update us")),
create_user_stories_in_bulk_response=future(
successful_create_user_stories_in_bulk_response()),
update_user_stories_order_response=future(successful_update_user_stories_order_response()),
delete_user_story_response=future(successful_delete_user_story_response()),
tasks=future(tasks()),
Expand All @@ -275,6 +280,7 @@ def patched_executor(login_response=future(successful_login_response("admin")),
executor.unassigned_user_stories = mock.Mock(return_value=unassigned_user_stories)
executor.create_user_story = mock.Mock(return_value=create_user_story_response)
executor.update_user_story = mock.Mock(return_value=update_user_story_response)
executor.create_user_stories_in_bulk = mock.Mock(return_value=create_user_stories_in_bulk_response)
executor.update_user_stories_order = mock.Mock(return_value=update_user_stories_order_response)
executor.delete_user_story = mock.Mock(return_value=delete_user_story_response)

Expand Down
6 changes: 6 additions & 0 deletions tests/test_executor.py
Expand Up @@ -68,6 +68,12 @@ def test_delete_user_story_method_returns_a_future():
f = e.delete_user_story({"id": 123123})
assert isinstance(f, Future)

def test_create_user_stories_in_bulk_method_returns_a_future():
client = mock.Mock()
e = executor.Executor(client)
f = e.create_user_stories_in_bulk({"ulkStories": "A\nB\nC", "projectId": 1})
assert isinstance(f, Future)

def test_update_user_stories_order_method_returns_a_future():
client = mock.Mock()
e = executor.Executor(client)
Expand Down

0 comments on commit e01281b

Please sign in to comment.