def test_detectors_list(monkeypatch):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_detectorslist = MagicMock(return_value=['foo', 'bar'])
    mock_detectorslist.called is False
    monkeypatch.setattr(APIClient, 'list_detectors', mock_detectorslist)
    parse_args(['list', 'detectors'])
    mock_detectorslist.called is True
def test_parser_arg_errors(capsys):
    # SystemExit does not inherit from Exception
    with pytest.raises(BaseException):
        parse_args(['-foobar', '-spam'])
    captured = capsys.readouterr()
    assert 'unrecognized arguments' in captured.err
    assert 'foobar' in captured.err
def test_rasters_list_output_format(monkeypatch, capsys):
    # Setup
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_rasterlist = MagicMock(return_value=[{
        'id': 4,
        'name': 'foo'
    }, {
        'id': 5,
        'name': 'bar'
    }])
    assert mock_rasterlist.called is False
    monkeypatch.setattr(APIClient, 'list_rasters', mock_rasterlist)
    # JSON
    for a in ['list', 'rasters'], ['list', 'rasters', '--output', 'json']:
        parse_args(a)
        assert json.loads(capsys.readouterr().out.replace(
            "\n", "")) == json.loads(
                '[{"id": 4, "name": "foo"}, {"id": 5, "name": "bar"}]')
        assert mock_rasterlist.called is True
        mock_rasterlist.reset_mock()
        assert mock_rasterlist.called is False
    # IDs only
    parse_args(['list', 'rasters', '--output', 'ids_only'])
    assert mock_rasterlist.called is True
    assert capsys.readouterr().out.replace("\n", "", 2) == '45'
def test_train(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_train = MagicMock()
    monkeypatch.setattr(APIClient, 'train_detector', mock_train)
    with pytest.raises(BaseException):
        parse_args(['train'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'detector' in captured.err
    assert mock_train.called is False
    parse_args(['train', 'my_detector_id'])
    mock_train.assert_called_with('my_detector_id')
def test_rasters_list(monkeypatch):
    # Setup
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_rasterlist = MagicMock(return_value=['foo', 'bar'])
    assert mock_rasterlist.called is False
    monkeypatch.setattr(APIClient, 'list_rasters', mock_rasterlist)
    parse_args(['list', 'rasters'])
    assert mock_rasterlist.called is True
    mock_rasterlist.reset_mock()
    assert mock_rasterlist.called is False
    parse_args(['list', 'rasters', '--folder', 'foobar'])
    mock_rasterlist.assert_called_with('foobar')
def test_delete_raster(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_delete = MagicMock()
    monkeypatch.setattr(APIClient, 'delete_raster', mock_delete)
    assert mock_delete.called is False
    with pytest.raises(BaseException):
        parse_args(['delete', 'raster'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'raster' in captured.err
    assert mock_delete.called is False
    parse_args(['delete', 'raster', 'my_raster'])
    mock_delete.assert_called_with('my_raster')
def test_create_detectionarea(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_set_detectionarea = MagicMock()
    monkeypatch.setattr(APIClient, 'set_raster_detection_areas_from_file',
                        mock_set_detectionarea)
    assert mock_set_detectionarea.called is False
    with pytest.raises(BaseException):
        parse_args(['create', 'detection_area'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'path' in captured.err
    assert mock_set_detectionarea.called is False
    parse_args(['create', 'detection_area', 'path/to/open', 'my_raster'])
    mock_set_detectionarea.assert_called_with('my_raster', 'path/to/open')
Example #8
0
def test_download_raster(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_download = MagicMock()
    monkeypatch.setattr(APIClient, 'download_raster_to_file', mock_download)
    assert mock_download.called is False
    with pytest.raises(BaseException):
        parse_args(['download', 'raster', 'my_raster_id'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'path' in captured.err
    assert mock_download.called is False
    parse_args(['download', 'raster', 'my_raster_id', 'a_path'])
    assert mock_download.called is True
    mock_download.assert_called_with('my_raster_id', 'a_path')
Example #9
0
def test_create_raster__from_file(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_create_raster, mock_add_raster = MagicMock(
        return_value='spam'), MagicMock()
    mock_raster_datetime_name = MagicMock(return_value='foobar')
    monkeypatch.setattr(APIClient, 'upload_raster', mock_create_raster)
    monkeypatch.setattr(APIClient, 'add_raster_to_detector', mock_add_raster)
    monkeypatch.setattr(__main__, '_raster_datetime_name',
                        mock_raster_datetime_name)
    assert mock_create_raster.called is False
    assert mock_add_raster.called is False
    with pytest.raises(BaseException):
        parse_args(['create', 'raster', 'file'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'path' in captured.err
    with pytest.raises(BaseException):
        parse_args(['create', 'raster'])
    captured = capsys.readouterr()
    assert 'usage' in captured.out
    assert mock_create_raster.called is False
    assert mock_add_raster.called is False
    parse_args(['create', 'raster', 'file', 'my_path_to_tiff'])
    mock_create_raster.assert_called_with('my_path_to_tiff', 'foobar', None)
    assert mock_add_raster.called is False
    mock_create_raster.reset_mock()
    mock_add_raster.reset_mock()
    parse_args([
        'create', 'raster', 'file', 'my_path_to_tiff', '--name', 'beacon',
        '--folder', 'eggs', '--detector', 'a', 'b', 'c'
    ])
    mock_create_raster.assert_called_with('my_path_to_tiff', 'beacon', 'eggs')
    assert mock_add_raster.call_count == 3
    mock_add_raster.assert_called_with('spam', 'c')
def test_create_annotation(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_set_annotations = MagicMock()
    monkeypatch.setattr(APIClient, 'set_annotations', mock_set_annotations)
    assert mock_set_annotations.called is False
    with pytest.raises(BaseException):
        parse_args(['create', 'annotation'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'type' in captured.err
    assert mock_set_annotations.called is False
    with patch("builtins.open", mock_open(read_data='{"a":3}')):
        parse_args([
            'create', 'annotation', 'path/to/open', 'my_raster', 'my_detector',
            'training_area'
        ])
        mock_set_annotations.assert_called_with('my_detector', 'my_raster',
                                                'training_area', {"a": 3})
def test_create_detector(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_create_detector, mock_add_raster = MagicMock(
        return_value='spam'), MagicMock()
    monkeypatch.setattr(APIClient, 'create_detector', mock_create_detector)
    monkeypatch.setattr(APIClient, 'add_raster_to_detector', mock_add_raster)
    assert mock_create_detector.called is False
    assert mock_add_raster.called is False
    parse_args(['create', 'detector'])
    mock_create_detector.assert_called_with(None, 'count', 'polygon', 500)
    assert mock_add_raster.call_count == 0
    mock_create_detector.reset_mock()
    mock_add_raster.reset_mock()
    parse_args([
        'create', 'detector', '--output-type', 'bbox', '--detection-type',
        'segmentation', '--raster', 'foo', '--training-steps', '888', '--name',
        'foobar'
    ])
    mock_create_detector.assert_called_with('foobar', 'segmentation', 'bbox',
                                            888)
    assert mock_add_raster.call_count == 1
    mock_add_raster.assert_called_with('foo', 'spam')
def test_prediction(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_run, mock_download = MagicMock(return_value='foobar'), MagicMock()
    monkeypatch.setattr(APIClient, 'run_detector', mock_run)
    monkeypatch.setattr(APIClient, 'download_result_to_file', mock_download)
    with pytest.raises(BaseException):
        parse_args(['detect'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'raster' in captured.err
    assert (mock_run.called or mock_download.called) is False
    with pytest.raises(BaseException):
        parse_args(['detect', 'my_raster_id'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'detector' in captured.err
    assert (mock_run.called or mock_download.called) is False
    parse_args(['detect', 'my_raster_id', 'my_detector_id', 'a_path'])
    assert (mock_run.called and mock_download.called) is True
Example #13
0
def test_prediction(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_run, mock_download_file, mock_download_url, mock_url = MagicMock(
        return_value='foobar'), MagicMock(), MagicMock(), MagicMock(
            return_value='spam')
    monkeypatch.setattr(APIClient, 'run_detector', mock_run)
    monkeypatch.setattr(APIClient, 'download_result_to_feature_collection',
                        mock_download_file)
    monkeypatch.setattr(APIClient, 'download_operation_results_to_file',
                        mock_download_url)
    monkeypatch.setattr(APIClient, 'get_operation_results_url', mock_url)
    monkeypatch.setattr(__main__, '_read_in_chunks', _mock_read_in_chunks)
    with pytest.raises(BaseException):
        parse_args(['detect'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'raster' in captured.err
    assert (mock_run.called or mock_download_file.called
            or mock_url.called) is False
    with pytest.raises(BaseException):
        parse_args(['detect', 'my_raster_id'])
    assert 'following arguments are required' in captured.err
    assert 'detector' in captured.err
    assert (mock_run.called or mock_download_file.called
            or mock_url.called) is False
    # Base (print URL)
    assert mock_download_url.called is False
    parse_args(['detect', 'my_raster_id', 'my_detector_id'])
    assert capsys.readouterr().out.replace('\n', '') == 'spam'
    assert capsys.readouterr().err == ''
    mock_run.reset_mock()
    mock_download_file.reset_mock()
    mock_url.reset_mock()
    parse_args(
        ['detect', 'my_raster_id', 'my_detector_id', '--output-type', 'url'])
    assert capsys.readouterr().out.replace('\n', '') == 'spam'
    assert capsys.readouterr().err == ''
    mock_run.reset_mock()
    mock_download_file.reset_mock()
    mock_url.reset_mock()
    # Print result data
    assert mock_download_url.called is False
    parse_args([
        'detect', 'my_raster_id', 'my_detector_id', '--output-type',
        'geometries'
    ])
    assert capsys.readouterr().out == 'quinoa'
    assert capsys.readouterr().err == ''
    assert mock_run.called is True
    assert mock_download_file.called is True
    assert mock_download_url.called is False
    mock_run.reset_mock()
    mock_download_file.reset_mock()
    mock_url.reset_mock()
    # Write result URL to file
    assert mock_download_url.called is False
    mock_open = MagicMock()
    with patch('builtins.open', new_callable=mock_open()):
        parse_args([
            'detect', 'my_raster_id', 'my_detector_id', '--output-type', 'url',
            '--output-file', 'a_path'
        ])
    assert capsys.readouterr().out + capsys.readouterr().err == ''
    assert mock_download_url.called is True
    assert mock_download_file.called is False
    mock_download_url.assert_called_with('foobar', 'a_path')
    mock_download_url.reset_mock()
    with patch('builtins.open', new_callable=mock_open()):
        parse_args([
            'detect', 'my_raster_id', 'my_detector_id', '--output-file',
            'a_path'
        ])
    assert capsys.readouterr().out + capsys.readouterr().err == ''
    assert mock_download_url.called is True
    assert mock_download_file.called is False
    mock_download_url.assert_called_with('foobar', 'a_path')
    mock_download_url.reset_mock()
    # Write result data to file
    assert mock_download_file.called is False
    with patch('builtins.open', new_callable=mock_open()):
        parse_args([
            'detect', 'my_raster_id', 'my_detector_id', '--output-type',
            'geometries', '--output-file', 'a_path'
        ])
        assert capsys.readouterr().out + capsys.readouterr().err == ''
        assert mock_download_file.called is True
        mock_download_file.assert_called_with('foobar', 'a_path')
Example #14
0
def test_create_raster__from_remote(monkeypatch, capsys):
    monkeypatch.setattr(APIClient, '__init__', _fake__init__)
    mock_create_raster, mock_add_raster = MagicMock(
        return_value='spam'), MagicMock()
    monkeypatch.setattr(APIClient, 'upload_remote_raster', mock_create_raster)
    monkeypatch.setattr(APIClient, 'add_raster_to_detector', mock_add_raster)
    assert (mock_create_raster.called or mock_add_raster.called) is False
    # Errors
    with pytest.raises(BaseException):
        parse_args(['create', 'raster'])
    captured = capsys.readouterr()
    assert 'usage' in captured.out
    with pytest.raises(BaseException):
        parse_args(['create', 'raster', 'remote'])
    captured = capsys.readouterr()
    assert 'following arguments are required' in captured.err
    assert 'resolution' in captured.err
    assert (mock_create_raster.called or mock_add_raster.called) is False
    for bad_coords in ('5.0,50.0,6.0', '5.0,50.0,6.0,60.0,88.0'):
        with pytest.raises(BaseException):
            parse_args([
                'create', 'raster', 'remote', 'xyz', 'https://xyz.example.org',
                '0.25', bad_coords
            ])
        assert '4 coordinates' in capsys.readouterr().err
        assert (mock_create_raster.called or mock_add_raster.called) is False
    for bad_coords in ('5.0,50.0,6.0,99.0', '225.0,50.0,6.0,60.0'):
        with pytest.raises(BaseException):
            parse_args([
                'create', 'raster', 'remote', 'xyz', 'https://xyz.example.org',
                '0.25', bad_coords
            ])
        assert 'valid' in capsys.readouterr().err
        assert (mock_create_raster.called or mock_add_raster.called) is False
    for bad_coords in ('5.0,50.0,6.0,40.0', '8.0,50.0,6.0,60.0'):
        with pytest.raises(BaseException):
            parse_args([
                'create', 'raster', 'remote', 'xyz', 'https://xyz.example.org',
                '0.25', bad_coords
            ])
        assert 'order' in capsys.readouterr().err
        assert (mock_create_raster.called or mock_add_raster.called) is False
    # Working cases
    parse_args([
        'create', 'raster', 'remote', 'xyz', 'https://xyz.example.org', '0.25',
        '5.0,50.0,6.0,60.0'
    ])
    footprint = {
        "type":
        "Polygon",
        "coordinates": [[[5.0, 50.0], [6.0, 50.0], [6.0, 60.0], [5.0, 60.0],
                         [5.0, 50.0]]]
    }
    mock_create_raster.assert_called_with('xyz', 'https://xyz.example.org',
                                          0.25, footprint, None, None, None)
    assert mock_add_raster.called is False
    mock_create_raster.reset_mock()
    mock_add_raster.reset_mock()
    parse_args([
        'create', 'raster', 'remote', 'xyz', 'https://xyz.example.org', '0.25',
        '5.0,50.0,6.0,60.0', '--credentials', 'foo:bar', '--name', 'beacon',
        '--folder', 'eggs', '--detector', 'a', 'b', 'c'
    ])
    mock_create_raster.assert_called_with('xyz', 'https://xyz.example.org',
                                          0.25, footprint, 'foo:bar', 'beacon',
                                          'eggs')
    assert mock_add_raster.call_count == 3
    mock_add_raster.assert_called_with('spam', 'c')