Exemplo n.º 1
0
    def test_upload_asset_bad_file(self, mock_session):
        '''
        Test that upload_asset() raises an error when its file_name
        argument isn't valid.
        '''
        mock_session.return_value = mock.MagicMock(post=mock.MagicMock())

        with self.assertRaises(ReleaseError), nostderrout():
            tools.upload_asset(token='test_token',
                               org='gslab-econ',
                               repo='gslab_python',
                               release_id='test_release',
                               file_name='nonexistent_file',
                               content_type='text/markdown')
Exemplo n.º 2
0
    def test_upload_asset_standard(self, mock_isfile, mock_open, mock_session):
        '''
        Test that upload_asset() correctly prepares a request
        to upload a release asset to GitHub.
        '''
        # Allow upload_asset() to work without an actual release asset file
        mock_isfile.return_value = True
        mock_open.return_value = 'file_object'

        # There are three connected requests-related mocks at play here:
        # i) mock_session: the requests.session() function
        # ii) the session object returned by requests.session
        # iii) the mocked post() method of the mocked session object
        mock_session.return_value = mock.MagicMock(post=mock.MagicMock())

        tools.upload_asset(token='test_token',
                           org='gslab-econ',
                           repo='gslab_python',
                           release_id='test_release',
                           file_name='release.txt',
                           content_type='text/markdown')

        # Check that upload_asset called a session object's post() method
        # once and with the correct arguments.
        mock_session.return_value.post.assert_called_once()

        keyword_args = mock_session.return_value.post.call_args[1]
        positional_args = mock_session.return_value.post.call_args[0]

        self.assertEqual(keyword_args['files']['file'], 'file_object')
        self.assertEqual(keyword_args['headers']['Authorization'],
                         'token test_token')
        self.assertEqual(keyword_args['headers']['Content-Type'],
                         'text/markdown')

        # Check that the first positional argument matches the desired upload path
        desired_upload_path = ''.join([
            'https://uploads.github.com/repos/',
            'gslab-econ/gslab_python/releases/',
            'test_release/assets?name=release.txt'
        ])
        self.assertEqual(positional_args[0], desired_upload_path)