Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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
Beispiel #7
0
    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.session.delete(last_req)
Beispiel #8
0
    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
Beispiel #9
0
    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)
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
 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)
Beispiel #13
0
 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)
Beispiel #14
0
 def test_post_send_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': 4,
                                      'date_from': '05/05/2014 - 10/05/2014',
                                      'type': 'CP',
                                      }))()
     self.assertIsRedirect(view)
     self.assertEqual(Request.find(self.session, count=True), total_req + 1)
Beispiel #15
0
 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)
Beispiel #16
0
def replay(settings):

    with open(settings['pyvac.celery.yaml']) as fdesc:
        Conf = yaml.load(fdesc, YAMLLoader)
    caldav_url = Conf.get('caldav').get('url')

    # XXX Register the database
    create_engine(settings, scoped=True)
    session = DBSession()

    calendar = get_calendar(caldav_url)
    requests = Request.find(session,
                            where=(Request.status == 'APPROVED_ADMIN',),
                            order_by=Request.user_id)
    print 'total requests', len(requests)
    print ''

    req_to_add = []

    # for each requests
    for req in requests:
        print '-' * 10
        print req.id, req.summarycal, req.date_from, req.date_to
        # check if entry in caldav exists
        results = calendar.date_search(req.date_from, req.date_to)
        if not results:
            # need to add missing entry in caldav
            print 'need to insert request'
            req_to_add.append(req.id)
        else:
            summaries = []
            for event in results:
                try:
                    parse_event(event)
                except Exception:
                    continue
                event.load()
                # XXX: if needed to delete entries
                # uid = event.instance.vevent.uid.value
                # ics = '%s/%s.ics' % (caldav_url, uid)
                # print delFromCal(caldav_url, ics)
                summary = event.instance.vevent.summary.value
                summaries.append(summary)
            if req.summarycal not in summaries:
                print 'need to insert request'
                req_to_add.append(req.id)

    for req_id in set(req_to_add):
        req = Request.by_id(session, req_id)
        print 'processing', req.id, req.summarycal, req.date_from, req.date_to
        ics_url = addToCal(caldav_url,
                           req.date_from,
                           req.date_to,
                           req.summarycal)
        # save ics url in request
        req.ics_url = ics_url
        session.add(req)

    session.flush()
    transaction.commit()
Beispiel #17
0
 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)
Beispiel #18
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)
Beispiel #19
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)
Beispiel #20
0
    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.session.delete(last_req)
Beispiel #21
0
    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)
Beispiel #22
0
 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)
Beispiel #23
0
    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)
Beispiel #24
0
def replay(settings):

    with open(settings["pyvac.celery.yaml"]) as fdesc:
        Conf = yaml.load(fdesc, YAMLLoader)
    caldav_url = Conf.get("caldav").get("url")

    # XXX Register the database
    create_engine(settings, scoped=True)
    session = DBSession()

    calendar = get_calendar(caldav_url)
    requests = Request.find(session, where=(Request.status == "APPROVED_ADMIN",), order_by=Request.user_id)
    print "total requests", len(requests)
    print ""

    req_to_add = []

    # for each requests
    for req in requests:
        print "-" * 10
        print req.id, req.summarycal, req.date_from, req.date_to
        # check if entry in caldav exists
        results = calendar.date_search(req.date_from, req.date_to)
        if not results:
            # need to add missing entry in caldav
            print "need to insert request"
            req_to_add.append(req.id)
        else:
            summaries = []
            for event in results:
                try:
                    parse_event(event)
                except Exception:
                    continue
                event.load()
                # XXX: if needed to delete entries
                # uid = event.instance.vevent.uid.value
                # ics = '%s/%s.ics' % (caldav_url, uid)
                # print delFromCal(caldav_url, ics)
                summary = event.instance.vevent.summary.value
                summaries.append(summary)
            if req.summarycal not in summaries:
                print "need to insert request"
                req_to_add.append(req.id)

    for req_id in set(req_to_add):
        req = Request.by_id(session, req_id)
        print "processing", req.id, req.summarycal, req.date_from, req.date_to
        ics_url = addToCal(caldav_url, req.date_from, req.date_to, req.summarycal)
        # save ics url in request
        req.ics_url = ics_url
        session.add(req)

    session.flush()
    transaction.commit()
Beispiel #25
0
    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)
Beispiel #26
0
    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)
Beispiel #27
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)
Beispiel #28
0
 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)
Beispiel #29
0
    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)
Beispiel #30
0
 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)
Beispiel #31
0
    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)
Beispiel #32
0
    def test_post_send_overlap_ko(self):
        self.config.testing_securitypolicy(userid=u'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)
Beispiel #33
0
    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)
Beispiel #34
0
    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)
Beispiel #35
0
    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)
Beispiel #36
0
    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)
Beispiel #37
0
    def test_post_send_rtt_holiday_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('2016-10-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)
Beispiel #38
0
    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)
Beispiel #39
0
    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)
Beispiel #40
0
    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)
Beispiel #41
0
    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)