Skip to content

Commit 2962bfd

Browse files
committed
Added more Tests/UndoTestDoublesTests.class.sql to make sure that constraints and triggers work and added a test to check that that RenamedObjectLog table is empty after Undo. SSPs, Views, and Functions next.
1 parent 0848c6d commit 2962bfd

2 files changed

Lines changed: 91 additions & 6 deletions

File tree

Source/tSQLt.UndoTestDoubles.ssp.sql

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ CREATE PROCEDURE tSQLt.UndoTestDoubles
66
AS
77
BEGIN
88
DECLARE @cmd NVARCHAR(MAX);
9+
10+
SELECT TOP(0)A.* INTO #RenamedObjects FROM tSQLt.Private_RenamedObjectLog A RIGHT JOIN tSQLt.Private_RenamedObjectLog X ON 1=0;
11+
12+
BEGIN TRAN;
13+
DELETE FROM tSQLt.Private_RenamedObjectLog OUTPUT Deleted.* INTO #RenamedObjects;
914
WITH L AS
1015
(
1116
SELECT
@@ -17,10 +22,10 @@ BEGIN
1722
OBJECT_NAME(ROL.ObjectId) CurrentName,
1823
PARSENAME(ROL.OriginalName,1) OriginalName,
1924
O.type ObjectType
20-
FROM tSQLt.Private_RenamedObjectLog ROL
25+
FROM #RenamedObjects ROL
2126
JOIN sys.objects O
2227
ON ROL.ObjectId = O.object_id
23-
LEFT JOIN tSQLt.Private_RenamedObjectLog ParentROL
28+
LEFT JOIN #RenamedObjects ParentROL
2429
ON O.parent_object_id = ParentROL.ObjectId
2530
)
2631
SELECT @cmd =
@@ -34,6 +39,7 @@ BEGIN
3439
FOR XML PATH(''),TYPE
3540
).value('.','NVARCHAR(MAX)')
3641
EXEC(@cmd);
42+
COMMIT;
3743
END;
3844
GO
3945

Tests/UndoTestDoublesTests.class.sql

Lines changed: 83 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,93 @@ BEGIN
134134

135135
END;
136136
GO
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
/*--
138220
TODO
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

Comments
 (0)