def test_post_send_recovery_ok(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) msg = u"I need to see Star Wars, because I'm a really huge fan !!!" with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '12/11/2015 - 12/11/2015', 'type': '4', 'breakdown': 'FULL', 'exception_text': msg, }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] self.assertEqual(last_req.type, u'Récupération') self.assertEqual(last_req.message, msg) self.delete_last_req(last_req)
def test_post_send_rtt_usage_empty_ok(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) def mock_get_rtt_usage(self, session): """ Get rrt usage for a user """ return orig_get_rtt_usage = User.get_rtt_usage User.get_rtt_usage = mock_get_rtt_usage user = User.by_login(self.session, u'janedoe') rtt_data = user.get_rtt_usage(self.session) self.assertIsNone(rtt_data) view = Send(self.create_request({ 'days': 1, 'date_from': '05/05/2015 - 05/05/2015', 'type': '2', 'breakdown': 'AM', }))() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) User.get_rtt_usage = orig_get_rtt_usage
def test_post_send_rtt_usage_not_enough_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with patch('pyvac.models.User.pool', new_callable=PropertyMock) as mock_foo: mocked_pool = mock_pool(0.5, datetime(2014, 1, 1), datetime(2014, 12, 31)) mock_foo.return_value = {'RTT': mocked_pool} user = User.by_login(self.session, u'janedoe') rtt_pool = user.pool.get('RTT') self.assertTrue(rtt_pool) request = self.create_request({'days': 1, 'date_from': '05/05/2015 - 05/05/2015', # noqa 'type': '2', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) # no new requests were made self.assertEqual(Request.find(self.session, count=True), total_req) expected = ['error;You only have 0.5 RTT to use.'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_rtt_year_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with patch('pyvac.models.User.pool', new_callable=PropertyMock) as mock_foo: mocked_pool = mock_pool(10, datetime(2015, 1, 1), datetime(2015, 12, 31)) mock_foo.return_value = {'RTT': mocked_pool} user = User.by_login(self.session, u'janedoe') rtt_pool = user.pool.get('RTT') self.assertTrue(rtt_pool) request = self.create_request({ 'days': 1, 'date_from': '06/05/2016 - 06/05/2016', 'type': '2', 'breakdown': 'AM', }) view = Send(request)() self.assertIsRedirect(view) # no new requests were made self.assertEqual(Request.find(self.session, count=True), total_req) expected = ['error;RTT can only be used between 01/01/2015 and 31/12/2015'] # noqa self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_rtt_usage_not_enough_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) def mock_get_rtt_usage(self, session): """ Get rrt usage for a user """ return {'allowed': 10, 'left': 0.5, 'state': 'error', 'taken': 9.5, 'year': 2014} orig_get_rtt_usage = User.get_rtt_usage User.get_rtt_usage = mock_get_rtt_usage user = User.by_login(self.session, u'janedoe') rtt_data = user.get_rtt_usage(self.session) self.assertTrue(rtt_data) request = self.create_request({'days': 1, 'date_from': '05/05/2015 - 05/05/2015', 'type': '2', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) # no new requests were made self.assertEqual(Request.find(self.session, count=True), total_req) expected = ['error;You only have 0.5 RTT to use.'] self.assertEqual(request.session.pop_flash(), expected) User.get_rtt_usage = orig_get_rtt_usage
def test_post_send_exception_reason_length_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '12/11/2015 - 12/11/2015', 'type': '6', 'breakdown': 'FULL', 'exception_text': "I need to see Star Wars, I'm a huge fan" "please, please, please, please, please, " "please, please, please, please, please, " "please, please, please, please, please, " "please, please, please, please, please, " "please, please, please, please, please, " "please, please, please, please, please, ", }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req) expected = [u'error;Exceptionnel reason must not exceed 140 ' 'characters'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_rtt_holiday_ok(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) janedoe = User.by_login(self.session, u'janedoe') old_created_at = janedoe.created_at janedoe.created_at = janedoe.created_at.replace(month=1) janedoe.get_rtt_usage(self.session) with freeze_time('2016-12-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 5, 'date_from': '11/07/2016 - 15/07/2016', 'type': '2', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] self.assertEqual(last_req.status, u'PENDING') self.assertEqual(last_req.days, 4.0) janedoe.created_at = old_created_at self.delete_last_req(last_req)
def test_post_send_wrong_date_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) view = Send(self.create_request({'date_from': 'foo'}))() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req)
def test_post_send_half_day_ok(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) view = Send(self.create_request({ 'days': 0.5, 'date_from': '05/05/2015 - 05/05/2015', 'type': '1', 'breakdown': 'AM', }))() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1)
def test_post_send_cp_lu_half_ok(self): self.config.testing_securitypolicy(userid=u'sarah.doe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) request = self.create_request({ 'days': 0.5, 'date_from': '17/10/2016 - 17/10/2016', 'type': '1', 'breakdown': 'AM', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] self.assertEqual(last_req.days, 4.0)
def test_post_send_vacation_type_visibility_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) request = self.create_request({'days': 1, 'date_from': '05/05/2015 - 05/05/2015', 'type': '5', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) # no new requests were made self.assertEqual(Request.find(self.session, count=True), total_req) expected = [u'error;You are not allowed to use type: Maladie'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_vacation_type_visibility_ok(self): self.config.testing_securitypolicy(userid=u'admin', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) request = self.create_request({'days': 1, 'date_from': '05/05/2015 - 05/05/2015', 'type': '5', 'breakdown': 'FULL', 'sudo_user': -1, }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] self.assertEqual(last_req.type, u'Maladie') self.delete_last_req(last_req)
def test_post_send_half_day_other_half_ok(self): self.config.testing_securitypolicy(userid=u'jdoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2011-07-14', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 0.5, 'date_from': '24/08/2011 - 24/08/2011', 'type': '1', 'breakdown': 'PM', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1)
def test_post_send_rtt_ok(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '05/05/2015 - 05/05/2015', 'type': '2', 'breakdown': 'AM', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1)
def test_post_send_sudo_other_ok(self): self.config.testing_securitypolicy(userid='admin', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) view = Send(self.create_request({ 'days': 4, 'date_from': '05/05/2015 - 10/05/2015', 'type': '1', 'breakdown': 'FULL', 'sudo_user': '******', }))() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] target_user = User.by_login(self.session, 'manager1') self.assertEqual(last_req.user_id, target_user.id) self.assertEqual(last_req.status, 'APPROVED_ADMIN') self.assertTrue(last_req.notified) self.delete_last_req(last_req)
def test_post_send_cp_lu_half_ok(self): self.config.testing_securitypolicy(userid=u'sarah.doe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with patch('pyvac.models.User.arrival_date', new_callable=PropertyMock) as mock_foo: mock_foo.return_value = datetime.now() - relativedelta(months=5) # noqa request = self.create_request({ 'days': 0.5, 'date_from': '17/10/2016 - 17/10/2016', 'type': '1', 'breakdown': 'AM', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] self.assertEqual(last_req.days, 4.0)
def test_post_send_half_day_ko(self): self.config.testing_securitypolicy(userid=u'jdoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2011-07-14', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 0.5, 'date_from': '24/08/2011 - 24/08/2011', 'type': '1', 'breakdown': 'AM', }) view = Send(request)() self.assertIsRedirect(view) expected = ['error;Invalid period: days already requested.'] self.assertEqual(request.session.pop_flash(), expected) self.assertEqual(Request.find(self.session, count=True), total_req)
def test_post_send_sudo_unknown_ok(self): self.config.testing_securitypolicy(userid=u'admin', permissive=True) from pyvac.models import Request, User from pyvac.views.request import Send total_req = Request.find(self.session, count=True) view = Send(self.create_request({ 'days': 4, 'date_from': '05/05/2015 - 10/05/2015', 'type': '1', 'breakdown': 'FULL', 'sudo_user': '******', }))() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] admin_user = User.by_login(self.session, u'admin') self.assertEqual(last_req.user_id, admin_user.id) self.assertEqual(last_req.status, u'PENDING') self.assertFalse(last_req.notified) self.delete_last_req(last_req)
def test_post_send_overlap_ko(self): self.config.testing_securitypolicy(userid='manager3', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-04-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 8, 'date_from': '22/04/2015 - 30/04/2015', 'type': '1', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req) expected = ['error;Invalid period: days already requested.'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_holiday_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '11/11/2015 - 11/11/2015', 'type': '1', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req) expected = ['error;Invalid value for days.'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_rtt_year_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '06/05/2016 - 06/05/2016', 'type': '2', 'breakdown': 'AM', }) view = Send(request)() self.assertIsRedirect(view) # no new requests were made self.assertEqual(Request.find(self.session, count=True), total_req) expected = ['error;RTT can only be used for year 2015.'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_exception_reason_strip_ko(self): self.config.testing_securitypolicy(userid=u'janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '12/11/2015 - 12/11/2015', 'type': '6', 'breakdown': 'FULL', 'exception_text': ' ', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req) expected = [u'error;You must provide a reason for ' 'Exceptionnel requests'] self.assertEqual(request.session.pop_flash(), expected)
def test_post_send_recovery_no_message_ok(self): self.config.testing_securitypolicy(userid='janedoe', permissive=True) from pyvac.models import Request from pyvac.views.request import Send total_req = Request.find(self.session, count=True) with freeze_time('2015-10-01', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): request = self.create_request({ 'days': 1, 'date_from': '12/11/2015 - 12/11/2015', 'type': '4', 'breakdown': 'FULL', }) view = Send(request)() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) last_req = Request.find(self.session)[-1] self.assertEqual(last_req.type, 'Récupération') self.assertEqual(last_req.message, None) self.delete_last_req(last_req)
def test_post_send_n_1_ok(self): self.config.testing_securitypolicy(userid=u'admin', permissive=True) from pyvac.models import Request, User, CPVacation from pyvac.views.request import Send total_req = Request.find(self.session, count=True) jdoe = User.by_login(self.session, u'jdoe') with freeze_time('2016-12-23', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): with patch('pyvac.models.User.arrival_date', new_callable=PropertyMock) as mock_foo: mock_foo.return_value = datetime.now() - relativedelta(months=5) # noqa CPVacation.users_base = {'jdoe': {'n_1': 20, 'restants': 25}} CPVacation.epoch = datetime(2016, 6, 1) pool = jdoe.get_cp_usage(self.session) self.assertEqual(pool['n_1']['left'], 20) request = self.create_request({ 'days': 5, 'date_from': '09/01/2017 - 13/01/2017', 'type': '1', 'breakdown': 'FULL', 'sudo_user': '******', }) view = Send(request)() self.session.commit() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) # noqa last_req = Request.find(self.session)[-1] self.assertEqual(last_req.user_id, jdoe.id) self.assertEqual(last_req.status, u'APPROVED_ADMIN') self.assertEqual(last_req.days, 5.0) pool = jdoe.get_cp_usage(self.session) self.assertEqual(pool['n_1']['left'], 15) self.delete_last_req(last_req) self.session.flush() self.session.commit() with freeze_time('2017-01-02', ignore=['celery', 'psycopg2', 'sqlalchemy', 'icalendar']): with patch('pyvac.models.User.arrival_date', new_callable=PropertyMock) as mock_foo: mock_foo.return_value = datetime.now() - relativedelta(months=5) # noqa CPVacation.users_base = {'jdoe': {'n_1': 20, 'restants': 25}} CPVacation.epoch = datetime(2016, 6, 1) pool = jdoe.get_cp_usage(self.session) self.assertEqual(pool['n_1']['left'], 0) self.assertEqual(pool['restant']['left'], 25) request = self.create_request({ 'days': 5, 'date_from': '16/01/2017 - 20/01/2017', 'type': '1', 'breakdown': 'FULL', 'sudo_user': '******', }) view = Send(request)() self.session.commit() self.assertIsRedirect(view) self.assertEqual(Request.find(self.session, count=True), total_req + 1) # noqa last_req = Request.find(self.session)[-1] self.assertEqual(last_req.user_id, jdoe.id) self.assertEqual(last_req.status, u'APPROVED_ADMIN') self.assertEqual(last_req.days, 5.0) pool = jdoe.get_cp_usage(self.session) self.assertEqual(pool['n_1']['left'], 0) self.assertEqual(pool['restant']['left'], 20.0) self.delete_last_req(last_req)