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)
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
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
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)
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
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
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)