def test_reports_batch_download_build_header(dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    bd._build_header()
    assert bd.header == ['File download URL']
def test_reports_batch_download_get_column_to_field_mapping(dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    assert list(bd._get_column_to_fields_mapping().items()) == [
        ('File download URL', ['files.href'])
    ]
def test_reports_batch_download_generate(index_workbook, dummy_request):
    from types import GeneratorType
    from encoded.reports.batch_download import BatchDownload
    from pyramid.response import Response
    dummy_request.environ['QUERY_STRING'] = ('type=Experiment')
    bd = BatchDownload(dummy_request)
    response = bd.generate()
    assert isinstance(response, Response)
    assert response.content_type == 'text/plain'
    assert response.content_disposition == 'attachment; filename="files.txt"'
    assert len(list(response.body)) >= 100
def test_reports_batch_download_build_params(dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    dummy_request.json = {'elements': ['/experiments/ENCSR123ABC/']}
    bd = BatchDownload(dummy_request)
    bd._build_params()
    assert len(bd.param_list['field']
               ) == 5, f'{len(bd.param_list["field"])} not expected'
    assert len(bd.param_list['@id']) == 1
def test_reports_batch_download_init_batch_download(dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    assert isinstance(bd, BatchDownload)
def test_reports_batch_download_get_encoded_metadata_link_with_newline(
        dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    metadata_link = bd._get_encoded_metadata_link_with_newline()
    assert metadata_link == (
        '"http://localhost/metadata/?type=Experiment'
        '&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status%21=archived&files.biological_replicates=2"'
        '\n').encode('utf-8')
    dummy_request.json = {
        'elements': ['/experiments/ENCSR123ABC/', '/experiments/ENCSRDEF567/']
    }
    bd = BatchDownload(dummy_request)
    metadata_link = bd._get_encoded_metadata_link_with_newline()
    assert metadata_link == (
        '"http://localhost/metadata/?type=Experiment'
        '&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status%21=archived&files.biological_replicates=2"'
        ' -X GET -H "Accept: text/tsv" -H "Content-Type: application/json"'
        ' --data \'{"elements": ["/experiments/ENCSR123ABC/", "/experiments/ENCSRDEF567/"]}\''
        '\n').encode('utf-8')
def test_reports_batch_download_default_params(dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    assert bd.DEFAULT_PARAMS == [
        ('limit', 'all'),
        ('field', 'files.@id'),
        ('field', 'files.href'),
        ('field', 'files.restricted'),
        ('field', 'files.no_file_available'),
        ('field', 'files.file_format'),
        ('field', 'files.file_format_type'),
        ('field', 'files.status'),
        ('field', 'files.assembly'),
    ]
def test_reports_batch_download_build_query_string(dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam')
    bd = BatchDownload(dummy_request)
    bd._initialize_report()
    bd._build_params()
    bd._build_query_string()
    bd.query_string.deduplicate()
    assert str(bd.query_string) == (
        'type=Experiment&files.file_type=bigWig'
        '&files.file_type=bam&limit=all&field=files.%40id'
        '&field=files.href&field=files.restricted'
        '&field=files.no_file_available&field=files.file_format'
        '&field=files.file_format_type&field=files.status'
        '&field=files.assembly&field=files.file_type')
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    bd._initialize_report()
    bd._build_params()
    bd._build_query_string()
    assert str(bd.query_string) == (
        'type=Experiment&files.file_type=bigWig'
        '&files.file_type=bam&files.replicate.library.size_range=50-100'
        '&files.status%21=archived&files.biological_replicates=2'
        '&limit=all&field=files.%40id&field=files.href&field=files.restricted'
        '&field=files.no_file_available&field=files.file_format'
        '&field=files.file_format_type&field=files.status&field=files.assembly'
        '&field=files.href&field=files.file_type&field=files.file_type'
        '&field=files.replicate.library.size_range&field=files.biological_replicates'
    )
def test_reports_batch_download_maybe_add_json_elements_to_metadata_link(
        dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    metadata_link = bd._maybe_add_json_elements_to_metadata_link('')
    assert metadata_link == ''
    dummy_request.json = {'elements': ['/experiments/ENCSR123ABC/']}
    bd = BatchDownload(dummy_request)
    metadata_link = bd._maybe_add_json_elements_to_metadata_link('')
    assert metadata_link == (
        ' -X GET -H "Accept: text/tsv" -H '
        '"Content-Type: application/json" '
        '--data \'{"elements": ["/experiments/ENCSR123ABC/"]}\'')
    dummy_request.json = {'elements': []}
    bd = BatchDownload(dummy_request)
    metadata_link = bd._maybe_add_json_elements_to_metadata_link('')
    assert metadata_link == ''
    dummy_request.json = {
        'elements': ['/experiments/ENCSR123ABC/', '/experiments/ENCSRDEF567/']
    }
    bd = BatchDownload(dummy_request)
    metadata_link = bd._maybe_add_json_elements_to_metadata_link('')
    assert metadata_link == (
        ' -X GET -H "Accept: text/tsv" -H '
        '"Content-Type: application/json" '
        '--data \'{"elements": ["/experiments/ENCSR123ABC/", "/experiments/ENCSRDEF567/"]}\''
    )
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2'
        '&cart=xyz123')
    dummy_request.json = {
        'elements': ['/experiments/ENCSR123ABC/', '/experiments/ENCSRDEF567/']
    }
    bd = BatchDownload(dummy_request)
    metadata_link = bd._maybe_add_json_elements_to_metadata_link('')
    assert metadata_link == ''
def test_reports_batch_download_should_add_json_elements_to_metadata_link(
        dummy_request):
    from encoded.reports.batch_download import BatchDownload
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2')
    bd = BatchDownload(dummy_request)
    assert not bd._should_add_json_elements_to_metadata_link()
    dummy_request.json = {'elements': ['/experiments/ENCSR123ABC/']}
    bd = BatchDownload(dummy_request)
    assert bd._should_add_json_elements_to_metadata_link()
    dummy_request.json = {'elements': []}
    bd = BatchDownload(dummy_request)
    assert not bd._should_add_json_elements_to_metadata_link()
    dummy_request.environ['QUERY_STRING'] = (
        'type=Experiment&files.file_type=bigWig&files.file_type=bam'
        '&files.replicate.library.size_range=50-100'
        '&files.status!=archived&files.biological_replicates=2'
        '&cart=xyz123')
    dummy_request.json = {
        'elements': ['/experiments/ENCSR123ABC/', '/experiments/ENCSRDEF567/']
    }
    bd = BatchDownload(dummy_request)
    assert not bd._should_add_json_elements_to_metadata_link()