Mam w aplikacji Django widok, który służy do połączenia z aplikacją na Twitterze i pobrania tokenów od użytkownika.
def twitter(request):
# kod weryfikujacy jesli jest w url to uzytkownik autoryzowal aplikacji, jesli nie to trzeba go przekierowac na strone autoryzacji
verifier = request.GET.get('oauth_verifier', False)
if not verifier:
# ... tworzenie linku do autoryzacji na Twitter, uzytkownik trafia na adres w domenie twitter.com
return redirect(authorization_url)
# zamieniam tymczasowe tokeny na access token i secret
access_token_url = 'https://api.twitter.com/oauth/access_token'
oauth = OAuth1Session()
oauth_tokens = oauth.fetch_access_token(access_token_url)
url = u'https://api.twitter.com/1.1/account/verify_credentials.json'
header_oauth = OAuth1(client_key, client_secret, resource_owner_key, resource_owner_secret)
# wykonuje żadanie do Twitter REST API
r = requests.get(url, auth=header_oauth)
# tutaj jeszcze zapisuję dane do bazy danych w stylu TwitterUser.objects.create()
return HttpResponse('<h1>OK</h1>')
Kod działa dobrze natomiast nie wiem jak napisać testy do takiego widoku
class TwitterTest(TestCase):
# sprawdzam czy w przypadku braku parametru oauth_verifier użytkownik jest przenoszony na stronę Twittera
def test_twitter_redirect_to_auth_page(self):
response = self.client.get('/aplikacja/twitter/')
self.assertIn('https://api.twitter.com/oauth/authenticate', response.url)
Natomiast tak naprawdę chciałbym przetestować taki przypadek:
Użytkownik trafia na ten widok, przechodzi pomyślnie autoryzacje na Twitterze, w bazie danych tworzony jest dla niego profil wraz z tokenami dostępowymi
Czy poniższy kierunek to w ogóle dobre myślenie, w sensie mockować widok?
from mock import patch
@patch('my_app.views.twitter')