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

Commit

Permalink
Added tests about creation, edition and deletion of issues
Browse files Browse the repository at this point in the history
  • Loading branch information
bameda committed Jan 20, 2014
1 parent 7e70873 commit 2a126d0
Show file tree
Hide file tree
Showing 2 changed files with 223 additions and 1 deletion.
156 changes: 156 additions & 0 deletions tests/controllers/test_issues_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,159 @@ def test_issues_controller_reload():
project_detail_controller.handle(config.ProjectIssuesKeys.RELOAD)
assert executor.project_issues_stats.call_count == 1
assert executor.issues.call_count == 1

def test_issues_controller_show_the_new_issue_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.ProjectKeys.ISSUES)

assert not hasattr(project_detail_controller.view.issues, "issue_form")
project_detail_controller.handle(config.ProjectIssuesKeys.CREATE_ISSUE)
assert hasattr(project_detail_controller.view.issues, "issue_form")

def test_issues_controller_cancel_the_new_issue_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.ProjectKeys.ISSUES)
project_detail_controller.handle(config.ProjectIssuesKeys.CREATE_ISSUE)

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

def test_issues_controller_submit_new_issue_form_with_errors():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.issues.notifier = mock.Mock()
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectKeys.ISSUES)
project_detail_controller.handle(config.ProjectIssuesKeys.CREATE_ISSUE)
form = project_detail_controller.view.issues.issue_form

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

def test_issues_controller_submit_new_issue_form_successfully():
us_subject = "Create a new user story"
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.issues.notifier = mock.Mock()
executor = factories.patched_executor(create_issue_response=factories.future(
factories.successful_create_issue_response(us_subject)))
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectKeys.ISSUES)
project_detail_controller.handle(config.ProjectIssuesKeys.CREATE_ISSUE)
form = project_detail_controller.view.issues.issue_form
project_view.issues.notifier.reset_mock()

form._subject_edit.set_edit_text(us_subject)
signals.emit(form.save_button, "click")
assert project_view.issues.notifier.info_msg.call_count == 1
assert executor.create_issue.call_args.call_list()[0][0][0]["subject"] == us_subject
assert executor.create_issue.call_count == 1
assert executor.create_issue.return_value.result()["subject"] == us_subject

def test_issues_controller_show_the_edit_issue_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.ProjectKeys.ISSUES)

assert not hasattr(project_detail_controller.view.issues, "issue_form")
project_detail_controller.handle(config.ProjectIssuesKeys.EDIT_ISSUE)
assert hasattr(project_detail_controller.view.issues, "issue_form")
assert (project_detail_controller.view.issues.issue_form.issue ==
project_detail_controller.view.issues.issues.widget.get_focus().issue)

def test_issues_controller_cancel_the_edit_issue_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.ProjectKeys.ISSUES)
project_detail_controller.handle(config.ProjectIssuesKeys.EDIT_ISSUE)

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

def test_issues_controller_submit_the_edit_issue_form_with_errors():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.issues.notifier = mock.Mock()
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectKeys.ISSUES)
project_detail_controller.handle(config.ProjectIssuesKeys.EDIT_ISSUE)
form = project_detail_controller.view.issues.issue_form

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

def test_issues_controller_submit_edit_issue_form_successfully():
us_subject = "Update a user story"
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.issues.notifier = mock.Mock()
executor = factories.patched_executor(update_issue_response=factories.future(
factories.successful_update_issue_response(us_subject)))
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectKeys.ISSUES)
project_detail_controller.handle(config.ProjectIssuesKeys.EDIT_ISSUE)
form = project_detail_controller.view.issues.issue_form
project_view.issues.notifier.reset_mock()

form._subject_edit.set_edit_text(us_subject)

signals.emit(form.save_button, "click")
assert project_view.issues.notifier.info_msg.call_count == 1
assert (executor.update_issue.call_args.call_list()[0][0][0]["id"] == form.issue["id"])
assert executor.update_issue.call_args.call_list()[0][0][1]["subject"] == us_subject
assert executor.update_issue.call_count == 1
assert executor.update_issue.return_value.result()["subject"] == us_subject

def test_issues_controller_delete_issue_with_errors():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.issues.notifier = mock.Mock()
executor = factories.patched_executor(delete_issue_response=factories.future(None))
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectKeys.ISSUES)

project_detail_controller.handle(config.ProjectIssuesKeys.DELETE_ISSUE)
assert project_view.issues.notifier.error_msg.call_count == 1
assert (executor.delete_issue.call_args.call_list()[0][0][0]["id"] ==
project_detail_controller.issues.issues[0]["id"])

def test_issues_controller_delete_issue_with_success():
project = factories.project()
project_view = views.projects.ProjectDetailView(project)
project_view.issues.notifier = mock.Mock()
executor = factories.patched_executor()
_ = mock.Mock()
project_detail_controller = controllers.projects.ProjectDetailController(project_view, executor, _)
project_detail_controller.handle(config.ProjectKeys.ISSUES)
project_view.issues.notifier.reset_mock()

project_detail_controller.handle(config.ProjectIssuesKeys.DELETE_ISSUE)
assert project_view.issues.notifier.info_msg.call_count == 1
assert (executor.delete_issue.call_args.call_list()[0][0][0]["id"] ==
project_detail_controller.issues.issues[0]["id"])
68 changes: 67 additions & 1 deletion tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ def unassigned_user_stories():
def user_stories():
return json.loads(fixtures.USER_STORIES)


def successful_create_user_story_response(subject):
return {
"tags": [],
Expand Down Expand Up @@ -171,6 +170,67 @@ def successful_delete_task_response():
def issues():
return json.loads(fixtures.ISSUES)

def successful_create_issue_response(subject):
return {
"tags": [
"ratione",
"omnis",
"saepe",
"tempora",
"repellat"
],
"comment": "",
"is_closed": False,
"id": 1,
"ref": 2,
"owner": 2,
"status": 7,
"severity": 5,
"priority": 2,
"type": 2,
"milestone": None,
"project": 1,
"created_date": "2013-12-20T09:53:59.044Z",
"modified_date": "2013-12-20T09:53:59.609Z",
"finished_date": None,
"subject": subject,
"description": "Alias voluptatem nulla quo reiciendis dicta distinctio, quis vel facilis quae dolore rerum earum error nesciunt, ipsam itaque eius placeat doloribus voluptate sequi? Impedit iure adipisci et itaque debitis nihil vel ipsum esse ut perspiciatis. Facilis fuga exercitationem illo ipsam eveniet, tempora assumenda voluptate, tenetur saepe doloribus beatae neque quae quasi culpa reprehenderit et, totam temporibus deleniti consectetur rerum quis eaque commodi.",
"assigned_to": 1,
"watchers": []
}

def successful_update_issue_response(subject):
return {
"tags": [
"ratione",
"omnis",
"saepe",
"tempora",
"repellat"
],
"comment": "",
"is_closed": False,
"id": 1,
"ref": 2,
"owner": 2,
"status": 7,
"severity": 5,
"priority": 2,
"type": 2,
"milestone": None,
"project": 1,
"created_date": "2013-12-20T09:53:59.044Z",
"modified_date": "2013-12-20T09:53:59.609Z",
"finished_date": None,
"subject": subject,
"description": "Alias voluptatem nulla quo reiciendis dicta distinctio, quis vel facilis quae dolore rerum earum error nesciunt, ipsam itaque eius placeat doloribus voluptate sequi? Impedit iure adipisci et itaque debitis nihil vel ipsum esse ut perspiciatis. Facilis fuga exercitationem illo ipsam eveniet, tempora assumenda voluptate, tenetur saepe doloribus beatae neque quae quasi culpa reprehenderit et, totam temporibus deleniti consectetur rerum quis eaque commodi.",
"assigned_to": 1,
"watchers": []
}

def successful_delete_issue_response():
return True

# Wiki
def wiki_pages():
return json.loads(fixtures.WIKI_PAGES)
Expand Down Expand Up @@ -198,6 +258,9 @@ def patched_executor(login_response=future(successful_login_response("admin")),
delete_task_response=future(successful_delete_task_response()),
project_issues_stats=future(project_issues_stats()),
issues=future(issues()),
create_issue_response=future(successful_create_issue_response("Create issue")),
update_issue_response=future(successful_update_issue_response("Update issue")),
delete_issue_response=future(successful_delete_issue_response()),
wiki_pages=future(wiki_pages())):
executor = Executor(mock.Mock())

Expand All @@ -224,6 +287,9 @@ def patched_executor(login_response=future(successful_login_response("admin")),
executor.delete_task = mock.Mock(return_value=delete_task_response)

executor.issues = mock.Mock(return_value=issues)
executor.create_issue = mock.Mock(return_value=create_issue_response)
executor.update_issue = mock.Mock(return_value=update_issue_response)
executor.delete_issue = mock.Mock(return_value=delete_issue_response)

executor.wiki_pages = mock.Mock(return_value=wiki_pages)

Expand Down

0 comments on commit 2a126d0

Please sign in to comment.