diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/AppTest/TestCase.hs b/gen/Stratosphere/AppTest/TestCase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase.hs
@@ -0,0 +1,59 @@
+module Stratosphere.AppTest.TestCase (
+        module Exports, TestCase(..), mkTestCase
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.StepProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TestCase
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apptest-testcase.html>
+    TestCase {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apptest-testcase.html#cfn-apptest-testcase-description>
+              description :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apptest-testcase.html#cfn-apptest-testcase-name>
+              name :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apptest-testcase.html#cfn-apptest-testcase-steps>
+              steps :: [StepProperty],
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apptest-testcase.html#cfn-apptest-testcase-tags>
+              tags :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text)))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTestCase :: Value Prelude.Text -> [StepProperty] -> TestCase
+mkTestCase name steps
+  = TestCase
+      {haddock_workaround_ = (), name = name, steps = steps,
+       description = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TestCase where
+  toResourceProperties TestCase {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "Steps" JSON..= steps]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TestCase where
+  toJSON TestCase {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "Steps" JSON..= steps]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" TestCase where
+  type PropertyType "Description" TestCase = Value Prelude.Text
+  set newValue TestCase {..}
+    = TestCase {description = Prelude.pure newValue, ..}
+instance Property "Name" TestCase where
+  type PropertyType "Name" TestCase = Value Prelude.Text
+  set newValue TestCase {..} = TestCase {name = newValue, ..}
+instance Property "Steps" TestCase where
+  type PropertyType "Steps" TestCase = [StepProperty]
+  set newValue TestCase {..} = TestCase {steps = newValue, ..}
+instance Property "Tags" TestCase where
+  type PropertyType "Tags" TestCase = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue TestCase {..}
+    = TestCase {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/BatchProperty.hs b/gen/Stratosphere/AppTest/TestCase/BatchProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/BatchProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.AppTest.TestCase.BatchProperty (
+        BatchProperty(..), mkBatchProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BatchProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-batch.html>
+    BatchProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-batch.html#cfn-apptest-testcase-batch-batchjobname>
+                   batchJobName :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-batch.html#cfn-apptest-testcase-batch-batchjobparameters>
+                   batchJobParameters :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text))),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-batch.html#cfn-apptest-testcase-batch-exportdatasetnames>
+                   exportDataSetNames :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBatchProperty :: Value Prelude.Text -> BatchProperty
+mkBatchProperty batchJobName
+  = BatchProperty
+      {haddock_workaround_ = (), batchJobName = batchJobName,
+       batchJobParameters = Prelude.Nothing,
+       exportDataSetNames = Prelude.Nothing}
+instance ToResourceProperties BatchProperty where
+  toResourceProperties BatchProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.Batch",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BatchJobName" JSON..= batchJobName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BatchJobParameters" Prelude.<$> batchJobParameters,
+                               (JSON..=) "ExportDataSetNames" Prelude.<$> exportDataSetNames]))}
+instance JSON.ToJSON BatchProperty where
+  toJSON BatchProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BatchJobName" JSON..= batchJobName]
+              (Prelude.catMaybes
+                 [(JSON..=) "BatchJobParameters" Prelude.<$> batchJobParameters,
+                  (JSON..=) "ExportDataSetNames" Prelude.<$> exportDataSetNames])))
+instance Property "BatchJobName" BatchProperty where
+  type PropertyType "BatchJobName" BatchProperty = Value Prelude.Text
+  set newValue BatchProperty {..}
+    = BatchProperty {batchJobName = newValue, ..}
+instance Property "BatchJobParameters" BatchProperty where
+  type PropertyType "BatchJobParameters" BatchProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue BatchProperty {..}
+    = BatchProperty {batchJobParameters = Prelude.pure newValue, ..}
+instance Property "ExportDataSetNames" BatchProperty where
+  type PropertyType "ExportDataSetNames" BatchProperty = ValueList Prelude.Text
+  set newValue BatchProperty {..}
+    = BatchProperty {exportDataSetNames = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/BatchProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/BatchProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/BatchProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.BatchProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BatchProperty :: Prelude.Type
+instance ToResourceProperties BatchProperty
+instance Prelude.Eq BatchProperty
+instance Prelude.Show BatchProperty
+instance JSON.ToJSON BatchProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/CloudFormationActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/CloudFormationActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/CloudFormationActionProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.AppTest.TestCase.CloudFormationActionProperty (
+        CloudFormationActionProperty(..), mkCloudFormationActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudFormationActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-cloudformationaction.html>
+    CloudFormationActionProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-cloudformationaction.html#cfn-apptest-testcase-cloudformationaction-actiontype>
+                                  actionType :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-cloudformationaction.html#cfn-apptest-testcase-cloudformationaction-resource>
+                                  resource :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudFormationActionProperty ::
+  Value Prelude.Text -> CloudFormationActionProperty
+mkCloudFormationActionProperty resource
+  = CloudFormationActionProperty
+      {haddock_workaround_ = (), resource = resource,
+       actionType = Prelude.Nothing}
+instance ToResourceProperties CloudFormationActionProperty where
+  toResourceProperties CloudFormationActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.CloudFormationAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Resource" JSON..= resource]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ActionType" Prelude.<$> actionType]))}
+instance JSON.ToJSON CloudFormationActionProperty where
+  toJSON CloudFormationActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Resource" JSON..= resource]
+              (Prelude.catMaybes
+                 [(JSON..=) "ActionType" Prelude.<$> actionType])))
+instance Property "ActionType" CloudFormationActionProperty where
+  type PropertyType "ActionType" CloudFormationActionProperty = Value Prelude.Text
+  set newValue CloudFormationActionProperty {..}
+    = CloudFormationActionProperty
+        {actionType = Prelude.pure newValue, ..}
+instance Property "Resource" CloudFormationActionProperty where
+  type PropertyType "Resource" CloudFormationActionProperty = Value Prelude.Text
+  set newValue CloudFormationActionProperty {..}
+    = CloudFormationActionProperty {resource = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/CloudFormationActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/CloudFormationActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/CloudFormationActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.CloudFormationActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudFormationActionProperty :: Prelude.Type
+instance ToResourceProperties CloudFormationActionProperty
+instance Prelude.Eq CloudFormationActionProperty
+instance Prelude.Show CloudFormationActionProperty
+instance JSON.ToJSON CloudFormationActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/CompareActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/CompareActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/CompareActionProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.AppTest.TestCase.CompareActionProperty (
+        module Exports, CompareActionProperty(..), mkCompareActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.InputProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.OutputProperty as Exports
+import Stratosphere.ResourceProperties
+data CompareActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-compareaction.html>
+    CompareActionProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-compareaction.html#cfn-apptest-testcase-compareaction-input>
+                           input :: InputProperty,
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-compareaction.html#cfn-apptest-testcase-compareaction-output>
+                           output :: (Prelude.Maybe OutputProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCompareActionProperty :: InputProperty -> CompareActionProperty
+mkCompareActionProperty input
+  = CompareActionProperty
+      {haddock_workaround_ = (), input = input, output = Prelude.Nothing}
+instance ToResourceProperties CompareActionProperty where
+  toResourceProperties CompareActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.CompareAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Input" JSON..= input]
+                           (Prelude.catMaybes [(JSON..=) "Output" Prelude.<$> output]))}
+instance JSON.ToJSON CompareActionProperty where
+  toJSON CompareActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Input" JSON..= input]
+              (Prelude.catMaybes [(JSON..=) "Output" Prelude.<$> output])))
+instance Property "Input" CompareActionProperty where
+  type PropertyType "Input" CompareActionProperty = InputProperty
+  set newValue CompareActionProperty {..}
+    = CompareActionProperty {input = newValue, ..}
+instance Property "Output" CompareActionProperty where
+  type PropertyType "Output" CompareActionProperty = OutputProperty
+  set newValue CompareActionProperty {..}
+    = CompareActionProperty {output = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/CompareActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/CompareActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/CompareActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.CompareActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CompareActionProperty :: Prelude.Type
+instance ToResourceProperties CompareActionProperty
+instance Prelude.Eq CompareActionProperty
+instance Prelude.Show CompareActionProperty
+instance JSON.ToJSON CompareActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/DataSetProperty.hs b/gen/Stratosphere/AppTest/TestCase/DataSetProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/DataSetProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.AppTest.TestCase.DataSetProperty (
+        DataSetProperty(..), mkDataSetProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DataSetProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-dataset.html>
+    DataSetProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-dataset.html#cfn-apptest-testcase-dataset-ccsid>
+                     ccsid :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-dataset.html#cfn-apptest-testcase-dataset-format>
+                     format :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-dataset.html#cfn-apptest-testcase-dataset-length>
+                     length :: (Value Prelude.Double),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-dataset.html#cfn-apptest-testcase-dataset-name>
+                     name :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-dataset.html#cfn-apptest-testcase-dataset-type>
+                     type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDataSetProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Double
+        -> Value Prelude.Text -> Value Prelude.Text -> DataSetProperty
+mkDataSetProperty ccsid format length name type'
+  = DataSetProperty
+      {haddock_workaround_ = (), ccsid = ccsid, format = format,
+       length = length, name = name, type' = type'}
+instance ToResourceProperties DataSetProperty where
+  toResourceProperties DataSetProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.DataSet",
+         supportsTags = Prelude.False,
+         properties = ["Ccsid" JSON..= ccsid, "Format" JSON..= format,
+                       "Length" JSON..= length, "Name" JSON..= name,
+                       "Type" JSON..= type']}
+instance JSON.ToJSON DataSetProperty where
+  toJSON DataSetProperty {..}
+    = JSON.object
+        ["Ccsid" JSON..= ccsid, "Format" JSON..= format,
+         "Length" JSON..= length, "Name" JSON..= name, "Type" JSON..= type']
+instance Property "Ccsid" DataSetProperty where
+  type PropertyType "Ccsid" DataSetProperty = Value Prelude.Text
+  set newValue DataSetProperty {..}
+    = DataSetProperty {ccsid = newValue, ..}
+instance Property "Format" DataSetProperty where
+  type PropertyType "Format" DataSetProperty = Value Prelude.Text
+  set newValue DataSetProperty {..}
+    = DataSetProperty {format = newValue, ..}
+instance Property "Length" DataSetProperty where
+  type PropertyType "Length" DataSetProperty = Value Prelude.Double
+  set newValue DataSetProperty {..}
+    = DataSetProperty {length = newValue, ..}
+instance Property "Name" DataSetProperty where
+  type PropertyType "Name" DataSetProperty = Value Prelude.Text
+  set newValue DataSetProperty {..}
+    = DataSetProperty {name = newValue, ..}
+instance Property "Type" DataSetProperty where
+  type PropertyType "Type" DataSetProperty = Value Prelude.Text
+  set newValue DataSetProperty {..}
+    = DataSetProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/DataSetProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/DataSetProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/DataSetProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.DataSetProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DataSetProperty :: Prelude.Type
+instance ToResourceProperties DataSetProperty
+instance Prelude.Eq DataSetProperty
+instance Prelude.Show DataSetProperty
+instance JSON.ToJSON DataSetProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/DatabaseCDCProperty.hs b/gen/Stratosphere/AppTest/TestCase/DatabaseCDCProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/DatabaseCDCProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.AppTest.TestCase.DatabaseCDCProperty (
+        module Exports, DatabaseCDCProperty(..), mkDatabaseCDCProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.SourceDatabaseMetadataProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.TargetDatabaseMetadataProperty as Exports
+import Stratosphere.ResourceProperties
+data DatabaseCDCProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-databasecdc.html>
+    DatabaseCDCProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-databasecdc.html#cfn-apptest-testcase-databasecdc-sourcemetadata>
+                         sourceMetadata :: SourceDatabaseMetadataProperty,
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-databasecdc.html#cfn-apptest-testcase-databasecdc-targetmetadata>
+                         targetMetadata :: TargetDatabaseMetadataProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDatabaseCDCProperty ::
+  SourceDatabaseMetadataProperty
+  -> TargetDatabaseMetadataProperty -> DatabaseCDCProperty
+mkDatabaseCDCProperty sourceMetadata targetMetadata
+  = DatabaseCDCProperty
+      {haddock_workaround_ = (), sourceMetadata = sourceMetadata,
+       targetMetadata = targetMetadata}
+instance ToResourceProperties DatabaseCDCProperty where
+  toResourceProperties DatabaseCDCProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.DatabaseCDC",
+         supportsTags = Prelude.False,
+         properties = ["SourceMetadata" JSON..= sourceMetadata,
+                       "TargetMetadata" JSON..= targetMetadata]}
+instance JSON.ToJSON DatabaseCDCProperty where
+  toJSON DatabaseCDCProperty {..}
+    = JSON.object
+        ["SourceMetadata" JSON..= sourceMetadata,
+         "TargetMetadata" JSON..= targetMetadata]
+instance Property "SourceMetadata" DatabaseCDCProperty where
+  type PropertyType "SourceMetadata" DatabaseCDCProperty = SourceDatabaseMetadataProperty
+  set newValue DatabaseCDCProperty {..}
+    = DatabaseCDCProperty {sourceMetadata = newValue, ..}
+instance Property "TargetMetadata" DatabaseCDCProperty where
+  type PropertyType "TargetMetadata" DatabaseCDCProperty = TargetDatabaseMetadataProperty
+  set newValue DatabaseCDCProperty {..}
+    = DatabaseCDCProperty {targetMetadata = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/DatabaseCDCProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/DatabaseCDCProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/DatabaseCDCProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.DatabaseCDCProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DatabaseCDCProperty :: Prelude.Type
+instance ToResourceProperties DatabaseCDCProperty
+instance Prelude.Eq DatabaseCDCProperty
+instance Prelude.Show DatabaseCDCProperty
+instance JSON.ToJSON DatabaseCDCProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/FileMetadataProperty.hs b/gen/Stratosphere/AppTest/TestCase/FileMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/FileMetadataProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.AppTest.TestCase.FileMetadataProperty (
+        module Exports, FileMetadataProperty(..), mkFileMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.DataSetProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.DatabaseCDCProperty as Exports
+import Stratosphere.ResourceProperties
+data FileMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-filemetadata.html>
+    FileMetadataProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-filemetadata.html#cfn-apptest-testcase-filemetadata-datasets>
+                          dataSets :: (Prelude.Maybe [DataSetProperty]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-filemetadata.html#cfn-apptest-testcase-filemetadata-databasecdc>
+                          databaseCDC :: (Prelude.Maybe DatabaseCDCProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFileMetadataProperty :: FileMetadataProperty
+mkFileMetadataProperty
+  = FileMetadataProperty
+      {haddock_workaround_ = (), dataSets = Prelude.Nothing,
+       databaseCDC = Prelude.Nothing}
+instance ToResourceProperties FileMetadataProperty where
+  toResourceProperties FileMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.FileMetadata",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DataSets" Prelude.<$> dataSets,
+                            (JSON..=) "DatabaseCDC" Prelude.<$> databaseCDC])}
+instance JSON.ToJSON FileMetadataProperty where
+  toJSON FileMetadataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DataSets" Prelude.<$> dataSets,
+               (JSON..=) "DatabaseCDC" Prelude.<$> databaseCDC]))
+instance Property "DataSets" FileMetadataProperty where
+  type PropertyType "DataSets" FileMetadataProperty = [DataSetProperty]
+  set newValue FileMetadataProperty {..}
+    = FileMetadataProperty {dataSets = Prelude.pure newValue, ..}
+instance Property "DatabaseCDC" FileMetadataProperty where
+  type PropertyType "DatabaseCDC" FileMetadataProperty = DatabaseCDCProperty
+  set newValue FileMetadataProperty {..}
+    = FileMetadataProperty {databaseCDC = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/FileMetadataProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/FileMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/FileMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.FileMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FileMetadataProperty :: Prelude.Type
+instance ToResourceProperties FileMetadataProperty
+instance Prelude.Eq FileMetadataProperty
+instance Prelude.Show FileMetadataProperty
+instance JSON.ToJSON FileMetadataProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/InputFileProperty.hs b/gen/Stratosphere/AppTest/TestCase/InputFileProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/InputFileProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.AppTest.TestCase.InputFileProperty (
+        module Exports, InputFileProperty(..), mkInputFileProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.FileMetadataProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InputFileProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-inputfile.html>
+    InputFileProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-inputfile.html#cfn-apptest-testcase-inputfile-filemetadata>
+                       fileMetadata :: FileMetadataProperty,
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-inputfile.html#cfn-apptest-testcase-inputfile-sourcelocation>
+                       sourceLocation :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-inputfile.html#cfn-apptest-testcase-inputfile-targetlocation>
+                       targetLocation :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInputFileProperty ::
+  FileMetadataProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> InputFileProperty
+mkInputFileProperty fileMetadata sourceLocation targetLocation
+  = InputFileProperty
+      {haddock_workaround_ = (), fileMetadata = fileMetadata,
+       sourceLocation = sourceLocation, targetLocation = targetLocation}
+instance ToResourceProperties InputFileProperty where
+  toResourceProperties InputFileProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.InputFile",
+         supportsTags = Prelude.False,
+         properties = ["FileMetadata" JSON..= fileMetadata,
+                       "SourceLocation" JSON..= sourceLocation,
+                       "TargetLocation" JSON..= targetLocation]}
+instance JSON.ToJSON InputFileProperty where
+  toJSON InputFileProperty {..}
+    = JSON.object
+        ["FileMetadata" JSON..= fileMetadata,
+         "SourceLocation" JSON..= sourceLocation,
+         "TargetLocation" JSON..= targetLocation]
+instance Property "FileMetadata" InputFileProperty where
+  type PropertyType "FileMetadata" InputFileProperty = FileMetadataProperty
+  set newValue InputFileProperty {..}
+    = InputFileProperty {fileMetadata = newValue, ..}
+instance Property "SourceLocation" InputFileProperty where
+  type PropertyType "SourceLocation" InputFileProperty = Value Prelude.Text
+  set newValue InputFileProperty {..}
+    = InputFileProperty {sourceLocation = newValue, ..}
+instance Property "TargetLocation" InputFileProperty where
+  type PropertyType "TargetLocation" InputFileProperty = Value Prelude.Text
+  set newValue InputFileProperty {..}
+    = InputFileProperty {targetLocation = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/InputFileProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/InputFileProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/InputFileProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.InputFileProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InputFileProperty :: Prelude.Type
+instance ToResourceProperties InputFileProperty
+instance Prelude.Eq InputFileProperty
+instance Prelude.Show InputFileProperty
+instance JSON.ToJSON InputFileProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/InputProperty.hs b/gen/Stratosphere/AppTest/TestCase/InputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/InputProperty.hs
@@ -0,0 +1,28 @@
+module Stratosphere.AppTest.TestCase.InputProperty (
+        module Exports, InputProperty(..), mkInputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.InputFileProperty as Exports
+import Stratosphere.ResourceProperties
+data InputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-input.html>
+    InputProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-input.html#cfn-apptest-testcase-input-file>
+                   file :: InputFileProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInputProperty :: InputFileProperty -> InputProperty
+mkInputProperty file
+  = InputProperty {haddock_workaround_ = (), file = file}
+instance ToResourceProperties InputProperty where
+  toResourceProperties InputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.Input",
+         supportsTags = Prelude.False, properties = ["File" JSON..= file]}
+instance JSON.ToJSON InputProperty where
+  toJSON InputProperty {..} = JSON.object ["File" JSON..= file]
+instance Property "File" InputProperty where
+  type PropertyType "File" InputProperty = InputFileProperty
+  set newValue InputProperty {..}
+    = InputProperty {file = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/InputProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/InputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/InputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.InputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InputProperty :: Prelude.Type
+instance ToResourceProperties InputProperty
+instance Prelude.Eq InputProperty
+instance Prelude.Show InputProperty
+instance JSON.ToJSON InputProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/M2ManagedActionPropertiesProperty.hs b/gen/Stratosphere/AppTest/TestCase/M2ManagedActionPropertiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/M2ManagedActionPropertiesProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.AppTest.TestCase.M2ManagedActionPropertiesProperty (
+        M2ManagedActionPropertiesProperty(..),
+        mkM2ManagedActionPropertiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data M2ManagedActionPropertiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedactionproperties.html>
+    M2ManagedActionPropertiesProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedactionproperties.html#cfn-apptest-testcase-m2managedactionproperties-forcestop>
+                                       forceStop :: (Prelude.Maybe (Value Prelude.Bool)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedactionproperties.html#cfn-apptest-testcase-m2managedactionproperties-importdatasetlocation>
+                                       importDataSetLocation :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkM2ManagedActionPropertiesProperty ::
+  M2ManagedActionPropertiesProperty
+mkM2ManagedActionPropertiesProperty
+  = M2ManagedActionPropertiesProperty
+      {haddock_workaround_ = (), forceStop = Prelude.Nothing,
+       importDataSetLocation = Prelude.Nothing}
+instance ToResourceProperties M2ManagedActionPropertiesProperty where
+  toResourceProperties M2ManagedActionPropertiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.M2ManagedActionProperties",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ForceStop" Prelude.<$> forceStop,
+                            (JSON..=) "ImportDataSetLocation"
+                              Prelude.<$> importDataSetLocation])}
+instance JSON.ToJSON M2ManagedActionPropertiesProperty where
+  toJSON M2ManagedActionPropertiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ForceStop" Prelude.<$> forceStop,
+               (JSON..=) "ImportDataSetLocation"
+                 Prelude.<$> importDataSetLocation]))
+instance Property "ForceStop" M2ManagedActionPropertiesProperty where
+  type PropertyType "ForceStop" M2ManagedActionPropertiesProperty = Value Prelude.Bool
+  set newValue M2ManagedActionPropertiesProperty {..}
+    = M2ManagedActionPropertiesProperty
+        {forceStop = Prelude.pure newValue, ..}
+instance Property "ImportDataSetLocation" M2ManagedActionPropertiesProperty where
+  type PropertyType "ImportDataSetLocation" M2ManagedActionPropertiesProperty = Value Prelude.Text
+  set newValue M2ManagedActionPropertiesProperty {..}
+    = M2ManagedActionPropertiesProperty
+        {importDataSetLocation = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/M2ManagedActionPropertiesProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/M2ManagedActionPropertiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/M2ManagedActionPropertiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.M2ManagedActionPropertiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data M2ManagedActionPropertiesProperty :: Prelude.Type
+instance ToResourceProperties M2ManagedActionPropertiesProperty
+instance Prelude.Eq M2ManagedActionPropertiesProperty
+instance Prelude.Show M2ManagedActionPropertiesProperty
+instance JSON.ToJSON M2ManagedActionPropertiesProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/M2ManagedApplicationActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/M2ManagedApplicationActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/M2ManagedApplicationActionProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.AppTest.TestCase.M2ManagedApplicationActionProperty (
+        module Exports, M2ManagedApplicationActionProperty(..),
+        mkM2ManagedApplicationActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.M2ManagedActionPropertiesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data M2ManagedApplicationActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedapplicationaction.html>
+    M2ManagedApplicationActionProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedapplicationaction.html#cfn-apptest-testcase-m2managedapplicationaction-actiontype>
+                                        actionType :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedapplicationaction.html#cfn-apptest-testcase-m2managedapplicationaction-properties>
+                                        properties :: (Prelude.Maybe M2ManagedActionPropertiesProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2managedapplicationaction.html#cfn-apptest-testcase-m2managedapplicationaction-resource>
+                                        resource :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkM2ManagedApplicationActionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> M2ManagedApplicationActionProperty
+mkM2ManagedApplicationActionProperty actionType resource
+  = M2ManagedApplicationActionProperty
+      {haddock_workaround_ = (), actionType = actionType,
+       resource = resource, properties = Prelude.Nothing}
+instance ToResourceProperties M2ManagedApplicationActionProperty where
+  toResourceProperties M2ManagedApplicationActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.M2ManagedApplicationAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ActionType" JSON..= actionType, "Resource" JSON..= resource]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Properties" Prelude.<$> properties]))}
+instance JSON.ToJSON M2ManagedApplicationActionProperty where
+  toJSON M2ManagedApplicationActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ActionType" JSON..= actionType, "Resource" JSON..= resource]
+              (Prelude.catMaybes
+                 [(JSON..=) "Properties" Prelude.<$> properties])))
+instance Property "ActionType" M2ManagedApplicationActionProperty where
+  type PropertyType "ActionType" M2ManagedApplicationActionProperty = Value Prelude.Text
+  set newValue M2ManagedApplicationActionProperty {..}
+    = M2ManagedApplicationActionProperty {actionType = newValue, ..}
+instance Property "Properties" M2ManagedApplicationActionProperty where
+  type PropertyType "Properties" M2ManagedApplicationActionProperty = M2ManagedActionPropertiesProperty
+  set newValue M2ManagedApplicationActionProperty {..}
+    = M2ManagedApplicationActionProperty
+        {properties = Prelude.pure newValue, ..}
+instance Property "Resource" M2ManagedApplicationActionProperty where
+  type PropertyType "Resource" M2ManagedApplicationActionProperty = Value Prelude.Text
+  set newValue M2ManagedApplicationActionProperty {..}
+    = M2ManagedApplicationActionProperty {resource = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/M2ManagedApplicationActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/M2ManagedApplicationActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/M2ManagedApplicationActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.M2ManagedApplicationActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data M2ManagedApplicationActionProperty :: Prelude.Type
+instance ToResourceProperties M2ManagedApplicationActionProperty
+instance Prelude.Eq M2ManagedApplicationActionProperty
+instance Prelude.Show M2ManagedApplicationActionProperty
+instance JSON.ToJSON M2ManagedApplicationActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/M2NonManagedApplicationActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/M2NonManagedApplicationActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/M2NonManagedApplicationActionProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.AppTest.TestCase.M2NonManagedApplicationActionProperty (
+        M2NonManagedApplicationActionProperty(..),
+        mkM2NonManagedApplicationActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data M2NonManagedApplicationActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2nonmanagedapplicationaction.html>
+    M2NonManagedApplicationActionProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2nonmanagedapplicationaction.html#cfn-apptest-testcase-m2nonmanagedapplicationaction-actiontype>
+                                           actionType :: (Value Prelude.Text),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-m2nonmanagedapplicationaction.html#cfn-apptest-testcase-m2nonmanagedapplicationaction-resource>
+                                           resource :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkM2NonManagedApplicationActionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> M2NonManagedApplicationActionProperty
+mkM2NonManagedApplicationActionProperty actionType resource
+  = M2NonManagedApplicationActionProperty
+      {haddock_workaround_ = (), actionType = actionType,
+       resource = resource}
+instance ToResourceProperties M2NonManagedApplicationActionProperty where
+  toResourceProperties M2NonManagedApplicationActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.M2NonManagedApplicationAction",
+         supportsTags = Prelude.False,
+         properties = ["ActionType" JSON..= actionType,
+                       "Resource" JSON..= resource]}
+instance JSON.ToJSON M2NonManagedApplicationActionProperty where
+  toJSON M2NonManagedApplicationActionProperty {..}
+    = JSON.object
+        ["ActionType" JSON..= actionType, "Resource" JSON..= resource]
+instance Property "ActionType" M2NonManagedApplicationActionProperty where
+  type PropertyType "ActionType" M2NonManagedApplicationActionProperty = Value Prelude.Text
+  set newValue M2NonManagedApplicationActionProperty {..}
+    = M2NonManagedApplicationActionProperty {actionType = newValue, ..}
+instance Property "Resource" M2NonManagedApplicationActionProperty where
+  type PropertyType "Resource" M2NonManagedApplicationActionProperty = Value Prelude.Text
+  set newValue M2NonManagedApplicationActionProperty {..}
+    = M2NonManagedApplicationActionProperty {resource = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/M2NonManagedApplicationActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/M2NonManagedApplicationActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/M2NonManagedApplicationActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.M2NonManagedApplicationActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data M2NonManagedApplicationActionProperty :: Prelude.Type
+instance ToResourceProperties M2NonManagedApplicationActionProperty
+instance Prelude.Eq M2NonManagedApplicationActionProperty
+instance Prelude.Show M2NonManagedApplicationActionProperty
+instance JSON.ToJSON M2NonManagedApplicationActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/MainframeActionPropertiesProperty.hs b/gen/Stratosphere/AppTest/TestCase/MainframeActionPropertiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/MainframeActionPropertiesProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.AppTest.TestCase.MainframeActionPropertiesProperty (
+        MainframeActionPropertiesProperty(..),
+        mkMainframeActionPropertiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MainframeActionPropertiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeactionproperties.html>
+    MainframeActionPropertiesProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeactionproperties.html#cfn-apptest-testcase-mainframeactionproperties-dmstaskarn>
+                                       dmsTaskArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMainframeActionPropertiesProperty ::
+  MainframeActionPropertiesProperty
+mkMainframeActionPropertiesProperty
+  = MainframeActionPropertiesProperty
+      {haddock_workaround_ = (), dmsTaskArn = Prelude.Nothing}
+instance ToResourceProperties MainframeActionPropertiesProperty where
+  toResourceProperties MainframeActionPropertiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.MainframeActionProperties",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DmsTaskArn" Prelude.<$> dmsTaskArn])}
+instance JSON.ToJSON MainframeActionPropertiesProperty where
+  toJSON MainframeActionPropertiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DmsTaskArn" Prelude.<$> dmsTaskArn]))
+instance Property "DmsTaskArn" MainframeActionPropertiesProperty where
+  type PropertyType "DmsTaskArn" MainframeActionPropertiesProperty = Value Prelude.Text
+  set newValue MainframeActionPropertiesProperty {..}
+    = MainframeActionPropertiesProperty
+        {dmsTaskArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/MainframeActionPropertiesProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/MainframeActionPropertiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/MainframeActionPropertiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.MainframeActionPropertiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MainframeActionPropertiesProperty :: Prelude.Type
+instance ToResourceProperties MainframeActionPropertiesProperty
+instance Prelude.Eq MainframeActionPropertiesProperty
+instance Prelude.Show MainframeActionPropertiesProperty
+instance JSON.ToJSON MainframeActionPropertiesProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/MainframeActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/MainframeActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/MainframeActionProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.AppTest.TestCase.MainframeActionProperty (
+        module Exports, MainframeActionProperty(..),
+        mkMainframeActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.MainframeActionPropertiesProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.MainframeActionTypeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MainframeActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeaction.html>
+    MainframeActionProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeaction.html#cfn-apptest-testcase-mainframeaction-actiontype>
+                             actionType :: MainframeActionTypeProperty,
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeaction.html#cfn-apptest-testcase-mainframeaction-properties>
+                             properties :: (Prelude.Maybe MainframeActionPropertiesProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeaction.html#cfn-apptest-testcase-mainframeaction-resource>
+                             resource :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMainframeActionProperty ::
+  MainframeActionTypeProperty
+  -> Value Prelude.Text -> MainframeActionProperty
+mkMainframeActionProperty actionType resource
+  = MainframeActionProperty
+      {haddock_workaround_ = (), actionType = actionType,
+       resource = resource, properties = Prelude.Nothing}
+instance ToResourceProperties MainframeActionProperty where
+  toResourceProperties MainframeActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.MainframeAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ActionType" JSON..= actionType, "Resource" JSON..= resource]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Properties" Prelude.<$> properties]))}
+instance JSON.ToJSON MainframeActionProperty where
+  toJSON MainframeActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ActionType" JSON..= actionType, "Resource" JSON..= resource]
+              (Prelude.catMaybes
+                 [(JSON..=) "Properties" Prelude.<$> properties])))
+instance Property "ActionType" MainframeActionProperty where
+  type PropertyType "ActionType" MainframeActionProperty = MainframeActionTypeProperty
+  set newValue MainframeActionProperty {..}
+    = MainframeActionProperty {actionType = newValue, ..}
+instance Property "Properties" MainframeActionProperty where
+  type PropertyType "Properties" MainframeActionProperty = MainframeActionPropertiesProperty
+  set newValue MainframeActionProperty {..}
+    = MainframeActionProperty {properties = Prelude.pure newValue, ..}
+instance Property "Resource" MainframeActionProperty where
+  type PropertyType "Resource" MainframeActionProperty = Value Prelude.Text
+  set newValue MainframeActionProperty {..}
+    = MainframeActionProperty {resource = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/MainframeActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/MainframeActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/MainframeActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.MainframeActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MainframeActionProperty :: Prelude.Type
+instance ToResourceProperties MainframeActionProperty
+instance Prelude.Eq MainframeActionProperty
+instance Prelude.Show MainframeActionProperty
+instance JSON.ToJSON MainframeActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/MainframeActionTypeProperty.hs b/gen/Stratosphere/AppTest/TestCase/MainframeActionTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/MainframeActionTypeProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.AppTest.TestCase.MainframeActionTypeProperty (
+        module Exports, MainframeActionTypeProperty(..),
+        mkMainframeActionTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.BatchProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.TN3270Property as Exports
+import Stratosphere.ResourceProperties
+data MainframeActionTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeactiontype.html>
+    MainframeActionTypeProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeactiontype.html#cfn-apptest-testcase-mainframeactiontype-batch>
+                                 batch :: (Prelude.Maybe BatchProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-mainframeactiontype.html#cfn-apptest-testcase-mainframeactiontype-tn3270>
+                                 tn3270 :: (Prelude.Maybe TN3270Property)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMainframeActionTypeProperty :: MainframeActionTypeProperty
+mkMainframeActionTypeProperty
+  = MainframeActionTypeProperty
+      {haddock_workaround_ = (), batch = Prelude.Nothing,
+       tn3270 = Prelude.Nothing}
+instance ToResourceProperties MainframeActionTypeProperty where
+  toResourceProperties MainframeActionTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.MainframeActionType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Batch" Prelude.<$> batch,
+                            (JSON..=) "Tn3270" Prelude.<$> tn3270])}
+instance JSON.ToJSON MainframeActionTypeProperty where
+  toJSON MainframeActionTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Batch" Prelude.<$> batch,
+               (JSON..=) "Tn3270" Prelude.<$> tn3270]))
+instance Property "Batch" MainframeActionTypeProperty where
+  type PropertyType "Batch" MainframeActionTypeProperty = BatchProperty
+  set newValue MainframeActionTypeProperty {..}
+    = MainframeActionTypeProperty {batch = Prelude.pure newValue, ..}
+instance Property "Tn3270" MainframeActionTypeProperty where
+  type PropertyType "Tn3270" MainframeActionTypeProperty = TN3270Property
+  set newValue MainframeActionTypeProperty {..}
+    = MainframeActionTypeProperty {tn3270 = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/MainframeActionTypeProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/MainframeActionTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/MainframeActionTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.MainframeActionTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MainframeActionTypeProperty :: Prelude.Type
+instance ToResourceProperties MainframeActionTypeProperty
+instance Prelude.Eq MainframeActionTypeProperty
+instance Prelude.Show MainframeActionTypeProperty
+instance JSON.ToJSON MainframeActionTypeProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/OutputFileProperty.hs b/gen/Stratosphere/AppTest/TestCase/OutputFileProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/OutputFileProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.AppTest.TestCase.OutputFileProperty (
+        OutputFileProperty(..), mkOutputFileProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OutputFileProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-outputfile.html>
+    OutputFileProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-outputfile.html#cfn-apptest-testcase-outputfile-filelocation>
+                        fileLocation :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOutputFileProperty :: OutputFileProperty
+mkOutputFileProperty
+  = OutputFileProperty
+      {haddock_workaround_ = (), fileLocation = Prelude.Nothing}
+instance ToResourceProperties OutputFileProperty where
+  toResourceProperties OutputFileProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.OutputFile",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "FileLocation" Prelude.<$> fileLocation])}
+instance JSON.ToJSON OutputFileProperty where
+  toJSON OutputFileProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "FileLocation" Prelude.<$> fileLocation]))
+instance Property "FileLocation" OutputFileProperty where
+  type PropertyType "FileLocation" OutputFileProperty = Value Prelude.Text
+  set newValue OutputFileProperty {..}
+    = OutputFileProperty {fileLocation = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/OutputFileProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/OutputFileProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/OutputFileProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.OutputFileProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OutputFileProperty :: Prelude.Type
+instance ToResourceProperties OutputFileProperty
+instance Prelude.Eq OutputFileProperty
+instance Prelude.Show OutputFileProperty
+instance JSON.ToJSON OutputFileProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/OutputProperty.hs b/gen/Stratosphere/AppTest/TestCase/OutputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/OutputProperty.hs
@@ -0,0 +1,28 @@
+module Stratosphere.AppTest.TestCase.OutputProperty (
+        module Exports, OutputProperty(..), mkOutputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.OutputFileProperty as Exports
+import Stratosphere.ResourceProperties
+data OutputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-output.html>
+    OutputProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-output.html#cfn-apptest-testcase-output-file>
+                    file :: OutputFileProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOutputProperty :: OutputFileProperty -> OutputProperty
+mkOutputProperty file
+  = OutputProperty {haddock_workaround_ = (), file = file}
+instance ToResourceProperties OutputProperty where
+  toResourceProperties OutputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.Output",
+         supportsTags = Prelude.False, properties = ["File" JSON..= file]}
+instance JSON.ToJSON OutputProperty where
+  toJSON OutputProperty {..} = JSON.object ["File" JSON..= file]
+instance Property "File" OutputProperty where
+  type PropertyType "File" OutputProperty = OutputFileProperty
+  set newValue OutputProperty {..}
+    = OutputProperty {file = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/OutputProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/OutputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/OutputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.OutputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OutputProperty :: Prelude.Type
+instance ToResourceProperties OutputProperty
+instance Prelude.Eq OutputProperty
+instance Prelude.Show OutputProperty
+instance JSON.ToJSON OutputProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/ResourceActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/ResourceActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/ResourceActionProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.AppTest.TestCase.ResourceActionProperty (
+        module Exports, ResourceActionProperty(..),
+        mkResourceActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.CloudFormationActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.M2ManagedApplicationActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.M2NonManagedApplicationActionProperty as Exports
+import Stratosphere.ResourceProperties
+data ResourceActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-resourceaction.html>
+    ResourceActionProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-resourceaction.html#cfn-apptest-testcase-resourceaction-cloudformationaction>
+                            cloudFormationAction :: (Prelude.Maybe CloudFormationActionProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-resourceaction.html#cfn-apptest-testcase-resourceaction-m2managedapplicationaction>
+                            m2ManagedApplicationAction :: (Prelude.Maybe M2ManagedApplicationActionProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-resourceaction.html#cfn-apptest-testcase-resourceaction-m2nonmanagedapplicationaction>
+                            m2NonManagedApplicationAction :: (Prelude.Maybe M2NonManagedApplicationActionProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceActionProperty :: ResourceActionProperty
+mkResourceActionProperty
+  = ResourceActionProperty
+      {haddock_workaround_ = (), cloudFormationAction = Prelude.Nothing,
+       m2ManagedApplicationAction = Prelude.Nothing,
+       m2NonManagedApplicationAction = Prelude.Nothing}
+instance ToResourceProperties ResourceActionProperty where
+  toResourceProperties ResourceActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.ResourceAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudFormationAction" Prelude.<$> cloudFormationAction,
+                            (JSON..=) "M2ManagedApplicationAction"
+                              Prelude.<$> m2ManagedApplicationAction,
+                            (JSON..=) "M2NonManagedApplicationAction"
+                              Prelude.<$> m2NonManagedApplicationAction])}
+instance JSON.ToJSON ResourceActionProperty where
+  toJSON ResourceActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudFormationAction" Prelude.<$> cloudFormationAction,
+               (JSON..=) "M2ManagedApplicationAction"
+                 Prelude.<$> m2ManagedApplicationAction,
+               (JSON..=) "M2NonManagedApplicationAction"
+                 Prelude.<$> m2NonManagedApplicationAction]))
+instance Property "CloudFormationAction" ResourceActionProperty where
+  type PropertyType "CloudFormationAction" ResourceActionProperty = CloudFormationActionProperty
+  set newValue ResourceActionProperty {..}
+    = ResourceActionProperty
+        {cloudFormationAction = Prelude.pure newValue, ..}
+instance Property "M2ManagedApplicationAction" ResourceActionProperty where
+  type PropertyType "M2ManagedApplicationAction" ResourceActionProperty = M2ManagedApplicationActionProperty
+  set newValue ResourceActionProperty {..}
+    = ResourceActionProperty
+        {m2ManagedApplicationAction = Prelude.pure newValue, ..}
+instance Property "M2NonManagedApplicationAction" ResourceActionProperty where
+  type PropertyType "M2NonManagedApplicationAction" ResourceActionProperty = M2NonManagedApplicationActionProperty
+  set newValue ResourceActionProperty {..}
+    = ResourceActionProperty
+        {m2NonManagedApplicationAction = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/ResourceActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/ResourceActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/ResourceActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.ResourceActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceActionProperty :: Prelude.Type
+instance ToResourceProperties ResourceActionProperty
+instance Prelude.Eq ResourceActionProperty
+instance Prelude.Show ResourceActionProperty
+instance JSON.ToJSON ResourceActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/ScriptProperty.hs b/gen/Stratosphere/AppTest/TestCase/ScriptProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/ScriptProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.AppTest.TestCase.ScriptProperty (
+        ScriptProperty(..), mkScriptProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScriptProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-script.html>
+    ScriptProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-script.html#cfn-apptest-testcase-script-scriptlocation>
+                    scriptLocation :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-script.html#cfn-apptest-testcase-script-type>
+                    type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScriptProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ScriptProperty
+mkScriptProperty scriptLocation type'
+  = ScriptProperty
+      {haddock_workaround_ = (), scriptLocation = scriptLocation,
+       type' = type'}
+instance ToResourceProperties ScriptProperty where
+  toResourceProperties ScriptProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.Script",
+         supportsTags = Prelude.False,
+         properties = ["ScriptLocation" JSON..= scriptLocation,
+                       "Type" JSON..= type']}
+instance JSON.ToJSON ScriptProperty where
+  toJSON ScriptProperty {..}
+    = JSON.object
+        ["ScriptLocation" JSON..= scriptLocation, "Type" JSON..= type']
+instance Property "ScriptLocation" ScriptProperty where
+  type PropertyType "ScriptLocation" ScriptProperty = Value Prelude.Text
+  set newValue ScriptProperty {..}
+    = ScriptProperty {scriptLocation = newValue, ..}
+instance Property "Type" ScriptProperty where
+  type PropertyType "Type" ScriptProperty = Value Prelude.Text
+  set newValue ScriptProperty {..}
+    = ScriptProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/ScriptProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/ScriptProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/ScriptProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.ScriptProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScriptProperty :: Prelude.Type
+instance ToResourceProperties ScriptProperty
+instance Prelude.Eq ScriptProperty
+instance Prelude.Show ScriptProperty
+instance JSON.ToJSON ScriptProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/SourceDatabaseMetadataProperty.hs b/gen/Stratosphere/AppTest/TestCase/SourceDatabaseMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/SourceDatabaseMetadataProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.AppTest.TestCase.SourceDatabaseMetadataProperty (
+        SourceDatabaseMetadataProperty(..),
+        mkSourceDatabaseMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SourceDatabaseMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-sourcedatabasemetadata.html>
+    SourceDatabaseMetadataProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-sourcedatabasemetadata.html#cfn-apptest-testcase-sourcedatabasemetadata-capturetool>
+                                    captureTool :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-sourcedatabasemetadata.html#cfn-apptest-testcase-sourcedatabasemetadata-type>
+                                    type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceDatabaseMetadataProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SourceDatabaseMetadataProperty
+mkSourceDatabaseMetadataProperty captureTool type'
+  = SourceDatabaseMetadataProperty
+      {haddock_workaround_ = (), captureTool = captureTool,
+       type' = type'}
+instance ToResourceProperties SourceDatabaseMetadataProperty where
+  toResourceProperties SourceDatabaseMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.SourceDatabaseMetadata",
+         supportsTags = Prelude.False,
+         properties = ["CaptureTool" JSON..= captureTool,
+                       "Type" JSON..= type']}
+instance JSON.ToJSON SourceDatabaseMetadataProperty where
+  toJSON SourceDatabaseMetadataProperty {..}
+    = JSON.object
+        ["CaptureTool" JSON..= captureTool, "Type" JSON..= type']
+instance Property "CaptureTool" SourceDatabaseMetadataProperty where
+  type PropertyType "CaptureTool" SourceDatabaseMetadataProperty = Value Prelude.Text
+  set newValue SourceDatabaseMetadataProperty {..}
+    = SourceDatabaseMetadataProperty {captureTool = newValue, ..}
+instance Property "Type" SourceDatabaseMetadataProperty where
+  type PropertyType "Type" SourceDatabaseMetadataProperty = Value Prelude.Text
+  set newValue SourceDatabaseMetadataProperty {..}
+    = SourceDatabaseMetadataProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/SourceDatabaseMetadataProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/SourceDatabaseMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/SourceDatabaseMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.SourceDatabaseMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SourceDatabaseMetadataProperty :: Prelude.Type
+instance ToResourceProperties SourceDatabaseMetadataProperty
+instance Prelude.Eq SourceDatabaseMetadataProperty
+instance Prelude.Show SourceDatabaseMetadataProperty
+instance JSON.ToJSON SourceDatabaseMetadataProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/StepActionProperty.hs b/gen/Stratosphere/AppTest/TestCase/StepActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/StepActionProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.AppTest.TestCase.StepActionProperty (
+        module Exports, StepActionProperty(..), mkStepActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.CompareActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.MainframeActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.ResourceActionProperty as Exports
+import Stratosphere.ResourceProperties
+data StepActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-stepaction.html>
+    StepActionProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-stepaction.html#cfn-apptest-testcase-stepaction-compareaction>
+                        compareAction :: (Prelude.Maybe CompareActionProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-stepaction.html#cfn-apptest-testcase-stepaction-mainframeaction>
+                        mainframeAction :: (Prelude.Maybe MainframeActionProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-stepaction.html#cfn-apptest-testcase-stepaction-resourceaction>
+                        resourceAction :: (Prelude.Maybe ResourceActionProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStepActionProperty :: StepActionProperty
+mkStepActionProperty
+  = StepActionProperty
+      {haddock_workaround_ = (), compareAction = Prelude.Nothing,
+       mainframeAction = Prelude.Nothing,
+       resourceAction = Prelude.Nothing}
+instance ToResourceProperties StepActionProperty where
+  toResourceProperties StepActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.StepAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CompareAction" Prelude.<$> compareAction,
+                            (JSON..=) "MainframeAction" Prelude.<$> mainframeAction,
+                            (JSON..=) "ResourceAction" Prelude.<$> resourceAction])}
+instance JSON.ToJSON StepActionProperty where
+  toJSON StepActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CompareAction" Prelude.<$> compareAction,
+               (JSON..=) "MainframeAction" Prelude.<$> mainframeAction,
+               (JSON..=) "ResourceAction" Prelude.<$> resourceAction]))
+instance Property "CompareAction" StepActionProperty where
+  type PropertyType "CompareAction" StepActionProperty = CompareActionProperty
+  set newValue StepActionProperty {..}
+    = StepActionProperty {compareAction = Prelude.pure newValue, ..}
+instance Property "MainframeAction" StepActionProperty where
+  type PropertyType "MainframeAction" StepActionProperty = MainframeActionProperty
+  set newValue StepActionProperty {..}
+    = StepActionProperty {mainframeAction = Prelude.pure newValue, ..}
+instance Property "ResourceAction" StepActionProperty where
+  type PropertyType "ResourceAction" StepActionProperty = ResourceActionProperty
+  set newValue StepActionProperty {..}
+    = StepActionProperty {resourceAction = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/StepActionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/StepActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/StepActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.StepActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StepActionProperty :: Prelude.Type
+instance ToResourceProperties StepActionProperty
+instance Prelude.Eq StepActionProperty
+instance Prelude.Show StepActionProperty
+instance JSON.ToJSON StepActionProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/StepProperty.hs b/gen/Stratosphere/AppTest/TestCase/StepProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/StepProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.AppTest.TestCase.StepProperty (
+        module Exports, StepProperty(..), mkStepProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.StepActionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StepProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-step.html>
+    StepProperty {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-step.html#cfn-apptest-testcase-step-action>
+                  action :: StepActionProperty,
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-step.html#cfn-apptest-testcase-step-description>
+                  description :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-step.html#cfn-apptest-testcase-step-name>
+                  name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStepProperty ::
+  StepActionProperty -> Value Prelude.Text -> StepProperty
+mkStepProperty action name
+  = StepProperty
+      {haddock_workaround_ = (), action = action, name = name,
+       description = Prelude.Nothing}
+instance ToResourceProperties StepProperty where
+  toResourceProperties StepProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.Step",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Action" JSON..= action, "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON StepProperty where
+  toJSON StepProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Action" JSON..= action, "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Action" StepProperty where
+  type PropertyType "Action" StepProperty = StepActionProperty
+  set newValue StepProperty {..}
+    = StepProperty {action = newValue, ..}
+instance Property "Description" StepProperty where
+  type PropertyType "Description" StepProperty = Value Prelude.Text
+  set newValue StepProperty {..}
+    = StepProperty {description = Prelude.pure newValue, ..}
+instance Property "Name" StepProperty where
+  type PropertyType "Name" StepProperty = Value Prelude.Text
+  set newValue StepProperty {..} = StepProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/StepProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/StepProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/StepProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.StepProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StepProperty :: Prelude.Type
+instance ToResourceProperties StepProperty
+instance Prelude.Eq StepProperty
+instance Prelude.Show StepProperty
+instance JSON.ToJSON StepProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/TN3270Property.hs b/gen/Stratosphere/AppTest/TestCase/TN3270Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/TN3270Property.hs
@@ -0,0 +1,48 @@
+module Stratosphere.AppTest.TestCase.TN3270Property (
+        module Exports, TN3270Property(..), mkTN3270Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.AppTest.TestCase.ScriptProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TN3270Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-tn3270.html>
+    TN3270Property {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-tn3270.html#cfn-apptest-testcase-tn3270-exportdatasetnames>
+                    exportDataSetNames :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-tn3270.html#cfn-apptest-testcase-tn3270-script>
+                    script :: ScriptProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTN3270Property :: ScriptProperty -> TN3270Property
+mkTN3270Property script
+  = TN3270Property
+      {haddock_workaround_ = (), script = script,
+       exportDataSetNames = Prelude.Nothing}
+instance ToResourceProperties TN3270Property where
+  toResourceProperties TN3270Property {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.TN3270",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Script" JSON..= script]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ExportDataSetNames" Prelude.<$> exportDataSetNames]))}
+instance JSON.ToJSON TN3270Property where
+  toJSON TN3270Property {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Script" JSON..= script]
+              (Prelude.catMaybes
+                 [(JSON..=) "ExportDataSetNames" Prelude.<$> exportDataSetNames])))
+instance Property "ExportDataSetNames" TN3270Property where
+  type PropertyType "ExportDataSetNames" TN3270Property = ValueList Prelude.Text
+  set newValue TN3270Property {..}
+    = TN3270Property {exportDataSetNames = Prelude.pure newValue, ..}
+instance Property "Script" TN3270Property where
+  type PropertyType "Script" TN3270Property = ScriptProperty
+  set newValue TN3270Property {..}
+    = TN3270Property {script = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/TN3270Property.hs-boot b/gen/Stratosphere/AppTest/TestCase/TN3270Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/TN3270Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.TN3270Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TN3270Property :: Prelude.Type
+instance ToResourceProperties TN3270Property
+instance Prelude.Eq TN3270Property
+instance Prelude.Show TN3270Property
+instance JSON.ToJSON TN3270Property
diff --git a/gen/Stratosphere/AppTest/TestCase/TargetDatabaseMetadataProperty.hs b/gen/Stratosphere/AppTest/TestCase/TargetDatabaseMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/TargetDatabaseMetadataProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.AppTest.TestCase.TargetDatabaseMetadataProperty (
+        TargetDatabaseMetadataProperty(..),
+        mkTargetDatabaseMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetDatabaseMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-targetdatabasemetadata.html>
+    TargetDatabaseMetadataProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-targetdatabasemetadata.html#cfn-apptest-testcase-targetdatabasemetadata-capturetool>
+                                    captureTool :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-targetdatabasemetadata.html#cfn-apptest-testcase-targetdatabasemetadata-type>
+                                    type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetDatabaseMetadataProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> TargetDatabaseMetadataProperty
+mkTargetDatabaseMetadataProperty captureTool type'
+  = TargetDatabaseMetadataProperty
+      {haddock_workaround_ = (), captureTool = captureTool,
+       type' = type'}
+instance ToResourceProperties TargetDatabaseMetadataProperty where
+  toResourceProperties TargetDatabaseMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.TargetDatabaseMetadata",
+         supportsTags = Prelude.False,
+         properties = ["CaptureTool" JSON..= captureTool,
+                       "Type" JSON..= type']}
+instance JSON.ToJSON TargetDatabaseMetadataProperty where
+  toJSON TargetDatabaseMetadataProperty {..}
+    = JSON.object
+        ["CaptureTool" JSON..= captureTool, "Type" JSON..= type']
+instance Property "CaptureTool" TargetDatabaseMetadataProperty where
+  type PropertyType "CaptureTool" TargetDatabaseMetadataProperty = Value Prelude.Text
+  set newValue TargetDatabaseMetadataProperty {..}
+    = TargetDatabaseMetadataProperty {captureTool = newValue, ..}
+instance Property "Type" TargetDatabaseMetadataProperty where
+  type PropertyType "Type" TargetDatabaseMetadataProperty = Value Prelude.Text
+  set newValue TargetDatabaseMetadataProperty {..}
+    = TargetDatabaseMetadataProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/TargetDatabaseMetadataProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/TargetDatabaseMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/TargetDatabaseMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.TargetDatabaseMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetDatabaseMetadataProperty :: Prelude.Type
+instance ToResourceProperties TargetDatabaseMetadataProperty
+instance Prelude.Eq TargetDatabaseMetadataProperty
+instance Prelude.Show TargetDatabaseMetadataProperty
+instance JSON.ToJSON TargetDatabaseMetadataProperty
diff --git a/gen/Stratosphere/AppTest/TestCase/TestCaseLatestVersionProperty.hs b/gen/Stratosphere/AppTest/TestCase/TestCaseLatestVersionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/TestCaseLatestVersionProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.AppTest.TestCase.TestCaseLatestVersionProperty (
+        TestCaseLatestVersionProperty(..), mkTestCaseLatestVersionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TestCaseLatestVersionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-testcaselatestversion.html>
+    TestCaseLatestVersionProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-testcaselatestversion.html#cfn-apptest-testcase-testcaselatestversion-status>
+                                   status :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apptest-testcase-testcaselatestversion.html#cfn-apptest-testcase-testcaselatestversion-version>
+                                   version :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTestCaseLatestVersionProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Double -> TestCaseLatestVersionProperty
+mkTestCaseLatestVersionProperty status version
+  = TestCaseLatestVersionProperty
+      {haddock_workaround_ = (), status = status, version = version}
+instance ToResourceProperties TestCaseLatestVersionProperty where
+  toResourceProperties TestCaseLatestVersionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::AppTest::TestCase.TestCaseLatestVersion",
+         supportsTags = Prelude.False,
+         properties = ["Status" JSON..= status, "Version" JSON..= version]}
+instance JSON.ToJSON TestCaseLatestVersionProperty where
+  toJSON TestCaseLatestVersionProperty {..}
+    = JSON.object ["Status" JSON..= status, "Version" JSON..= version]
+instance Property "Status" TestCaseLatestVersionProperty where
+  type PropertyType "Status" TestCaseLatestVersionProperty = Value Prelude.Text
+  set newValue TestCaseLatestVersionProperty {..}
+    = TestCaseLatestVersionProperty {status = newValue, ..}
+instance Property "Version" TestCaseLatestVersionProperty where
+  type PropertyType "Version" TestCaseLatestVersionProperty = Value Prelude.Double
+  set newValue TestCaseLatestVersionProperty {..}
+    = TestCaseLatestVersionProperty {version = newValue, ..}
diff --git a/gen/Stratosphere/AppTest/TestCase/TestCaseLatestVersionProperty.hs-boot b/gen/Stratosphere/AppTest/TestCase/TestCaseLatestVersionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/AppTest/TestCase/TestCaseLatestVersionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.AppTest.TestCase.TestCaseLatestVersionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TestCaseLatestVersionProperty :: Prelude.Type
+instance ToResourceProperties TestCaseLatestVersionProperty
+instance Prelude.Eq TestCaseLatestVersionProperty
+instance Prelude.Show TestCaseLatestVersionProperty
+instance JSON.ToJSON TestCaseLatestVersionProperty
diff --git a/stratosphere-apptest.cabal b/stratosphere-apptest.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-apptest.cabal
@@ -0,0 +1,97 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-apptest
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS AppTest.
+description:    Integration into stratosphere to generate resources and properties for AWS AppTest
+category:       AWS, Cloud, AppTest
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.AppTest.TestCase
+      Stratosphere.AppTest.TestCase.BatchProperty
+      Stratosphere.AppTest.TestCase.CloudFormationActionProperty
+      Stratosphere.AppTest.TestCase.CompareActionProperty
+      Stratosphere.AppTest.TestCase.DatabaseCDCProperty
+      Stratosphere.AppTest.TestCase.DataSetProperty
+      Stratosphere.AppTest.TestCase.FileMetadataProperty
+      Stratosphere.AppTest.TestCase.InputFileProperty
+      Stratosphere.AppTest.TestCase.InputProperty
+      Stratosphere.AppTest.TestCase.M2ManagedActionPropertiesProperty
+      Stratosphere.AppTest.TestCase.M2ManagedApplicationActionProperty
+      Stratosphere.AppTest.TestCase.M2NonManagedApplicationActionProperty
+      Stratosphere.AppTest.TestCase.MainframeActionPropertiesProperty
+      Stratosphere.AppTest.TestCase.MainframeActionProperty
+      Stratosphere.AppTest.TestCase.MainframeActionTypeProperty
+      Stratosphere.AppTest.TestCase.OutputFileProperty
+      Stratosphere.AppTest.TestCase.OutputProperty
+      Stratosphere.AppTest.TestCase.ResourceActionProperty
+      Stratosphere.AppTest.TestCase.ScriptProperty
+      Stratosphere.AppTest.TestCase.SourceDatabaseMetadataProperty
+      Stratosphere.AppTest.TestCase.StepActionProperty
+      Stratosphere.AppTest.TestCase.StepProperty
+      Stratosphere.AppTest.TestCase.TargetDatabaseMetadataProperty
+      Stratosphere.AppTest.TestCase.TestCaseLatestVersionProperty
+      Stratosphere.AppTest.TestCase.TN3270Property
+  other-modules:
+      Paths_stratosphere_apptest
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
