def set_api_ticket(self, expire=None):
     if not expire:
         expire = timedelta(days=1)
     api_ticket = M.ApiTicket(user_id=self.user._id,
                              capabilities={'import': ['Projects', 'test']},
                              expires=datetime.utcnow() + expire)
     session(api_ticket).flush()
     self.set_api_token(api_ticket)
Пример #2
0
    def test_import(self):
        here_dir = os.path.dirname(__file__)
        api_ticket = M.ApiTicket(user_id=c.user._id,
                                 capabilities={'import': ['Projects', 'test']},
                                 expires=datetime.utcnow() + timedelta(days=1))
        ming.orm.session(api_ticket).flush()
        self.set_api_token(api_ticket)

        doc_text = open(here_dir + '/data/sf.json').read()
        doc_json = json.loads(doc_text)
        ticket_json = doc_json['trackers']['default']['artifacts'][0]
        r = self.api_post(
            '/rest/p/test/bugs/perform_import',
            doc=doc_text,
            options=
            '{"user_map": {"hinojosa4": "test-admin", "ma_boehm": "test-user"}}'
        )
        assert r.json['status']
        assert r.json['errors'] == []

        ming.orm.ThreadLocalORMSession.flush_all()
        M.MonQTask.run_ready()
        ming.orm.ThreadLocalORMSession.flush_all()

        indexed_tickets = filter(lambda a: a['type_s'] == 'Ticket',
                                 g.solr.db.values())
        assert_equal(len(indexed_tickets), 1)
        assert_equal(indexed_tickets[0]['summary_t'], ticket_json['summary'])
        assert_equal(indexed_tickets[0]['ticket_num_i'], ticket_json['id'])

        r = self.app.get('/rest/p/test/bugs/204/')
        self.verify_ticket(r.json['ticket'], ticket_json)
        assert r.json['ticket']["reported_by"] == "test-user"
        assert r.json['ticket']["assigned_to"] == "test-admin"

        r = self.app.get('/rest/p/test/bugs/')
        assert len(r.json['tickets']) == 1
        assert_equal(r.json['tickets'][0]['ticket_num'], ticket_json['id'])
        assert_equal(r.json['tickets'][0]['summary'], ticket_json['summary'])

        r = self.app.get('/p/test/bugs/204/')
        assert '<option value="2.0">2.0</option>' in r
        assert '<option selected value="test_milestone">test_milestone</option>' in r
        assert ticket_json['summary'] in r
        r = self.app.get('/p/test/bugs/')
        assert ticket_json['summary'] in r
Пример #3
0
    def api_tickets(self, **data):
        import json
        import dateutil.parser
        if request.method == 'POST':
            log.info('api_tickets: %s', data)
            ok = True
            for_user = M.User.by_username(data['for_user'])
            if not for_user:
                ok = False
                flash('User not found')
            caps = None
            try:
                caps = json.loads(data['caps'])
            except ValueError:
                ok = False
                flash('JSON format error')
            if type(caps) is not type({}):
                ok = False
                flash(
                    'Capabilities must be a JSON dictionary, mapping capability name to optional discriminator(s) (or "")'
                )
            try:
                expires = dateutil.parser.parse(data['expires'])
            except ValueError:
                ok = False
                flash('Date format error')
            if ok:
                tok = None
                try:
                    tok = M.ApiTicket(user_id=for_user._id,
                                      capabilities=caps,
                                      expires=expires)
                    session(tok).flush()
                    log.info('New token: %s', tok)
                    flash('API Ticket created')
                except:
                    log.exception('Could not create API ticket:')
                    flash('Error creating API ticket')
        elif request.method == 'GET':
            data = {'expires': datetime.utcnow() + timedelta(days=2)}

        data['token_list'] = M.ApiTicket.query.find().sort(
            'mod_date', pymongo.DESCENDING).all()
        log.info(data['token_list'])
        return data
Пример #4
0
    def test_import_anon(self):
        api_ticket = M.ApiTicket(user_id=c.user._id,
                                 capabilities={'import': ['Projects', 'test']},
                                 expires=datetime.utcnow() + timedelta(days=1))
        ming.orm.session(api_ticket).flush()
        self.set_api_token(api_ticket)

        r = self.api_post('/rest/p/test/discussion/perform_import',
                          doc=self.json_text)
        assert not r.json['errors'], r.json['errors']
        r = self.app.get('/p/test/discussion/')
        assert 'Open Discussion' in str(r)
        assert 'Welcome to Open Discussion' in str(r)
        for link in r.html.findAll('a'):
            if 'Welcome to Open Discussion' in str(link): break
        r = self.app.get(link.get('href'))
        assert '2009-11-19' in str(r)
        assert 'Welcome to Open Discussion' in str(r)
        assert 'Anonymous' in str(r)
Пример #5
0
    def test_milestone_status(self):
        """When importing, if all tickets in a milestone are closed, the
        milestone itself should also be closed.

        """
        here_dir = os.path.dirname(__file__)
        api_ticket = M.ApiTicket(user_id=c.user._id,
                                 capabilities={'import': ['Projects', 'test']},
                                 expires=datetime.utcnow() + timedelta(days=1))
        ming.orm.session(api_ticket).flush()
        self.set_api_token(api_ticket)

        doc_text = open(here_dir + '/data/milestone-tickets.json').read()
        r = self.api_post(
            '/rest/p/test/bugs/perform_import',
            doc=doc_text,
            options=
            '{"user_map": {"hinojosa4": "test-admin", "ma_boehm": "test-user"}}'
        )
        assert r.json['status'], r.json

        ming.orm.ThreadLocalORMSession.flush_all()
        M.MonQTask.run_ready()
        ming.orm.ThreadLocalORMSession.flush_all()

        with h.push_context('test',
                            mount_point='bugs',
                            neighborhood='Projects'):
            for milestone_fld in c.app.globals.milestone_fields:
                milestone_names = [
                    ms['name'] for ms in milestone_fld['milestones']
                ]
                assert 'open_milestone' in milestone_names, milestone_names
                assert 'closed_milestone' in milestone_names, milestone_names
                for milestone in milestone_fld['milestones']:
                    if milestone['name'] == 'open_milestone':
                        assert milestone['complete'] == False
                    if milestone['name'] == 'closed_milestone':
                        assert milestone['complete'] == True
Пример #6
0
    def test_import_custom_field(self):
        params = dict(
            custom_fields=[
                dict(name='_resolution',
                     label='Resolution',
                     type='select',
                     options='oné "one and á half" two'),
            ],
            open_status_names='aa bb',
            closed_status_names='cc',
        )
        self.app.post('/admin/bugs/set_custom_fields',
                      params=variable_encode(params))
        here_dir = os.path.dirname(__file__)
        api_ticket = M.ApiTicket(user_id=c.user._id,
                                 capabilities={'import': ['Projects', 'test']},
                                 expires=datetime.utcnow() + timedelta(days=1))
        ming.orm.session(api_ticket).flush()
        self.set_api_token(api_ticket)

        doc_text = open(here_dir + '/data/sf.json').read()
        doc_json = json.loads(doc_text)
        ticket_json = doc_json['trackers']['default']['artifacts'][0]
        r = self.api_post(
            '/rest/p/test/bugs/perform_import',
            doc=doc_text,
            options=
            '{"user_map": {"hinojosa4": "test-admin", "ma_boehm": "test-user"}}'
        )
        assert r.json['status'], r.json

        ming.orm.ThreadLocalORMSession.flush_all()
        M.MonQTask.run_ready()
        ming.orm.ThreadLocalORMSession.flush_all()

        r = self.app.get('/p/test/bugs/204/')
        assert '<option selected value="fixed">fixed</option>' in r
        assert '<option value="one and á half">one and á half</option>' in r
Пример #7
0
 def set_api_ticket(self, caps={'import': ['Projects', 'test']}):
     api_ticket = M.ApiTicket(user_id=c.user._id,
                              capabilities=caps,
                              expires=datetime.utcnow() + timedelta(days=1))
     ming.orm.session(api_ticket).flush()
     self.set_api_token(api_ticket)