# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import pytest

from libcloud.storage.drivers.dummy import DummyStorageDriver


@pytest.fixture
def driver():
    return DummyStorageDriver('key', 'id')


@pytest.fixture
def container_with_contents(driver):
    container_name = 'test'
    object_name = 'test.dat'
    container = driver.create_container(container_name=container_name)
    driver.upload_object(
        __file__, container=container, object_name=object_name
    )
    return container_name, object_name


def test_list_container_objects(driver, container_with_contents):
    container_name, object_name = container_with_contents
    container = driver.get_container(container_name)

    objects = driver.list_container_objects(container=container)

    assert any(o for o in objects if o.name == object_name)


def test_list_container_objects_filter_by_prefix(
    driver, container_with_contents
):
    container_name, object_name = container_with_contents
    container = driver.get_container(container_name)

    objects = driver.list_container_objects(
        container=container, ex_prefix=object_name[:3]
    )
    assert any(o for o in objects if o.name == object_name)

    objects = driver.list_container_objects(
        container=container, ex_prefix='does-not-exist.dat'
    )
    assert not objects
