Skip to content

Commit 06a6f5d

Browse files
committed
Updated tests for FakeTableTests.class.sql to better align with TDD practices; added a new extended property tSQLt.IsTempObject for table test double; changed the name of the original extended property from tSQLt.FakeTable_OrgTableName to tSQLt.Private_TestDouble_OrgObjectName
1 parent 5fca51c commit 06a6f5d

10 files changed

+81
-60
lines changed

Experiments/NameResolutionResearch.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ tSQLt.FakeTable
180180
EXEC (@cmd);
181181

182182
EXEC sys.sp_addextendedproperty
183-
@name = N'tSQLt.FakeTable_OrgTableName',
183+
@name = N'tSQLt.Private_TestDouble_OrgObjectName',
184184
@value = @newName,
185185
@level0type = N'SCHEMA', @level0name = @schemaName, -- <use tSQLt.private_getCleanSchemaName>
186186
@level1type = N'TABLE', @level1name = @tableName; -- <use tSQLt.[private_getCleanObjectName]>
@@ -210,7 +210,7 @@ tSQLt.ApplyConstraint
210210
WHERE class_desc = 'OBJECT_OR_COLUMN'
211211
AND major_id = OBJECT_ID(@schemaName + '.' + @tableName) -- <use tSQLt.private_GetQuotedFullName>
212212
AND minor_id = 0
213-
AND name = 'tSQLt.FakeTable_OrgTableName';
213+
AND name = 'tSQLt.Private_TestDouble_OrgObjectName';
214214

215215
SELECT @cmd = 'CONSTRAINT ' + name + ' CHECK' + definition
216216
FROM sys.check_constraints

Source/ApplyConstraint_Methods.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ RETURN
2323
ON newtbl.object_id = p.major_id
2424
AND p.minor_id = 0
2525
AND p.class_desc = 'OBJECT_OR_COLUMN'
26-
AND p.name = 'tSQLt.FakeTable_OrgTableName'
26+
AND p.name = 'tSQLt.Private_TestDouble_OrgObjectName'
2727
ON OBJECT_NAME(constraints.parent_object_id) = CAST(p.value AS NVARCHAR(4000))
2828
AND constraints.schema_id = newtbl.schema_id
2929
AND constraints.object_id = @ConstraintObjectId;

Source/BuildOrder.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ tSQLt.Private_GetDefaultConstraintDefinition.sfn.sql
6868
tSQLt.Private_GetUniqueConstraintDefinition.sfn.sql
6969
tSQLt.Private_CreateFakeTableStatement.sfn.sql
7070
tSQLt.Private_CreateFakeOfTable.ssp.sql
71-
tSQLt.Private_MarkFakeTable.ssp.sql
71+
tSQLt.Private_MarktSQLtTempObject.ssp.sql
7272
tSQLt.FakeTable.ssp.sql
7373
tSQLt.Private_GenerateCreateProcedureSpyStatement.ssp.sql
7474
tSQLt.Private_CreateProcedureSpy.ssp.sql

Source/Source.ssmssqlproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
<SqlWorkbenchSqlProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Source">
33
<Items>
44
<LogicalFolder Name="Connections" Type="2" Sorted="true">
5-
<Items />
65
</LogicalFolder>
76
<LogicalFolder Name="Queries" Type="0" Sorted="true">
87
<Items>
@@ -390,11 +389,11 @@
390389
<AssociatedConnUserName />
391390
<FullPath>tSQLt.Private_ListTestAnnotations.sfn.sql</FullPath>
392391
</FileNode>
393-
<FileNode Name="tSQLt.Private_MarkFakeTable.ssp.sql">
392+
<FileNode Name="tSQLt.Private_MarktSQLtTempObject.ssp.sql">
394393
<AssociatedConnectionMoniker />
395394
<AssociatedConnSrvName />
396395
<AssociatedConnUserName />
397-
<FullPath>tSQLt.Private_MarkFakeTable.ssp.sql</FullPath>
396+
<FullPath>tSQLt.Private_MarktSQLtTempObject.ssp.sql</FullPath>
398397
</FileNode>
399398
<FileNode Name="tSQLt.Private_MarkObjectBeforeRename.ssp.sql">
400399
<AssociatedConnectionMoniker />

Source/tSQLt.FakeTable.ssp.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ BEGIN
4949

5050
EXEC tSQLt.Private_CreateFakeOfTable @SchemaName, @TableName, @OrigTableFullName, @Identity, @ComputedColumns, @Defaults;
5151

52-
EXEC tSQLt.Private_MarkFakeTable @SchemaName, @TableName, @NewNameOfOriginalTable;
52+
EXEC tSQLt.Private_MarktSQLtTempObject @SchemaName, @TableName, @NewNameOfOriginalTable;
5353
END
5454
---Build-
5555
GO

Source/tSQLt.Private_GetForeignKeyDefinition.sfn.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ RETURN SELECT 'CONSTRAINT ' + name + ' FOREIGN KEY (' +
7979
CROSS APPLY tSQLt.Private_GetForeignKeyParColumns(k.object_id) AS parCol
8080
CROSS APPLY tSQLt.Private_GetForeignKeyRefColumns(k.object_id) AS refCol
8181
LEFT JOIN sys.extended_properties e
82-
ON e.name = 'tSQLt.FakeTable_OrgTableName'
82+
ON e.name = 'tSQLt.Private_TestDouble_OrgObjectName'
8383
AND e.value = OBJECT_NAME(k.referenced_object_id)
8484
JOIN sys.tables refTab
8585
ON COALESCE(e.major_id,k.referenced_object_id) = refTab.object_id

Source/tSQLt.Private_MarkFakeTable.ssp.sql renamed to Source/tSQLt.Private_MarktSQLtTempObject.ssp.sql

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
IF OBJECT_ID('tSQLt.Private_MarkFakeTable') IS NOT NULL DROP PROCEDURE tSQLt.Private_MarkFakeTable;
1+
IF OBJECT_ID('tSQLt.Private_MarktSQLtTempObject') IS NOT NULL DROP PROCEDURE tSQLt.Private_MarktSQLtTempObject;
22
GO
33
---Build+
4-
CREATE PROCEDURE tSQLt.Private_MarkFakeTable
4+
CREATE PROCEDURE tSQLt.Private_MarktSQLtTempObject
55
@SchemaName NVARCHAR(MAX),
66
@TableName NVARCHAR(MAX),
77
@NewNameOfOriginalTable NVARCHAR(4000)
@@ -11,7 +11,13 @@ BEGIN
1111
DECLARE @UnquotedTableName NVARCHAR(MAX);SET @UnquotedTableName = OBJECT_NAME(OBJECT_ID(@SchemaName+'.'+@TableName));
1212

1313
EXEC sys.sp_addextendedproperty
14-
@name = N'tSQLt.FakeTable_OrgTableName',
14+
@name = N'tSQLt.IsTempObject',
15+
@value = 1,
16+
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
17+
@level1type = N'TABLE', @level1name = @UnquotedTableName;
18+
19+
EXEC sys.sp_addextendedproperty
20+
@name = N'tSQLt.Private_TestDouble_OrgObjectName',
1521
@value = @NewNameOfOriginalTable,
1622
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
1723
@level1type = N'TABLE', @level1name = @UnquotedTableName;

Source/tSQLt.class.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ BEGIN
266266
WHERE class_desc = 'OBJECT_OR_COLUMN'
267267
AND major_id = OBJECT_ID(@SchemaName + '.' + @TableName)
268268
AND minor_id = 0
269-
AND name = 'tSQLt.FakeTable_OrgTableName');
269+
AND name = 'tSQLt.Private_TestDouble_OrgObjectName');
270270
END;
271271
GO
272272

@@ -279,7 +279,7 @@ AS
279279
WHERE class_desc = 'OBJECT_OR_COLUMN'
280280
AND major_id = @TableObjectId
281281
AND minor_id = 0
282-
AND name = 'tSQLt.FakeTable_OrgTableName';
282+
AND name = 'tSQLt.Private_TestDouble_OrgObjectName';
283283
GO
284284

285285

Source/testoutput.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ RETURN SELECT 'CONSTRAINT ' + name + ' FOREIGN KEY (' +
9595
ON refCol.object_id = c.referenced_object_id
9696
AND refCol.column_id = c.referenced_column_id
9797
LEFT JOIN sys.extended_properties e
98-
ON e.name = 'tSQLt.FakeTable_OrgTableName'
98+
ON e.name = 'tSQLt.Private_TestDouble_OrgObjectName'
9999
AND e.value = OBJECT_NAME(c.referenced_object_id)
100100
JOIN sys.tables refTab
101101
ON COALESCE(e.major_id,refCol.object_id) = refTab.object_id

Tests/FakeTableTests.class.sql

Lines changed: 61 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,52 +17,49 @@
1717
EXEC tSQLt.NewTestClass 'FakeTableTests';
1818
GO
1919

20-
CREATE PROC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints
21-
@TableName NVARCHAR(MAX)
20+
CREATE PROC FakeTableTests.AssertTableIsNewObjectThatHasNoChildObjects
21+
@TableName NVARCHAR(MAX),
22+
@OriginalObjectId INT
2223
AS
2324
BEGIN
24-
DECLARE @OldTableObjectId INT;
25-
2625
IF OBJECT_ID(@TableName) IS NULL
2726
EXEC tSQLt.Fail 'Table ',@TableName,' does not exist!';
28-
29-
SELECT @OldTableObjectId = OBJECT_ID(QUOTENAME(OBJECT_SCHEMA_NAME(major_id))+'.'+QUOTENAME(CAST(value AS NVARCHAR(4000))))
30-
FROM sys.extended_properties WHERE major_id = OBJECT_ID(@TableName) and name = 'tSQLt.FakeTable_OrgTableName'
31-
32-
IF @OldTableObjectId IS NULL
33-
EXEC tSQLt.Fail 'Table ',@TableName,' is not a fake table!';
3427

35-
IF OBJECT_ID(@TableName) = @OldTableObjectId
28+
IF OBJECT_ID(@TableName) = @OriginalObjectId
3629
EXEC tSQLt.Fail 'Table ',@TableName,' is not a new object!';
3730

38-
SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id))+'.'+QUOTENAME(OBJECT_NAME(object_id)) ReferencingObjectName
39-
INTO #actual FROM sys.objects WHERE parent_object_id = OBJECT_ID(@TableName);
40-
41-
SELECT TOP(0) * INTO #expected FROM #actual;
31+
SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id))+'.'+QUOTENAME(OBJECT_NAME(object_id)) ReferencingObjectName, type_desc
32+
INTO #ChildObjects FROM sys.objects WHERE parent_object_id = OBJECT_ID(@TableName);
4233

43-
EXEC tSQLt.AssertEqualsTable '#expected','#actual','Unexpected referencing objects found!';
34+
EXEC tSQLt.AssertEmptyTable @TableName = '#ChildObjects', @Message = 'Unexpected child objects found!';
4435
END
4536
GO
4637

4738
CREATE PROC FakeTableTests.[test FakeTable works with 2 part names in first parameter]
4839
AS
4940
BEGIN
5041
CREATE TABLE FakeTableTests.TempTable1(i INT);
42+
DECLARE @OriginalObjectId INT = OBJECT_ID('FakeTableTests.TempTable1');
5143

5244
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
5345

54-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
46+
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoChildObjects
47+
@TableName = 'FakeTableTests.TempTable1',
48+
@OriginalObjectId = @OriginalObjectId;
5549
END;
5650
GO
5751

5852
CREATE PROC FakeTableTests.[test FakeTable takes 2 nameless parameters containing schema and table name]
5953
AS
6054
BEGIN
6155
CREATE TABLE FakeTableTests.TempTable1(i INT);
56+
DECLARE @OriginalObjectId INT = OBJECT_ID('FakeTableTests.TempTable1');
6257

6358
EXEC tSQLt.FakeTable 'FakeTableTests','TempTable1';
6459

65-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
60+
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoChildObjects
61+
@TableName = 'FakeTableTests.TempTable1',
62+
@OriginalObjectId = @OriginalObjectId;
6663
END;
6764
GO
6865

@@ -161,11 +158,9 @@ CREATE PROC FakeTableTests.[test a faked table has no primary key]
161158
AS
162159
BEGIN
163160
CREATE TABLE FakeTableTests.TempTable1(i INT PRIMARY KEY);
164-
161+
165162
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
166163

167-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
168-
169164
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (1);
170165
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (1);
171166
END;
@@ -178,7 +173,6 @@ BEGIN
178173

179174
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
180175

181-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
182176
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (5);
183177
END;
184178
GO
@@ -187,11 +181,10 @@ CREATE PROC FakeTableTests.[test a faked table has no foreign keys]
187181
AS
188182
BEGIN
189183
CREATE TABLE FakeTableTests.TempTable0(i INT PRIMARY KEY);
190-
CREATE TABLE FakeTableTests.TempTable1(i INT REFERENCES FakeTableTests.TempTable0(i));
184+
CREATE TABLE FakeTableTests.TempTable1(i INT REFERENCES FakeTableTests.TempTable0(i));
191185

192186
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
193-
194-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
187+
195188
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (5);
196189
END;
197190
GO
@@ -203,12 +196,9 @@ BEGIN
203196

204197
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
205198

206-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
207199
INSERT INTO FakeTableTests.TempTable1 (i) DEFAULT VALUES;
208200

209-
DECLARE @value INT;
210-
SELECT @value = i
211-
FROM FakeTableTests.TempTable1;
201+
DECLARE @value INT = (SELECT i FROM FakeTableTests.TempTable1);
212202

213203
EXEC tSQLt.AssertEquals NULL, @value;
214204
END;
@@ -221,7 +211,6 @@ BEGIN
221211

222212
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
223213

224-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
225214
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (1);
226215
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (1);
227216
END;
@@ -235,7 +224,6 @@ BEGIN
235224

236225
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
237226

238-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
239227
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (1);
240228
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (1);
241229
END;
@@ -248,7 +236,6 @@ BEGIN
248236

249237
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
250238

251-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
252239
INSERT INTO FakeTableTests.TempTable1 (i) VALUES (NULL);
253240
END;
254241
GO
@@ -1014,28 +1001,57 @@ AS
10141001
BEGIN
10151002
CREATE TABLE FakeTableTests.TempTable1(i INT NOT NULL);
10161003

1004+
DECLARE @OriginalObjectId INT = OBJECT_ID('FakeTableTests.TempTable1');
1005+
10171006
EXEC tSQLt.FakeTable '[FakeTableTests]','[TempTable1]';
10181007

1019-
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
1008+
EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoChildObjects
1009+
@TableName = 'FakeTableTests.TempTable1',
1010+
@OriginalObjectId = @OriginalObjectId;
10201011

10211012
END;
10221013
GO
1023-
1024-
--CREATE PROC FakeTableTests.[test FakeTable works with cross database synonym]
1025-
--AS
1026-
--BEGIN
1027-
-- CREATE TABLE tempdb.dbo.TempTable1(i INT NOT NULL);
1028-
-- CREATE SYNONYM FakeTableTests.TempTable1 FOR tempdb.dbo.TempTable1
1014+
CREATE PROC FakeTableTests.[test new FakeTable is marked as tSQLt.IsTempObject]
1015+
AS
1016+
BEGIN
1017+
CREATE TABLE FakeTableTests.TempTable1(i INT NOT NULL);
10291018

1030-
-- EXEC tSQLt.FakeTable '[FakeTableTests]','[TempTable1]';
1019+
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
10311020

1032-
-- EXEC FakeTableTests.AssertTableIsNewObjectThatHasNoConstraints 'FakeTableTests.TempTable1';
1033-
1034-
--END;
1035-
--GO
1021+
SELECT name, value
1022+
INTO #Actual
1023+
FROM sys.extended_properties
1024+
WHERE class_desc = 'OBJECT_OR_COLUMN'
1025+
AND major_id = OBJECT_ID('FakeTableTests.TempTable1')
1026+
AND name = 'tSQLt.IsTempObject';
10361027

1028+
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
1029+
1030+
INSERT INTO #Expected VALUES('tSQLt.IsTempObject', 1);
10371031

1032+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
1033+
END;
1034+
GO
1035+
CREATE PROC FakeTableTests.[test new FakeTable is marked with tSQLt.Private_TestDouble_OrgObjectName]
1036+
AS
1037+
BEGIN
1038+
CREATE TABLE FakeTableTests.TempTable1(i INT NOT NULL);
1039+
DECLARE @OriginalObjectId INT = OBJECT_ID('FakeTableTests.TempTable1');
1040+
1041+
EXEC tSQLt.FakeTable 'FakeTableTests.TempTable1';
1042+
1043+
SELECT name, value
1044+
INTO #Actual
1045+
FROM sys.extended_properties
1046+
WHERE class_desc = 'OBJECT_OR_COLUMN'
1047+
AND major_id = OBJECT_ID('FakeTableTests.TempTable1')
1048+
AND name = 'tSQLt.Private_TestDouble_OrgObjectName';
10381049

1050+
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
1051+
1052+
INSERT INTO #Expected VALUES('tSQLt.Private_TestDouble_OrgObjectName', OBJECT_NAME(@OriginalObjectId));
10391053

1040-
--ROLLBACK
1054+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
1055+
END;
1056+
GO
10411057

0 commit comments

Comments
 (0)