# -*- coding: utf-8 -*-
"""
(c) 2018 - Copyright Red Hat Inc
Authors:
Pierre-Yves Chibon <pingou@pingoured.fr>
"""
from __future__ import unicode_literals, absolute_import
import sys
import unittest
import os
from mock import ANY, patch, MagicMock
sys.path.insert(
0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
)
import pagure.lib.query
import tests
class PagureFlaskRepoMilestonestests(tests.Modeltests):
""" Tests for milestones in pagure """
@patch("pagure.lib.notify.send_email", MagicMock(return_value=True))
def setUp(self):
""" Set up the environnment, ran before every tests. """
super(PagureFlaskRepoMilestonestests, self).setUp()
tests.create_projects(self.session)
tests.create_projects_git(os.path.join(self.path, "repos"))
repo = pagure.lib.query.get_authorized_project(self.session, "test")
msg = pagure.lib.query.new_issue(
session=self.session,
repo=repo,
title="Test issue #1",
content="We should work on this for the second time",
user="foo",
status="Open",
)
self.session.commit()
self.assertEqual(msg.title, "Test issue #1")
@patch(
"pagure.decorators.admin_session_timedout",
MagicMock(return_value=False),
)
def test_milestones_settings_empty(self):
""" Test the settings page when no milestones are set. """
repo = pagure.lib.query.get_authorized_project(self.session, "test")
self.assertEqual(repo.milestones, {})
user = tests.FakeUser(username="pingou")
with tests.user_set(self.app.application, user):
output = self.app.get("/test/settings")
self.assertEqual(output.status_code, 200)
self.assertIn(
"<title>Settings - test - Pagure</title>",
output.get_data(as_text=True),
)
# Check that the milestones have their empty fields
self.assertIn(
"""<div id="milestones">
<div class="row p-t-1 milestone" id="milestone_1">
<input type="hidden" name="milestones" value="1">
<div class="col-sm-4 p-r-0">
<input type="text" name="milestone_1_name"
value="" size="3" class="form-control"/>
</div>
<div class="col-sm-4 p-r-0">
<input type="text" name="milestone_1_date"
value="" class="form-control"/>
</div>
<div class="col-sm-2 p-r-0" >
<span class="fa fa-long-arrow-up milestone_order_up"
data-stone="1"></span>
<span class="fa fa-long-arrow-down milestone_order_bottom"
data-stone="1"></span>
</div>
<div class="col-sm-1 p-r-0" >
<input type="checkbox" name="milestone_1_active" />
</div>
</div>""",
output.get_data(as_text=True),
)
@patch(
"pagure.decorators.admin_session_timedout",
MagicMock(return_value=False),
)
def test_setting_retrieving_milestones(self):
""" Test setting and retrieving milestones off a project. """
repo = pagure.lib.query.get_authorized_project(self.session, "test")
milestones = {
"1.0": None,
"1.1": None,
"1.2": "2018-12-31",
"2.0": "2019",
"3.0": "future",
"4.0": None,
}
repo.milestones = milestones
self.session.add(repo)
self.session.commit()
self.assertEqual(
repo.milestones,
{
"1.0": {"active": True, "date": None},
"1.1": {"active": True, "date": None},
"1.2": {"active": True, "date": "2018-12-31"},
"2.0": {"active": True, "date": "2019"},
"3.0": {"active": True, "date": "future"},
"4.0": {"active": True, "date": None},
},
)
@patch(
"pagure.decorators.admin_session_timedout",
MagicMock(return_value=False),
)
def test_issue_page_milestone_actives(self):
""" Test viewing tickets on a project having milestones, all active.
"""
repo = pagure.lib.query.get_authorized_project(self.session, "test")
milestones = {"1.0": None, "2.0": "2019", "3.0": "future"}
milestones_keys = ["1.0", "3.0", "2.0"]
repo.milestones = milestones
repo.milestones_keys = milestones_keys
self.session.add(repo)
self.session.commit()
user = tests.FakeUser(username="pingou")
with tests.user_set(self.app.application, user):
output = self.app.get("/test/issue/1")
self.assertEqual(output.status_code, 200)
self.assertIn(
'<select class="form-control c-select" id="milestone" name="milestone">'
'<option selected value=""></option>'
'<option value="1.0">1.0</option>'
'<option value="3.0">3.0</option>'
'<option value="2.0">2.0</option>'
"</select>",
output.get_data(as_text=True),
)
@patch(
"pagure.decorators.admin_session_timedout",
MagicMock(return_value=False),
)
def test_issue_page_milestone_not_allactives(self):
""" Test viewing tickets on a project having milestones, not all
being active.
"""
repo = pagure.lib.query.get_authorized_project(self.session, "test")
milestones = {
"1.0": {"date": None, "active": False},
"2.0": {"date": "2018-01-01", "active": False},
"3.0": {"date": "2025-01-01", "active": True},
"4.0": {"date": "future", "active": True},
}
milestones_keys = ["1.0", "2.0", "3.0", "4.0"]
repo.milestones = milestones
repo.milestones_keys = milestones_keys
self.session.add(repo)
self.session.commit()
user = tests.FakeUser(username="pingou")
with tests.user_set(self.app.application, user):
output = self.app.get("/test/issue/1")
self.assertEqual(output.status_code, 200)
self.assertIn(
'<select class="form-control c-select" id="milestone" name="milestone">'
'<option selected value=""></option>'
'<option value="3.0">3.0</option>'
'<option value="4.0">4.0</option>'
"</select>",
output.get_data(as_text=True),
)
if __name__ == "__main__":
unittest.main(verbosity=2)