Change settings format for importers
parent
a952d200fc
commit
aaedfab439
|
@ -561,19 +561,30 @@ MAX_PENDING_MEMBERSHIPS = 30 # Max number of unconfirmed memberships in a projec
|
||||||
|
|
||||||
from .sr import *
|
from .sr import *
|
||||||
|
|
||||||
GITHUB_API_CLIENT_ID = ""
|
IMPORTERS = {
|
||||||
GITHUB_API_CLIENT_SECRET = ""
|
"github": {
|
||||||
|
"active": False,
|
||||||
TRELLO_API_KEY = ""
|
"client_id": "",
|
||||||
TRELLO_SECRET_KEY = ""
|
"client_secret": "",
|
||||||
|
},
|
||||||
ASANA_APP_CALLBACK_URL = ""
|
"trello": {
|
||||||
ASANA_APP_ID = ""
|
"active": False,
|
||||||
ASANA_APP_SECRET = ""
|
"api_key": "",
|
||||||
|
"secret_key": "",
|
||||||
JIRA_CONSUMER_KEY = ""
|
},
|
||||||
JIRA_CERT = ""
|
"jira": {
|
||||||
JIRA_PUB_CERT = ""
|
"active": False,
|
||||||
|
"consumer_key": "",
|
||||||
|
"cert": "",
|
||||||
|
"pub_cert": "",
|
||||||
|
},
|
||||||
|
"asana": {
|
||||||
|
"active": False,
|
||||||
|
"callback_url": "",
|
||||||
|
"app_id": "",
|
||||||
|
"app_secret": "",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# NOTE: DON'T INSERT MORE SETTINGS AFTER THIS LINE
|
# NOTE: DON'T INSERT MORE SETTINGS AFTER THIS LINE
|
||||||
TEST_RUNNER="django.test.runner.DiscoverRunner"
|
TEST_RUNNER="django.test.runner.DiscoverRunner"
|
||||||
|
|
|
@ -38,3 +38,9 @@ REST_FRAMEWORK["DEFAULT_THROTTLE_RATES"] = {
|
||||||
"register-success": None,
|
"register-success": None,
|
||||||
"user-detail": None,
|
"user-detail": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
IMPORTERS['github']['active'] = True
|
||||||
|
IMPORTERS['jira']['active'] = True
|
||||||
|
IMPORTERS['asana']['active'] = True
|
||||||
|
IMPORTERS['trello']['active'] = True
|
||||||
|
|
|
@ -114,7 +114,11 @@ class AsanaImporterViewSet(viewsets.ViewSet):
|
||||||
def auth_url(self, request, *args, **kwargs):
|
def auth_url(self, request, *args, **kwargs):
|
||||||
self.check_permissions(request, "auth_url", None)
|
self.check_permissions(request, "auth_url", None)
|
||||||
|
|
||||||
url = AsanaImporter.get_auth_url(settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, settings.ASANA_APP_CALLBACK_URL)
|
url = AsanaImporter.get_auth_url(
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_id', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_secret', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('callback_url', None)
|
||||||
|
)
|
||||||
|
|
||||||
return response.Ok({"url": url})
|
return response.Ok({"url": url})
|
||||||
|
|
||||||
|
@ -127,7 +131,12 @@ class AsanaImporterViewSet(viewsets.ViewSet):
|
||||||
raise exc.BadRequest(_("Code param needed"))
|
raise exc.BadRequest(_("Code param needed"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
asana_token = AsanaImporter.get_access_token(code, settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, settings.ASANA_APP_CALLBACK_URL)
|
asana_token = AsanaImporter.get_access_token(
|
||||||
|
code,
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_id', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_secret', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('callback_url', None)
|
||||||
|
)
|
||||||
except exceptions.InvalidRequest:
|
except exceptions.InvalidRequest:
|
||||||
raise exc.BadRequest(_('Invalid Asana API request'))
|
raise exc.BadRequest(_('Invalid Asana API request'))
|
||||||
except exceptions.FailedRequest:
|
except exceptions.FailedRequest:
|
||||||
|
|
|
@ -110,7 +110,10 @@ class GithubImporterViewSet(viewsets.ViewSet):
|
||||||
def auth_url(self, request, *args, **kwargs):
|
def auth_url(self, request, *args, **kwargs):
|
||||||
self.check_permissions(request, "auth_url", None)
|
self.check_permissions(request, "auth_url", None)
|
||||||
callback_uri = request.QUERY_PARAMS.get('uri')
|
callback_uri = request.QUERY_PARAMS.get('uri')
|
||||||
url = GithubImporter.get_auth_url(settings.GITHUB_API_CLIENT_ID, callback_uri)
|
url = GithubImporter.get_auth_url(
|
||||||
|
settings.IMPORTERS.get('github', {}).get('client_id', None),
|
||||||
|
callback_uri
|
||||||
|
)
|
||||||
return response.Ok({"url": url})
|
return response.Ok({"url": url})
|
||||||
|
|
||||||
@list_route(methods=["POST"])
|
@list_route(methods=["POST"])
|
||||||
|
@ -122,7 +125,11 @@ class GithubImporterViewSet(viewsets.ViewSet):
|
||||||
raise exc.BadRequest(_("Code param needed"))
|
raise exc.BadRequest(_("Code param needed"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
token = GithubImporter.get_access_token(settings.GITHUB_API_CLIENT_ID, settings.GITHUB_API_CLIENT_SECRET, code)
|
token = GithubImporter.get_access_token(
|
||||||
|
settings.IMPORTERS.get('github', {}).get('client_id', None),
|
||||||
|
settings.IMPORTERS.get('github', {}).get('client_secret', None),
|
||||||
|
code
|
||||||
|
)
|
||||||
return response.Ok({
|
return response.Ok({
|
||||||
"token": token
|
"token": token
|
||||||
})
|
})
|
||||||
|
|
|
@ -40,8 +40,8 @@ class JiraImporterViewSet(viewsets.ViewSet):
|
||||||
token = {
|
token = {
|
||||||
"access_token": token_data[0],
|
"access_token": token_data[0],
|
||||||
"access_token_secret": token_data[1],
|
"access_token_secret": token_data[1],
|
||||||
"key_cert": settings.JIRA_CERT,
|
"key_cert": settings.IMPORTERS.get('jira', {}).get('cert', None),
|
||||||
"consumer_key": settings.JIRA_CONSUMER_KEY
|
"consumer_key": settings.IMPORTERS.get('jira', {}).get('consumer_key', None)
|
||||||
}
|
}
|
||||||
return token
|
return token
|
||||||
|
|
||||||
|
@ -180,8 +180,8 @@ class JiraImporterViewSet(viewsets.ViewSet):
|
||||||
|
|
||||||
(oauth_token, oauth_secret, url) = JiraNormalImporter.get_auth_url(
|
(oauth_token, oauth_secret, url) = JiraNormalImporter.get_auth_url(
|
||||||
jira_url,
|
jira_url,
|
||||||
settings.JIRA_CONSUMER_KEY,
|
settings.IMPORTERS.get('jira', {}).get('consumer_key', None),
|
||||||
settings.JIRA_CERT,
|
settings.IMPORTERS.get('jira', {}).get('cert', None),
|
||||||
True
|
True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -215,8 +215,8 @@ class JiraImporterViewSet(viewsets.ViewSet):
|
||||||
|
|
||||||
jira_token = JiraNormalImporter.get_access_token(
|
jira_token = JiraNormalImporter.get_access_token(
|
||||||
server_url,
|
server_url,
|
||||||
settings.JIRA_CONSUMER_KEY,
|
settings.IMPORTERS.get('jira', {}).get('consumer_key', None),
|
||||||
settings.JIRA_CERT,
|
settings.IMPORTERS.get('jira', {}).get('cert', None),
|
||||||
oauth_token,
|
oauth_token,
|
||||||
oauth_secret,
|
oauth_secret,
|
||||||
True
|
True
|
||||||
|
|
|
@ -52,10 +52,19 @@ class Command(BaseCommand):
|
||||||
if options.get('token', None):
|
if options.get('token', None):
|
||||||
token = json.loads(options.get('token'))
|
token = json.loads(options.get('token'))
|
||||||
else:
|
else:
|
||||||
url = AsanaImporter.get_auth_url(settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, settings.ASANA_APP_CALLBACK_URL)
|
url = AsanaImporter.get_auth_url(
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_id', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_secret', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('callback_url', None)
|
||||||
|
)
|
||||||
print("Go to here and come with your code (in the redirected url): {}".format(url))
|
print("Go to here and come with your code (in the redirected url): {}".format(url))
|
||||||
code = input("Code: ")
|
code = input("Code: ")
|
||||||
access_data = AsanaImporter.get_access_token(code, settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, settings.ASANA_APP_CALLBACK_URL)
|
access_data = AsanaImporter.get_access_token(
|
||||||
|
code,
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_id', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('app_secret', None),
|
||||||
|
settings.IMPORTERS.get('asana', {}).get('callback_url', None)
|
||||||
|
)
|
||||||
token = access_data
|
token = access_data
|
||||||
|
|
||||||
importer = AsanaImporter(admin, token)
|
importer = AsanaImporter(admin, token)
|
||||||
|
|
|
@ -51,10 +51,16 @@ class Command(BaseCommand):
|
||||||
if options.get('token', None):
|
if options.get('token', None):
|
||||||
token = options.get('token')
|
token = options.get('token')
|
||||||
else:
|
else:
|
||||||
url = GithubImporter.get_auth_url(settings.GITHUB_API_CLIENT_ID)
|
url = GithubImporter.get_auth_url(
|
||||||
|
settings.IMPORTERS.get('github', {}).get('client_id', None)
|
||||||
|
)
|
||||||
print("Go to here and come with your code (in the redirected url): {}".format(url))
|
print("Go to here and come with your code (in the redirected url): {}".format(url))
|
||||||
code = input("Code: ")
|
code = input("Code: ")
|
||||||
access_data = GithubImporter.get_access_token(settings.GITHUB_API_CLIENT_ID, settings.GITHUB_API_CLIENT_SECRET, code)
|
access_data = GithubImporter.get_access_token(
|
||||||
|
settings.IMPORTERS.get('github', {}).get('client_id', None)
|
||||||
|
settings.IMPORTERS.get('github', {}).get('client_secret', None)
|
||||||
|
code
|
||||||
|
)
|
||||||
token = access_data
|
token = access_data
|
||||||
|
|
||||||
importer = GithubImporter(admin, token)
|
importer = GithubImporter(admin, token)
|
||||||
|
|
|
@ -62,10 +62,22 @@ class Command(BaseCommand):
|
||||||
elif options.get('token', None):
|
elif options.get('token', None):
|
||||||
token = json.loads(options.get('token'))
|
token = json.loads(options.get('token'))
|
||||||
else:
|
else:
|
||||||
(rtoken, rtoken_secret, url) = JiraNormalImporter.get_auth_url(server, settings.JIRA_CONSUMER_KEY, settings.JIRA_CERT, True)
|
(rtoken, rtoken_secret, url) = JiraNormalImporter.get_auth_url(
|
||||||
|
server,
|
||||||
|
settings.IMPORTERS.get('jira', {}).get('consumer_key', None),
|
||||||
|
settings.IMPORTERS.get('jira', {}).get('cert', None),
|
||||||
|
True
|
||||||
|
)
|
||||||
print(url)
|
print(url)
|
||||||
code = input("Go to the url and get back the code")
|
code = input("Go to the url and get back the code")
|
||||||
token = JiraNormalImporter.get_access_token(server, settings.JIRA_CONSUMER_KEY, settings.JIRA_CERT, rtoken, rtoken_secret, True)
|
token = JiraNormalImporter.get_access_token(
|
||||||
|
server,
|
||||||
|
settings.IMPORTERS.get('jira', {}).get('consumer_key', None),
|
||||||
|
settings.IMPORTERS.get('jira', {}).get('cert', None),
|
||||||
|
rtoken,
|
||||||
|
rtoken_secret,
|
||||||
|
True
|
||||||
|
)
|
||||||
print("Auth token: {}".format(json.dumps(token)))
|
print("Auth token: {}".format(json.dumps(token)))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ class TrelloImporter:
|
||||||
self._user = user
|
self._user = user
|
||||||
self._cached_orgs = {}
|
self._cached_orgs = {}
|
||||||
self._client = TrelloClient(
|
self._client = TrelloClient(
|
||||||
api_key=settings.TRELLO_API_KEY,
|
api_key=settings.IMPORTERS.get('trello', {}).get('api_key', None),
|
||||||
api_secret=settings.TRELLO_SECRET_KEY,
|
api_secret=settings.IMPORTERS.get('trello', {}).get('secret_key', None),
|
||||||
token=token,
|
token=token,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -492,8 +492,8 @@ class TrelloImporter:
|
||||||
return_url = resolve_front_url("new-project-import", "trello")
|
return_url = resolve_front_url("new-project-import", "trello")
|
||||||
expiration = "1day"
|
expiration = "1day"
|
||||||
scope = "read,write,account"
|
scope = "read,write,account"
|
||||||
trello_key = settings.TRELLO_API_KEY
|
trello_key = settings.IMPORTERS.get('trello', {}).get('api_key', None)
|
||||||
trello_secret = settings.TRELLO_SECRET_KEY
|
trello_secret = settings.IMPORTERS.get('trello', {}).get('secret_key', None)
|
||||||
name = "Taiga"
|
name = "Taiga"
|
||||||
|
|
||||||
session = OAuth1Session(client_key=trello_key, client_secret=trello_secret)
|
session = OAuth1Session(client_key=trello_key, client_secret=trello_secret)
|
||||||
|
@ -515,8 +515,8 @@ class TrelloImporter:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_access_token(cls, oauth_token, oauth_token_secret, oauth_verifier):
|
def get_access_token(cls, oauth_token, oauth_token_secret, oauth_verifier):
|
||||||
api_key = settings.TRELLO_API_KEY
|
api_key = settings.IMPORTERS.get('trello', {}).get('api_key', None)
|
||||||
api_secret = settings.TRELLO_SECRET_KEY
|
api_secret = settings.IMPORTERS.get('trello', {}).get('secret_key', None)
|
||||||
access_token_url = 'https://trello.com/1/OAuthGetAccessToken'
|
access_token_url = 'https://trello.com/1/OAuthGetAccessToken'
|
||||||
session = OAuth1Session(client_key=api_key, client_secret=api_secret,
|
session = OAuth1Session(client_key=api_key, client_secret=api_secret,
|
||||||
resource_owner_key=oauth_token, resource_owner_secret=oauth_token_secret,
|
resource_owner_key=oauth_token, resource_owner_secret=oauth_token_secret,
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from taiga.base import routers
|
from taiga.base import routers
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
router = routers.DefaultRouter(trailing_slash=False)
|
router = routers.DefaultRouter(trailing_slash=False)
|
||||||
|
|
||||||
|
@ -284,15 +285,21 @@ router.register(r"applications", Application, base_name="applications")
|
||||||
router.register(r"application-tokens", ApplicationToken, base_name="application-tokens")
|
router.register(r"application-tokens", ApplicationToken, base_name="application-tokens")
|
||||||
|
|
||||||
# Third party importers
|
# Third party importers
|
||||||
from taiga.importers.trello.api import TrelloImporterViewSet
|
if settings.IMPORTERS.get('trello', {}).get('active', False):
|
||||||
from taiga.importers.jira.api import JiraImporterViewSet
|
from taiga.importers.trello.api import TrelloImporterViewSet
|
||||||
from taiga.importers.github.api import GithubImporterViewSet
|
router.register(r"importers/trello", TrelloImporterViewSet, base_name="importers-trello")
|
||||||
from taiga.importers.asana.api import AsanaImporterViewSet
|
|
||||||
|
|
||||||
router.register(r"importers/trello", TrelloImporterViewSet, base_name="importers-trello")
|
if settings.IMPORTERS.get('jira', {}).get('active', False):
|
||||||
router.register(r"importers/jira", JiraImporterViewSet, base_name="importers-jira")
|
from taiga.importers.jira.api import JiraImporterViewSet
|
||||||
router.register(r"importers/github", GithubImporterViewSet, base_name="importers-github")
|
router.register(r"importers/jira", JiraImporterViewSet, base_name="importers-jira")
|
||||||
router.register(r"importers/asana", AsanaImporterViewSet, base_name="importers-asana")
|
|
||||||
|
if settings.IMPORTERS.get('github', {}).get('active', False):
|
||||||
|
from taiga.importers.github.api import GithubImporterViewSet
|
||||||
|
router.register(r"importers/github", GithubImporterViewSet, base_name="importers-github")
|
||||||
|
|
||||||
|
if settings.IMPORTERS.get('asana', {}).get('active', False):
|
||||||
|
from taiga.importers.asana.api import AsanaImporterViewSet
|
||||||
|
router.register(r"importers/asana", AsanaImporterViewSet, base_name="importers-asana")
|
||||||
|
|
||||||
|
|
||||||
# Stats
|
# Stats
|
||||||
|
|
|
@ -35,16 +35,20 @@ pytestmark = pytest.mark.django_db
|
||||||
def test_auth_url(client, settings):
|
def test_auth_url(client, settings):
|
||||||
user = f.UserFactory.create()
|
user = f.UserFactory.create()
|
||||||
client.login(user)
|
client.login(user)
|
||||||
settings.ASANA_APP_CALLBACK_URL = "http://testserver/url"
|
settings.IMPORTERS['asana']['callback_url'] = "http://testserver/url"
|
||||||
settings.ASANA_APP_ID = "test-id"
|
settings.IMPORTERS['asana']['app_id'] = "test-id"
|
||||||
settings.ASANA_APP_SECRET = "test-secret"
|
settings.IMPORTERS['asana']['app_secret'] = "test-secret"
|
||||||
|
|
||||||
url = reverse("importers-asana-auth-url")
|
url = reverse("importers-asana-auth-url")
|
||||||
|
|
||||||
with mock.patch('taiga.importers.asana.api.AsanaImporter') as AsanaImporterMock:
|
with mock.patch('taiga.importers.asana.api.AsanaImporter') as AsanaImporterMock:
|
||||||
AsanaImporterMock.get_auth_url.return_value = "https://auth_url"
|
AsanaImporterMock.get_auth_url.return_value = "https://auth_url"
|
||||||
response = client.get(url, content_type="application/json")
|
response = client.get(url, content_type="application/json")
|
||||||
assert AsanaImporterMock.get_auth_url.calledWith(settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, settings.ASANA_APP_CALLBACK_URL)
|
assert AsanaImporterMock.get_auth_url.calledWith(
|
||||||
|
settings.IMPORTERS['asana']['app_id'],
|
||||||
|
settings.IMPORTERS['asana']['app_secret'],
|
||||||
|
settings.IMPORTERS['asana']['callback_url']
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'url' in response.data
|
assert 'url' in response.data
|
||||||
|
@ -60,7 +64,11 @@ def test_authorize(client, settings):
|
||||||
with mock.patch('taiga.importers.asana.api.AsanaImporter') as AsanaImporterMock:
|
with mock.patch('taiga.importers.asana.api.AsanaImporter') as AsanaImporterMock:
|
||||||
AsanaImporterMock.get_access_token.return_value = "token"
|
AsanaImporterMock.get_access_token.return_value = "token"
|
||||||
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "code"}))
|
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "code"}))
|
||||||
assert AsanaImporterMock.get_access_token.calledWith(settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, "code")
|
assert AsanaImporterMock.get_access_token.calledWith(
|
||||||
|
settings.IMPORTERS['asana']['app_id'],
|
||||||
|
settings.IMPORTERS['asana']['app_secret'],
|
||||||
|
"code"
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'token' in response.data
|
assert 'token' in response.data
|
||||||
|
@ -90,7 +98,11 @@ def test_authorize_with_bad_verify(client, settings):
|
||||||
with mock.patch('taiga.importers.asana.api.AsanaImporter') as AsanaImporterMock:
|
with mock.patch('taiga.importers.asana.api.AsanaImporter') as AsanaImporterMock:
|
||||||
AsanaImporterMock.get_access_token.side_effect = exceptions.InvalidRequest()
|
AsanaImporterMock.get_access_token.side_effect = exceptions.InvalidRequest()
|
||||||
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "bad"}))
|
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "bad"}))
|
||||||
assert AsanaImporterMock.get_access_token.calledWith(settings.ASANA_APP_ID, settings.ASANA_APP_SECRET, "bad")
|
assert AsanaImporterMock.get_access_token.calledWith(
|
||||||
|
settings.IMPORTERS['asana']['app_id'],
|
||||||
|
settings.IMPORTERS['asana']['app_secret'],
|
||||||
|
"bad"
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
assert 'token' not in response.data
|
assert 'token' not in response.data
|
||||||
|
|
|
@ -53,7 +53,11 @@ def test_authorize(client, settings):
|
||||||
with mock.patch('taiga.importers.github.api.GithubImporter') as GithubImporterMock:
|
with mock.patch('taiga.importers.github.api.GithubImporter') as GithubImporterMock:
|
||||||
GithubImporterMock.get_access_token.return_value = "token"
|
GithubImporterMock.get_access_token.return_value = "token"
|
||||||
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "code"}))
|
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "code"}))
|
||||||
assert GithubImporterMock.get_access_token.calledWith(settings.GITHUB_API_CLIENT_ID, settings.GITHUB_API_CLIENT_SECRET, "code")
|
assert GithubImporterMock.get_access_token.calledWith(
|
||||||
|
settings.IMPORTERS['github']['client_id'],
|
||||||
|
settings.IMPORTERS['github']['client_secret'],
|
||||||
|
"code"
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'token' in response.data
|
assert 'token' in response.data
|
||||||
|
@ -82,7 +86,11 @@ def test_authorize_with_bad_verify(client, settings):
|
||||||
with mock.patch('taiga.importers.github.api.GithubImporter') as GithubImporterMock:
|
with mock.patch('taiga.importers.github.api.GithubImporter') as GithubImporterMock:
|
||||||
GithubImporterMock.get_access_token.side_effect = exceptions.InvalidAuthResult()
|
GithubImporterMock.get_access_token.side_effect = exceptions.InvalidAuthResult()
|
||||||
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "bad"}))
|
response = client.post(authorize_url, content_type="application/json", data=json.dumps({"code": "bad"}))
|
||||||
assert GithubImporterMock.get_access_token.calledWith(settings.GITHUB_API_CLIENT_ID, settings.GITHUB_API_CLIENT_SECRET, "bad")
|
assert GithubImporterMock.get_access_token.calledWith(
|
||||||
|
settings.IMPORTERS['github']['client_id'],
|
||||||
|
settings.IMPORTERS['github']['client_secret'],
|
||||||
|
"bad"
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
assert 'token' not in response.data
|
assert 'token' not in response.data
|
||||||
|
|
Loading…
Reference in New Issue