Skip to content

Commit 9979468

Browse files
committed
UndoTestDoubles is working. Check out the TODO in UndoTestDoublesTests.class.sql for next steps.
1 parent 91d05b0 commit 9979468

2 files changed

Lines changed: 140 additions & 11 deletions

File tree

Source/tSQLt.UndoTestDoubles.ssp.sql

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,35 @@ GO
55
CREATE PROCEDURE tSQLt.UndoTestDoubles
66
AS
77
BEGIN
8-
SELECT
9-
Id,
10-
ObjectId,
11-
OBJECT_SCHEMA_NAME(L.ObjectId) SchemaName,
12-
OBJECT_NAME(L.ObjectId) CurrentName,
13-
OriginalName
14-
FROM tSQLt.Private_RenamedObjectLog L
15-
RETURN;
8+
DECLARE @cmd NVARCHAR(MAX);
9+
WITH L AS
10+
(
11+
SELECT
12+
ROL.Id,
13+
ParentROL.Id ParentId,
14+
ISNULL(ParentROL.Id,ROL.Id) SortId,
15+
ROL.ObjectId,
16+
OBJECT_SCHEMA_NAME(ROL.ObjectId) SchemaName,
17+
OBJECT_NAME(ROL.ObjectId) CurrentName,
18+
PARSENAME(ROL.OriginalName,1) OriginalName,
19+
O.type ObjectType
20+
FROM tSQLt.Private_RenamedObjectLog ROL
21+
JOIN sys.objects O
22+
ON ROL.ObjectId = O.object_id
23+
LEFT JOIN tSQLt.Private_RenamedObjectLog ParentROL
24+
ON O.parent_object_id = ParentROL.ObjectId
25+
)
26+
SELECT @cmd =
27+
(
28+
SELECT
29+
CASE WHEN L.ParentId IS NULL THEN DC.cmd ELSE '' END+
30+
';EXEC tSQLt.Private_RenameObject '''+L.SchemaName+''','''+L.CurrentName+''','''+L.OriginalName+''';'
31+
FROM L
32+
CROSS APPLY tSQLt.Private_GetDropItemCmd(QUOTENAME(L.SchemaName)+'.'+QUOTENAME(L.OriginalName),L.ObjectType) DC
33+
ORDER BY L.SortId DESC, L.Id ASC
34+
FOR XML PATH(''),TYPE
35+
).value('.','NVARCHAR(MAX)')
36+
EXEC(@cmd);
1637
END;
1738
GO
1839

Tests/UndoTestDoublesTests.class.sql

Lines changed: 111 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,134 @@ GO
1313
CREATE PROCEDURE UndoTestDoublesTests.[test restores a faked table]
1414
AS
1515
BEGIN
16-
CREATE TABLE UndoTestDoublesTests.aSimpleTable
16+
CREATE TABLE UndoTestDoublesTests.aSimpleTable ( Id INT );
17+
18+
DECLARE @OriginalObjectId INT = OBJECT_ID('UndoTestDoublesTests.aSimpleTable');
19+
20+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable';
21+
22+
EXEC tSQLt.UndoTestDoubles;
23+
24+
DECLARE @RestoredObjectId INT = OBJECT_ID('UndoTestDoublesTests.aSimpleTable');
25+
EXEC tSQLt.AssertEquals @Expected = @OriginalObjectId, @Actual = @RestoredObjectId;
26+
27+
END;
28+
GO
29+
CREATE PROCEDURE UndoTestDoublesTests.[test works with names in need of quotes]
30+
AS
31+
BEGIN
32+
EXEC('CREATE SCHEMA [A Random Schema];');
33+
CREATE TABLE [A Random Schema].[A Simple Table]
1734
(
1835
Id INT
1936
);
2037

38+
DECLARE @OriginalObjectId INT = OBJECT_ID('[A Random Schema].[A Simple Table]');
39+
40+
EXEC tSQLt.FakeTable @TableName = '[A Random Schema].[A Simple Table]';
41+
42+
EXEC tSQLt.UndoTestDoubles;
43+
44+
DECLARE @RestoredObjectId INT = OBJECT_ID('[A Random Schema].[A Simple Table]');
45+
EXEC tSQLt.AssertEquals @Expected = @OriginalObjectId, @Actual = @RestoredObjectId;
46+
47+
END;
48+
GO
49+
CREATE PROCEDURE UndoTestDoublesTests.[test restores many faked tables]
50+
AS
51+
BEGIN
52+
CREATE TABLE UndoTestDoublesTests.aSimpleTable1 ( Id INT );
53+
CREATE TABLE UndoTestDoublesTests.aSimpleTable2 ( Id INT );
54+
CREATE TABLE UndoTestDoublesTests.aSimpleTable3 ( Id INT );
55+
56+
SELECT X.TableName, OBJECT_ID('UndoTestDoublesTests.'+X.TableName) ObjectId
57+
INTO #OriginalObjectIds
58+
FROM (VALUES('aSimpleTable1'),('aSimpleTable2'),('aSimpleTable3')) X (TableName);
59+
60+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable1';
61+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable2';
62+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable3';
63+
64+
EXEC tSQLt.UndoTestDoubles;
65+
66+
SELECT X.TableName, OBJECT_ID('UndoTestDoublesTests.'+X.TableName) ObjectId
67+
INTO #RestoredObjectIds
68+
FROM (VALUES('aSimpleTable1'),('aSimpleTable2'),('aSimpleTable3')) X (TableName);
69+
70+
EXEC tSQLt.AssertEqualsTable @Expected = '#OriginalObjectIds', @Actual = '#RestoredObjectIds';
71+
72+
END;
73+
GO
74+
CREATE PROCEDURE UndoTestDoublesTests.[test restores a constraint]
75+
AS
76+
BEGIN
77+
CREATE TABLE UndoTestDoublesTests.aSimpleTable ( Id INT CONSTRAINT aSimpleTableConstraint CHECK(Id > 0));
78+
79+
SELECT X.ObjectName, OBJECT_ID('UndoTestDoublesTests.'+X.ObjectName) ObjectId
80+
INTO #OriginalObjectIds
81+
FROM (VALUES('aSimpleTableConstraint')) X (ObjectName);
82+
83+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable';
84+
EXEC tSQLt.ApplyConstraint @TableName = 'UndoTestDoublesTests.aSimpleTable', @ConstraintName = 'aSimpleTableConstraint';
85+
86+
EXEC tSQLt.UndoTestDoubles;
87+
88+
SELECT X.ObjectName, OBJECT_ID('UndoTestDoublesTests.'+X.ObjectName) ObjectId
89+
INTO #RestoredObjectIds
90+
FROM (VALUES('aSimpleTableConstraint')) X (ObjectName);
91+
92+
EXEC tSQLt.AssertEqualsTable @Expected = '#OriginalObjectIds', @Actual = '#RestoredObjectIds';
93+
94+
END;
95+
GO
96+
CREATE PROCEDURE UndoTestDoublesTests.[test restores a table that has been faked multiple times]
97+
AS
98+
BEGIN
99+
CREATE TABLE UndoTestDoublesTests.aSimpleTable ( Id INT );
100+
21101
DECLARE @OriginalObjectId INT = OBJECT_ID('UndoTestDoublesTests.aSimpleTable');
22102

103+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable';
104+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable';
23105
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable';
24106

25107
EXEC tSQLt.UndoTestDoubles;
26108

27109
DECLARE @RestoredObjectId INT = OBJECT_ID('UndoTestDoublesTests.aSimpleTable');
28110
EXEC tSQLt.AssertEquals @Expected = @OriginalObjectId, @Actual = @RestoredObjectId;
29111

112+
END;
113+
GO
114+
CREATE PROCEDURE UndoTestDoublesTests.[test restores a trigger]
115+
AS
116+
BEGIN
117+
CREATE TABLE UndoTestDoublesTests.aSimpleTable ( Id INT );
118+
EXEC('CREATE TRIGGER aSimpleTrigger ON UndoTestDoublesTests.aSimpleTable FOR INSERT AS RETURN;');
119+
120+
SELECT X.ObjectName, OBJECT_ID('UndoTestDoublesTests.'+X.ObjectName) ObjectId
121+
INTO #OriginalObjectIds
122+
FROM (VALUES('aSimpleTrigger')) X (ObjectName);
123+
124+
EXEC tSQLt.FakeTable @TableName = 'UndoTestDoublesTests.aSimpleTable';
125+
EXEC tSQLt.ApplyTrigger @TableName = 'UndoTestDoublesTests.aSimpleTable', @TriggerName = 'aSimpleTrigger';
126+
127+
EXEC tSQLt.UndoTestDoubles;
128+
129+
SELECT X.ObjectName, OBJECT_ID('UndoTestDoublesTests.'+X.ObjectName) ObjectId
130+
INTO #RestoredObjectIds
131+
FROM (VALUES('aSimpleTrigger')) X (ObjectName);
132+
133+
EXEC tSQLt.AssertEqualsTable @Expected = '#OriginalObjectIds', @Actual = '#RestoredObjectIds';
134+
30135
END;
31136
GO
32137
/*--
33138
TODO
34-
- ApplyConstraint
35-
- ApplyTrigger
139+
==> multiple constraints and triggers on a multiple tables, faked multiple times
140+
- stored procedures
141+
- views
142+
- functions
143+
36144
37145
Also, just review all the code.
38146

0 commit comments

Comments
 (0)