@@ -134,14 +134,93 @@ BEGIN
134134
135135END ;
136136GO
137+ CREATE PROCEDURE UndoTestDoublesTests .CreateTableWithTriggersAndConstraints
138+ @Number NVARCHAR (MAX )
139+ AS
140+ BEGIN
141+ DECLARE @cmd NVARCHAR (MAX );
142+ SELECT @cmd = ' CREATE TABLE UndoTestDoublesTests.aSimpleTable0 ( Id INT CONSTRAINT aSimpleTable0C1 CHECK(Id > 9) CONSTRAINT aSimpleTable0PK PRIMARY KEY);' ;
143+ SET @cmd = REPLACE (@cmd,' 0' ,@Number);EXEC (@cmd);
144+
145+ SET @cmd = ' CREATE TRIGGER aSimpleTrigger0i ON UndoTestDoublesTests.aSimpleTable0 FOR INSERT AS RETURN;' ;
146+ SET @cmd = REPLACE (@cmd,' 0' ,@Number);EXEC (@cmd);
147+
148+ SET @cmd = ' CREATE TRIGGER aSimpleTrigger0u ON UndoTestDoublesTests.aSimpleTable0 FOR UPDATE AS RETURN;' ;
149+ SET @cmd = REPLACE (@cmd,' 0' ,@Number);EXEC (@cmd);
150+
151+ END ;
152+ GO
153+ CREATE PROCEDURE UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints
154+ @Number NVARCHAR (MAX )
155+ AS
156+ BEGIN
157+ DECLARE @cmd NVARCHAR (MAX );
158+ SELECT @cmd = '
159+ EXEC tSQLt.FakeTable @TableName='' UndoTestDoublesTests.aSimpleTable0'' ;
160+ EXEC tSQLt.ApplyConstraint @TableName='' UndoTestDoublesTests.aSimpleTable0'' , @ConstraintName = '' aSimpleTable0C1'' ;
161+ EXEC tSQLt.ApplyConstraint @TableName='' UndoTestDoublesTests.aSimpleTable0'' , @ConstraintName = '' aSimpleTable0PK'' ;
162+ EXEC tSQLt.ApplyTrigger @TableName='' UndoTestDoublesTests.aSimpleTable0'' , @TriggerName = '' aSimpleTrigger0i'' ;
163+ EXEC tSQLt.ApplyTrigger @TableName='' UndoTestDoublesTests.aSimpleTable0'' , @TriggerName = '' aSimpleTrigger0u'' ;
164+ ' ;
165+ SET @cmd = REPLACE (@cmd,' 0' ,@Number);EXEC (@cmd);
166+
167+ END ;
168+ GO
169+ CREATE PROCEDURE UndoTestDoublesTests.[test restores multiple triggers and multiple constraints on multiple tables faked multiple times]
170+ AS
171+ BEGIN
172+ EXEC UndoTestDoublesTests .CreateTableWithTriggersAndConstraints ' 1' ;
173+ EXEC UndoTestDoublesTests .CreateTableWithTriggersAndConstraints ' 2' ;
174+ EXEC UndoTestDoublesTests .CreateTableWithTriggersAndConstraints ' 3' ;
175+
176+ SELECT X .ObjectName , OBJECT_ID (' UndoTestDoublesTests.'+ X .ObjectName ) ObjectId
177+ INTO #OriginalObjectIds
178+ FROM (VALUES (' aSimpleTrigger1i' ),(' aSimpleTrigger1u' ),(' aSimpleTable1C1' ),(' aSimpleTable1PK' ),(' aSimpleTable1' ),
179+ (' aSimpleTrigger2i' ),(' aSimpleTrigger2u' ),(' aSimpleTable2C1' ),(' aSimpleTable2PK' ),(' aSimpleTable2' ),
180+ (' aSimpleTrigger3i' ),(' aSimpleTrigger3u' ),(' aSimpleTable3C1' ),(' aSimpleTable3PK' ),(' aSimpleTable3' )
181+ ) X (ObjectName);
182+
183+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 1' ;
184+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 2' ;
185+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 3' ;
186+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 1' ;
187+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 2' ;
188+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 3' ;
189+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 1' ;
190+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 2' ;
191+ EXEC UndoTestDoublesTests .FakeTableAndApplyTriggersAndConstraints ' 3' ;
192+
193+ EXEC tSQLt .UndoTestDoubles ;
194+
195+ SELECT X .ObjectName , OBJECT_ID (' UndoTestDoublesTests.'+ X .ObjectName ) ObjectId
196+ INTO #RestoredObjectIds
197+ FROM (VALUES (' aSimpleTrigger1i' ),(' aSimpleTrigger1u' ),(' aSimpleTable1C1' ),(' aSimpleTable1PK' ),(' aSimpleTable1' ),
198+ (' aSimpleTrigger2i' ),(' aSimpleTrigger2u' ),(' aSimpleTable2C1' ),(' aSimpleTable2PK' ),(' aSimpleTable2' ),
199+ (' aSimpleTrigger3i' ),(' aSimpleTrigger3u' ),(' aSimpleTable3C1' ),(' aSimpleTable3PK' ),(' aSimpleTable3' )
200+ ) X (ObjectName);
201+
202+ EXEC tSQLt .AssertEqualsTable @Expected = ' #OriginalObjectIds' , @Actual = ' #RestoredObjectIds' ;
203+
204+ END ;
205+ GO
206+ CREATE PROCEDURE UndoTestDoublesTests.[test tSQLt.Private_RenamedObjectLog is empty after execution]
207+ AS
208+ BEGIN
209+ CREATE TABLE UndoTestDoublesTests .aSimpleTable ( Id INT );
210+
211+ EXEC tSQLt .FakeTable @TableName = ' UndoTestDoublesTests.aSimpleTable' ;
212+
213+ EXEC tSQLt .UndoTestDoubles ;
214+
215+ EXEC tSQLt .AssertEmptyTable @TableName = ' tSQLt.Private_RenamedObjectLog' ;
216+ END ;
217+ GO
218+
137219/* --
138220TODO
139- ==> multiple constraints and triggers on a multiple tables, faked multiple times
140221- stored procedures
141222- views
142223- functions
143-
144-
145- Also, just review all the code.
224+ - rename object to unique name
146225
147226--*/
0 commit comments