blob: 38290e8b7987e4894ebbdfd151417ed3e732a63f [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import os
import json
from datetime import datetime, timedelta
from nose.tools import assert_equal
import ming
from tg import config
from pylons import tmpl_context as c
from allura import model as M
from allura.lib import helpers as h
from alluratest.controller import TestRestApiBase
class TestImportController(TestRestApiBase): # TestController):
def setUp(self):
super(TestImportController, self).setUp()
here_dir = os.path.dirname(__file__)
self.app.get('/discussion/')
self.json_text = open(here_dir + '/data/sf.json').read()
def test_no_capability(self):
with h.push_config(config, **{'oauth.can_import_forum': 'some,fake,tokens'}):
resp = self.api_post('/rest/p/test/discussion/perform_import',
doc=self.json_text,
status=403)
with h.push_config(config, **{'oauth.can_import_forum': self.token('test-admin').api_key}):
resp = self.api_post('/rest/p/test/discussion/perform_import',
doc=self.json_text)
assert resp.status_int == 200
def test_validate_import(self):
r = self.api_post('/rest/p/test/discussion/validate_import',
doc=self.json_text)
assert not r.json['errors']
def test_import_anon(self):
with h.push_config(config, **{'oauth.can_import_forum': self.token('test-admin').api_key}):
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_import_map(self):
with h.push_config(config, **{'oauth.can_import_forum': self.token('test-admin').api_key}):
r = self.api_post('/rest/p/test/discussion/perform_import',
doc=self.json_text,
username_mapping=json.dumps(dict(rick446='test-user')))
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 'Test User' in str(r)
assert 'Anonymous' not in str(r)
def test_import_create(self):
with h.push_config(config, **{'oauth.can_import_forum': self.token('test-admin').api_key}):
r = self.api_post('/rest/p/test/discussion/perform_import',
doc=self.json_text, create_users='True')
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' not in str(r)
assert 'test-rick446' in str(r)
@staticmethod
def time_normalize(t):
return t.replace('T', ' ').replace('Z', '')
def verify_ticket(self, from_api, org):
assert_equal(from_api['status'], org['status'])
assert_equal(from_api['description'], org['description'])
assert_equal(from_api['summary'], org['summary'])
assert_equal(from_api['ticket_num'], org['id'])
assert_equal(from_api['created_date'],
self.time_normalize(org['date']))
assert_equal(from_api['mod_date'],
self.time_normalize(org['date_updated']))
assert_equal(from_api['custom_fields']
['_resolution'], org['resolution'])
assert_equal(from_api['custom_fields']['_cc'], org['cc'])
assert_equal(from_api['custom_fields']['_private'], org['private'])