Refactoring tests

This commit is contained in:
Júlio César Batista 2019-01-31 18:29:15 -02:00
parent 5a55c4269d
commit a4059851e7
2 changed files with 21 additions and 10 deletions

View File

@ -7,6 +7,7 @@ import os
from importlib import import_module
from twisted.trial.unittest import SkipTest
from tests import mock
from scrapy.exceptions import NotConfigured
from scrapy.utils.boto import is_botocore
@ -91,3 +92,18 @@ def assert_samelines(testcase, text1, text2, msg=None):
line endings between platforms
"""
testcase.assertEqual(text1.splitlines(), text2.splitlines(), msg)
def mock_google_cloud_storage():
"""Creates autospec mocks for google-cloud-storage Client, Bucket and Blob
classes and set their proper return values.
"""
from google.cloud.storage import Client, Bucket, Blob
client_mock = mock.create_autospec(Client)
bucket_mock = mock.create_autospec(Bucket)
client_mock.get_bucket.return_value = bucket_mock
blob_mock = mock.create_autospec(Blob)
bucket_mock.blob.return_value = blob_mock
return (client_mock, bucket_mock, blob_mock)

View File

@ -24,7 +24,8 @@ from scrapy.extensions.feedexport import (
IFeedStorage, FileFeedStorage, FTPFeedStorage, GCSFeedStorage,
S3FeedStorage, StdoutFeedStorage,
BlockingFeedStorage)
from scrapy.utils.test import assert_aws_environ, get_s3_content_and_delete, get_crawler
from scrapy.utils.test import (assert_aws_environ, get_s3_content_and_delete,
get_crawler, mock_google_cloud_storage)
from scrapy.utils.python import to_native_str
@ -207,22 +208,16 @@ class GCSFeedStorageTest(unittest.TestCase):
@defer.inlineCallbacks
def test_store(self):
try:
from google.cloud.storage import Client, Bucket, Blob
from google.cloud.storage import Client
except ImportError:
raise unittest.SkipTest("GCSFeedStorage requires google-cloud-storage")
uri = 'gcs://mybucket/export.csv'
project_id = 'myproject-123'
with mock.patch('google.cloud.storage.Client') as m:
client_mock = mock.create_autospec(Client)
(client_mock, bucket_mock, blob_mock) = mock_google_cloud_storage()
with mock.patch('google.cloud.storage.Client') as m:
m.return_value = client_mock
bucket_mock = mock.create_autospec(Bucket)
client_mock.get_bucket.return_value = bucket_mock
blob_mock = mock.create_autospec(Blob)
bucket_mock.blob.return_value = blob_mock
f = mock.Mock()
storage = GCSFeedStorage(uri, project_id)
yield storage.store(f)