import boto3
import pytest
import requests

from moto import mock_s3, mock_sqs, mock_sts, settings


@mock_sqs
@pytest.mark.network
def test_passthrough_requests() -> None:
    conn = boto3.client("sqs", region_name="us-west-1")
    conn.create_queue(QueueName="queue1")

    res = requests.get("https://google.com/")
    assert res.status_code < 400


if not settings.TEST_SERVER_MODE:

    @mock_sqs
    def test_requests_to_amazon_subdomains_dont_work() -> None:
        res = requests.get("https://fakeservice.amazonaws.com/foo/bar")
        assert res.content == b"The method is not implemented"
        assert res.status_code == 400


@mock_sts
@mock_s3
def test_decorator_ordering() -> None:
    """
    https://github.com/getmoto/moto/issues/3790#issuecomment-803979809
    """
    bucket_name = "banana-slugs"
    key = "trash-file"
    region = "us-east-1"
    client = boto3.client("s3", region_name=region)
    s3 = boto3.resource("s3", region_name=region)
    bucket = s3.Bucket(bucket_name)
    bucket.create()
    bucket.put_object(Body=b"ABCD", Key=key)
    presigned_url = client.generate_presigned_url(
        ClientMethod=client.get_object.__name__,
        Params={
            "Bucket": bucket_name,
            "Key": key,
            "ResponseContentDisposition": "attachment;filename=bar",
        },
    )

    resp = requests.get(presigned_url)
    assert resp.status_code == 200  # type: ignore[attr-defined]
