def test_init_default_stdout(self):
        options = argparse.Namespace()

        command = commands.Command(options)

        assert command.options == options
        assert command.stdout == sys.stdout
    def test_upload_files(self):
        options = argparse.Namespace()
        stdout = StdOutIO()
        command = commands.Command(options, stdout=stdout)
        uploader = mock.create_autospec(upload.PackageUploader,
                                        host='http://localhost:8000')
        upload_results = [None, exceptions.PackageConflictError('foo')]

        def upload_side_effect(*args):
            result = upload_results.pop()
            if isinstance(result, Exception):
                raise result
            return result

        uploader.upload.side_effect = upload_side_effect

        command._upload_files(
            uploader,
            ['packages/mock-1.0.1.tar.gz', 'packages/coverage-3.7.1.tar.gz'])

        stdout.seek(0)
        assert uploader.upload.call_args_list == [
            mock.call('packages/mock-1.0.1.tar.gz'),
            mock.call('packages/coverage-3.7.1.tar.gz'),
        ]
        assert stdout.read() == (
            'Uploading packages to http://localhost:8000\n'
            'Uploading packages/mock-1.0.1.tar.gz... already uploaded.\n'
            'Uploading packages/coverage-3.7.1.tar.gz... success.\n')
    def test_print(self):
        options = argparse.Namespace()
        stdout = StdOutIO()
        command = commands.Command(options, stdout=stdout)

        command._print('Foo bar\n')
        command._print('baz\n')

        stdout.seek(0)
        assert stdout.read() == 'Foo bar\nbaz\n'
    def test_init(self):
        options = argparse.Namespace(command='requirements',
                                     index='internal',
                                     requirements_file='requirements.txt')
        stdout = StdOutIO()

        command = commands.Command(options, stdout=stdout)

        assert command.options == options
        assert command.stdout == stdout
    def test_upload_file(self):
        options = argparse.Namespace()
        stdout = StdOutIO()
        command = commands.Command(options, stdout=stdout)
        uploader = mock.create_autospec(upload.PackageUploader)

        command._upload_file(uploader, 'mock-1.0.1.tar.gz')

        stdout.seek(0)
        assert uploader.upload.call_args == mock.call('mock-1.0.1.tar.gz')
        assert stdout.read() == 'Uploading mock-1.0.1.tar.gz... success.\n'
    def test_get_filenames_for_files_command(self, download_mock):
        files = [
            'packages/coverage-3.7.1.tar.gz',
            'packages/mock-1.0.1.tar.gz',
        ]
        options = argparse.Namespace(command='files', files=files)
        command = commands.Command(options)

        filenames = command._get_filenames()

        assert not download_mock.called
        assert filenames == files
    def test_get_filenames_for_requirements_command(self, download_mock):
        download_return_value = [
            'packages/coverage-3.7.1.tar.gz',
            'packages/mock-1.0.1.tar.gz',
        ]
        download_mock.return_value = download_return_value
        options = argparse.Namespace(command='requirements')
        command = commands.Command(options)

        filenames = command._get_filenames()

        assert filenames == download_return_value
    def test_make_uploader(self, from_file_mock):
        from_file_mock.side_effect = exceptions.ConfigFileError
        options = argparse.Namespace(index='http://localhost:8000',
                                     username='******',
                                     password='******')
        command = commands.Command(options)

        uploader = command._make_uploader()

        assert uploader.host == 'http://localhost:8000'
        assert uploader.username == 'foo'
        assert uploader.password == 'bar'
    def test_upload_file_conflict(self):
        options = argparse.Namespace()
        stdout = StdOutIO()
        command = commands.Command(options, stdout=stdout)
        uploader = mock.create_autospec(upload.PackageUploader)
        uploader.upload.side_effect = exceptions.PackageConflictError('foo')

        command._upload_file(uploader, 'mock-1.0.1.tar.gz')

        stdout.seek(0)
        assert uploader.upload.call_args == mock.call('mock-1.0.1.tar.gz')
        assert stdout.read() == (
            'Uploading mock-1.0.1.tar.gz... already uploaded.\n')
    def test_download_requirements_file_no_use_wheel(self, download_mock):
        options = argparse.Namespace(requirements_file='requirements.txt',
                                     download_dir=None,
                                     no_use_wheel=True)
        command = commands.Command(options)

        command._download()

        assert len(download_mock.call_args_list) == 1
        downloader = download_mock.call_args[0][0]
        expected_call = mock.call(downloader,
                                  requirements=None,
                                  requirements_file='requirements.txt',
                                  no_use_wheel=True)
        assert download_mock.call_args == expected_call
    def test_run(self, make_uploader_mock, get_filenames_mock,
                 upload_files_mock):
        uploader = mock.create_autospec(upload.PackageUploader)
        filenames = [
            'packages/coverage-3.7.1.tar.gz',
            'packages/mock-1.0.1.tar.gz',
        ]
        make_uploader_mock.return_value = uploader
        get_filenames_mock.return_value = filenames
        options = argparse.Namespace()
        command = commands.Command(options)

        command.run()

        expected_call = mock.call(command, uploader, filenames)
        assert make_uploader_mock.called
        assert get_filenames_mock.called
        assert upload_files_mock.call_args == expected_call
    def test_download_requirements_file(self, download_mock):
        download_return_value = [
            'packages/coverage-3.7.1.tar.gz',
            'packages/mock-1.0.1.tar.gz',
        ]
        download_mock.return_value = download_return_value
        options = argparse.Namespace(download_dir='~/packages',
                                     requirements_file='requirements.txt',
                                     no_use_wheel=False)
        command = commands.Command(options)

        filenames = command._download()

        assert filenames == download_return_value
        assert len(download_mock.call_args_list) == 1
        downloader = download_mock.call_args[0][0]
        assert downloader.download_path == '~/packages'
        expected_call = mock.call(downloader,
                                  requirements=None,
                                  requirements_file='requirements.txt',
                                  no_use_wheel=False)
        assert download_mock.call_args == expected_call