Repository: getmoto/moto (python)

Issue:
primary Athena workgroup is missing EnforceWorkGroupConfiguration
The primary Athena workgroup initialized [here](https://github.com/getmoto/moto/blob/master/moto/athena/models.py#L181-L183), does not have the `EnforceWorkGroupConfiguration` set. This prevents running `awswrangler.athena.read_sql_query()` against `moto`, resulting in 

```
File "... /awswrangler/athena/_utils.py", line 147, in _get_workgroup_config
    enforced = res["WorkGroup"]["Configuration"]["EnforceWorkGroupConfiguration"]
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'EnforceWorkGroupConfiguration'
```

I reported this first with `awswrangler` [here](https://github.com/aws/aws-sdk-pandas/issues/2904), and got the following reply

>The [line](https://github.com/aws/aws-sdk-pandas/blob/ae4a4e391eaacc00bc661eabc35cf6f91e84e560/awswrangler/athena/_utils.py#L146) you are referencing is using the Athena [get_workgroup](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena/client/get_work_group.html) boto3 API under the hood to pull the workgroup information. In the response, the EnforceWorkGroupConfiguration boolean is always returned.

>I agree that the enforce configuration is optional when creating a workgroup, but it is always available when getting it (i.e. a default is set if none is provided). So I would argue that the issue here lies with moto which is not creating/referencing the workgroup correctly

I currently work around this by creating my own `moto` Docker image like this:
```
FROM motoserver/moto:latest

RUN sed -i 's/name="primary", description="", configuration=dict(), tags=/name="primary", description="", configuration={"EnforceWorkGroupConfiguration": True}, tags=/' /usr/local/lib/python3.*/site-packages/moto/athena/models.py

```

Pull request:
Athena: delete_work_group() and default configuration
Fixes #7887 

Patch:
diff --git a/IMPLEMENTATION_COVERAGE.md b/IMPLEMENTATION_COVERAGE.md
index bac09b6de..a621e2919 100644
--- a/IMPLEMENTATION_COVERAGE.md
+++ b/IMPLEMENTATION_COVERAGE.md
@@ -434,7 +434,7 @@
 
 ## athena
 <details>
-<summary>23% implemented</summary>
+<summary>25% implemented</summary>
 
 - [ ] batch_get_named_query
 - [ ] batch_get_prepared_statement
@@ -452,7 +452,7 @@
 - [ ] delete_named_query
 - [ ] delete_notebook
 - [ ] delete_prepared_statement
-- [ ] delete_work_group
+- [X] delete_work_group
 - [ ] export_notebook
 - [ ] get_calculation_execution
 - [ ] get_calculation_execution_code
diff --git a/docs/docs/services/athena.rst b/docs/docs/services/athena.rst
index c90ccaf82..f016139ab 100644
--- a/docs/docs/services/athena.rst
+++ b/docs/docs/services/athena.rst
@@ -30,7 +30,7 @@ athena
 - [ ] delete_named_query
 - [ ] delete_notebook
 - [ ] delete_prepared_statement
-- [ ] delete_work_group
+- [X] delete_work_group
 - [ ] export_notebook
 - [ ] get_calculation_execution
 - [ ] get_calculation_execution_code
diff --git a/moto/athena/models.py b/moto/athena/models.py
index 1ca9d35bd..988cd387a 100644
--- a/moto/athena/models.py
+++ b/moto/athena/models.py
@@ -62,6 +62,20 @@ class WorkGroup(TaggableResourceMixin, BaseModel):
         self.description = description
         self.configuration = configuration
 
+        if "EnableMinimumEncryptionConfiguration" not in self.configuration:
+            self.configuration["EnableMinimumEncryptionConfiguration"] = False
+        if "EnforceWorkGroupConfiguration" not in self.configuration:
+            self.configuration["EnforceWorkGroupConfiguration"] = True
+        if "EngineVersion" not in self.configuration:
+            self.configuration["EngineVersion"] = {
+                "EffectiveEngineVersion": "Athena engine " "version 3",
+                "SelectedEngineVersion": "AUTO",
+            }
+        if "PublishCloudWatchMetricsEnabled" not in self.configuration:
+            self.configuration["PublishCloudWatchMetricsEnabled"] = False
+        if "RequesterPaysEnabled" not in self.configuration:
+            self.configuration["RequesterPaysEnabled"] = False
+
 
 class DataCatalog(TaggableResourceMixin, BaseModel):
     def __init__(
@@ -179,7 +193,13 @@ class AthenaBackend(BaseBackend):
 
         # Initialise with the primary workgroup
         self.create_work_group(
-            name="primary", description="", configuration=dict(), tags=[]
+            name="primary",
+            description="",
+            configuration={
+                "ResultConfiguration": {},
+                "EnforceWorkGroupConfiguration": False,
+            },
+            tags=[],
         )
 
     def create_work_group(
@@ -218,6 +238,9 @@ class AthenaBackend(BaseBackend):
             "CreationTime": time.time(),
         }
 
+    def delete_work_group(self, name: str) -> None:
+        self.work_groups.pop(name, None)
+
     def start_query_execution(
         self,
         query: str,
diff --git a/moto/athena/responses.py b/moto/athena/responses.py
index 75712e0f7..938f9a9ea 100644
--- a/moto/athena/responses.py
+++ b/moto/athena/responses.py
@@ -41,6 +41,11 @@ class AthenaResponse(BaseResponse):
         name = self._get_param("WorkGroup")
         return json.dumps({"WorkGroup": self.athena_backend.get_work_group(name)})
 
+    def delete_work_group(self) -> str:
+        name = self._get_param("WorkGroup")
+        self.athena_backend.delete_work_group(name)
+        return "{}"
+
     def start_query_execution(self) -> Union[Tuple[str, Dict[str, int]], str]:
         query = self._get_param("QueryString")
         context = self._get_param("QueryExecutionContext")
diff --git a/moto/cloudformation/responses.py b/moto/cloudformation/responses.py
index c1a81441c..b17187a6e 100644
--- a/moto/cloudformation/responses.py
+++ b/moto/cloudformation/responses.py
@@ -825,6 +825,9 @@ DESCRIBE_STACKS_TEMPLATE = """<DescribeStacksResponse>
           <member>
             <OutputKey>{{ output.key }}</OutputKey>
             <OutputValue>{{ output.value }}</OutputValue>
+            {% for export in stack.exports if export.value == output.value %}
+                <ExportName>{{ export.name }}</ExportName>
+            {% endfor %}
             {% if output.description %}<Description>{{ output.description }}</Description>{% endif %}
           </member>
         {% endfor %}


Test patch:
diff --git a/tests/test_athena/test_athena.py b/tests/test_athena/test_athena.py
index dafa7de42..c48c08f6a 100644
--- a/tests/test_athena/test_athena.py
+++ b/tests/test_athena/test_athena.py
@@ -5,6 +5,7 @@ from botocore.exceptions import ClientError
 from moto import mock_aws, settings
 from moto.athena.models import QueryResults, athena_backends
 from moto.core import DEFAULT_ACCOUNT_ID
+from tests import aws_verified
 
 
 @mock_aws
@@ -57,32 +58,56 @@ def test_create_work_group():
     assert work_group["State"] == "ENABLED"
 
 
-@mock_aws
+@aws_verified
+@pytest.mark.aws_verified
 def test_get_primary_workgroup():
     client = boto3.client("athena", region_name="us-east-1")
-    assert len(client.list_work_groups()["WorkGroups"]) == 1
+    assert len(client.list_work_groups()["WorkGroups"]) >= 1
 
     primary = client.get_work_group(WorkGroup="primary")["WorkGroup"]
     assert primary["Name"] == "primary"
-    assert primary["Configuration"] == {}
+    assert primary["Configuration"] == {
+        "ResultConfiguration": {},
+        "EnforceWorkGroupConfiguration": False,
+        "PublishCloudWatchMetricsEnabled": False,
+        "RequesterPaysEnabled": False,
+        "EngineVersion": {
+            "SelectedEngineVersion": "AUTO",
+            "EffectiveEngineVersion": "Athena engine version 3",
+        },
+        "EnableMinimumEncryptionConfiguration": False,
+    }
 
 
-@mock_aws
+@aws_verified
+@pytest.mark.aws_verified
 def test_create_and_get_workgroup():
     client = boto3.client("athena", region_name="us-east-1")
 
-    create_basic_workgroup(client=client, name="athena_workgroup")
-
-    work_group = client.get_work_group(WorkGroup="athena_workgroup")["WorkGroup"]
-    del work_group["CreationTime"]  # Were not testing creationtime atm
-    assert work_group == {
-        "Name": "athena_workgroup",
-        "State": "ENABLED",
-        "Configuration": {
-            "ResultConfiguration": {"OutputLocation": "s3://bucket-name/prefix/"}
-        },
-        "Description": "Test work group",
-    }
+    wg_name = "athena_workgroup"
+    create_basic_workgroup(client=client, name=wg_name)
+
+    try:
+        work_group = client.get_work_group(WorkGroup=wg_name)["WorkGroup"]
+        del work_group["CreationTime"]  # We're not testing creationtime atm
+        assert work_group == {
+            "Name": wg_name,
+            "State": "ENABLED",
+            "Configuration": {
+                "ResultConfiguration": {"OutputLocation": "s3://bucket-name/prefix/"},
+                "EnforceWorkGroupConfiguration": True,
+                "PublishCloudWatchMetricsEnabled": False,
+                "RequesterPaysEnabled": False,
+                "EngineVersion": {
+                    "SelectedEngineVersion": "AUTO",
+                    "EffectiveEngineVersion": "Athena engine version 3",
+                },
+                "EnableMinimumEncryptionConfiguration": False,
+            },
+            "Description": "Test work group",
+        }
+    finally:
+        client.delete_work_group(WorkGroup=wg_name)
 
 
 @mock_aws
diff --git a/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py b/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py
index 4320b1126..d34e6e4d5 100644
--- a/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py
+++ b/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py
@@ -239,16 +239,16 @@ dummy_output_template = {
     "AWSTemplateFormatVersion": "2010-09-09",
     "Description": "Stack 1",
     "Resources": {
-        "Instance": {
-            "Type": "AWS::EC2::Instance",
-            "Properties": {"ImageId": EXAMPLE_AMI_ID},
+        "mybucket": {
+            "Type": "AWS::S3::Bucket",
+            "Properties": {"Tags": [{"Key": "type", "Value": "testbucket"}]},
         }
     },
     "Outputs": {
         "StackVPC": {
             "Description": "The ID of the VPC",
             "Value": "VPCID",
-            "Export": {"Name": "My VPC ID"},
+            "Export": {"Name": "My-VPC-ID"},
         }
     },
 }
@@ -259,7 +259,7 @@ dummy_import_template = {
         "Queue": {
             "Type": "AWS::SQS::Queue",
             "Properties": {
-                "QueueName": {"Fn::ImportValue": "My VPC ID"},
+                "QueueName": {"Fn::ImportValue": "My-VPC-ID"},
                 "VisibilityTimeout": 60,
             },
         }
@@ -2325,23 +2325,33 @@ def test_stack_events():
     assert exp_metadata.get("HTTPStatusCode") == 400
 
 
-@mock_aws
+@pytest.mark.aws_verified
+@aws_verified
 def test_list_exports():
     cf_client = boto3.client("cloudformation", region_name=REGION_NAME)
     cf_resource = boto3.resource("cloudformation", region_name=REGION_NAME)
+    stack_name = f"mototest-with-exports-{str(uuid.uuid4())[0:6]}"
     stack = cf_resource.create_stack(
-        StackName=TEST_STACK_NAME, TemplateBody=dummy_output_template_json
+        StackName=stack_name, TemplateBody=dummy_output_template_json
     )
+    waiter = cf_client.get_waiter("stack_create_complete")
+    waiter.wait(StackName=stack_name)
     output_value = "VPCID"
-    exports = cf_client.list_exports()["Exports"]
-
-    assert len(stack.outputs) == 1
-    assert stack.outputs[0]["OutputValue"] == output_value
-
-    assert len(exports) == 1
-    assert exports[0]["ExportingStackId"] == stack.stack_id
-    assert exports[0]["Name"] == "My VPC ID"
-    assert exports[0]["Value"] == output_value
+    try:
+        assert len(stack.outputs) == 1
+        assert stack.outputs[0]["OutputKey"] == "StackVPC"
+        assert stack.outputs[0]["OutputValue"] == output_value
+        assert stack.outputs[0]["Description"] == "The ID of the VPC"
+        assert stack.outputs[0]["ExportName"] == "My-VPC-ID"
+
+        exports = cf_client.list_exports()["Exports"]
+
+        assert len(exports) == 1
+        assert exports[0]["ExportingStackId"] == stack.stack_id
+        assert exports[0]["Name"] == "My-VPC-ID"
+        assert exports[0]["Value"] == output_value
+    finally:
+        cf_client.delete_stack(StackName=stack_name)
 
 
 @mock_aws