title: How to mock bucket.objects.filter() from boto3 resource?
body: <p>I am having some problems mocking the bucket.objects.filter() method, but I am able to mock most other boto3 calls.</p>
  <p>I have a class that is similar to this code in a file with the path my_project.utils.s3_api:</p>
  <pre><code>from boto3.session import Session, Config
  
  
  class S3Resource:
      def __init__(self, kwargs):
          session = Session()
          self.client = session.resource(
              's3',
              aws_access_key_id=kwargs['access_key'],
              aws_secret_access_key=kwargs['secret_key'],
              endpoint_url=kwargs['s3_url'],
              region_name=kwargs['region'],
              config=Config(signature_version='s3v4'
          )
          self.kwargs = kwargs
  
      &lt;many methods that are already successfully tested here&gt;
  
      # this is the method that I cannot test correctly:
      def list_bucket_contents(self):
          bucket = self.client.Bucket(self.kwargs['bucket'])
          return [summary.key for summary in bucket.objects.filter()]
  </code></pre>
  <p>Then in my tests file I have something like this:</p>
  <pre><code>    @mock.patch('my_project.utils.s3_api.Session.resource')
      def test_list_bucket_contents(self, mock_connection):
          ObjectSummary = namedtuple('ObjectSummary', 'bucket_name key')
          obj_collection = (
              ObjectSummary(bucket_name='mybucket', key='file1.txt'),
              ObjectSummary(bucket_name='mybucket', key='file2.txt'),
              ObjectSummary(bucket_name='mybucket', key='file3.txt')
          )
  
          mock_client = mock.MagicMock()
          mock_client.filter.return_value = obj_collection
          mock_connection.return_value = mock_client
  
          s3_client = S3Resource(**self.init_args)
          s3_client.list_bucket_contents()
          print(result)
  
  </code></pre>
  <p>The returned list is always empty.</p>
  <p>The namedtuple part is just an attempt to mimic the bucket.objects.</p>
  <p>I would be open to solutions using botocore Stub, but I cannot use a third party library like moto. I just need to mock the call to bucket.objects.filter(). Thank you in advance.</p>