diff --git a/Source/BuildOrder.txt b/Source/BuildOrder.txt index fb97a1066..71483abdb 100644 --- a/Source/BuildOrder.txt +++ b/Source/BuildOrder.txt @@ -1,5 +1,6 @@ tSQLt._Header.sql tSQLt.DropClass.ssp.sql +tSQLt.DropAllClasses.ssp.sql tSQLt.Private_Bin2Hex.sfn.sql tSQLt.Private_NewTestClassList.tbl.sql tSQLt.Private_ResetNewTestClassList.ssp.sql diff --git a/Source/Source.ssmssqlproj b/Source/Source.ssmssqlproj index ed043c2a4..2319a8fc3 100644 --- a/Source/Source.ssmssqlproj +++ b/Source/Source.ssmssqlproj @@ -139,6 +139,12 @@ tSQLt.CaptureOutputLog.tbl.sql + + + + + tSQLt.DropAllClasses.ssp.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt diff --git a/Source/tSQLt.DropAllClasses.ssp.sql b/Source/tSQLt.DropAllClasses.ssp.sql new file mode 100644 index 000000000..791dd2f9c --- /dev/null +++ b/Source/tSQLt.DropAllClasses.ssp.sql @@ -0,0 +1,26 @@ +IF OBJECT_ID('tSQLt.DropAllClasses') IS NOT NULL DROP PROCEDURE tSQLt.DropAllClasses; +GO +---Build+ +CREATE PROCEDURE tSQLt.DropAllClasses +AS +BEGIN + DECLARE TestClass CURSOR LOCAL FAST_FORWARD + FOR + SELECT Name FROM tSQLt.TestClasses; + + DECLARE @schema sysname; + OPEN TestClass; + + WHILE 1 = 1 + BEGIN + FETCH NEXT FROM TestClass INTO @schema; + IF @@FETCH_STATUS <> 0 + BREAK; + EXEC tSQLt.DropClass @ClassName = @schema; + END; + + CLOSE TestClass; + DEALLOCATE TestClass; +END; +---Build- +GO diff --git a/Tests/DropAllClassesTests.class.sql b/Tests/DropAllClassesTests.class.sql new file mode 100644 index 000000000..1f8ee67ee --- /dev/null +++ b/Tests/DropAllClassesTests.class.sql @@ -0,0 +1,50 @@ +EXEC tSQLt.NewTestClass 'DropAllClassesTests'; +GO + +CREATE PROC DropAllClassesTests.[test DropClass not called if no test classes exist] +AS +BEGIN + EXEC tSQLt.FakeTable 'tSQLt.TestClasses'; + EXEC tSQLt.SpyProcedure 'tSQLt.DropClass'; + + EXEC tSQLt.DropAllClasses; + + EXEC tSQLt.AssertEmptyTable 'tSQLt.DropClass_SpyProcedureLog'; +END; +GO +CREATE PROC DropAllClassesTests.[test that one test class results in one call to DropClass] +AS +BEGIN + EXEC tSQLt.FakeTable 'tSQLt.TestClasses'; + EXEC tSQLt.SpyProcedure 'tSQLt.DropClass'; + EXEC('INSERT INTO tSQLt.TestClasses (Name) + VALUES (''MyTestClass'');'); + + SELECT ClassName = Name INTO #expected FROM tSQLt.TestClasses; + + EXEC tSQLt.DropAllClasses; + + SELECT ClassName INTO #actual FROM tSQLt.DropClass_SpyProcedureLog; + + EXEC tSQLt.AssertEqualsTable '#expected', '#actual'; +END; +GO +CREATE PROC DropAllClassesTests.[test that multiple test classes are all sent to DropClass] +AS +BEGIN + EXEC tSQLt.FakeTable 'tSQLt.TestClasses'; + EXEC tSQLt.SpyProcedure 'tSQLt.DropClass'; + EXEC('INSERT INTO tSQLt.TestClasses (Name) + VALUES (''MyTestClass1''), + (''MyTestClass2''), + (''MyTestClass3'');'); + + SELECT ClassName = Name INTO #expected FROM tSQLt.TestClasses; + + EXEC tSQLt.DropAllClasses; + + SELECT ClassName INTO #actual FROM tSQLt.DropClass_SpyProcedureLog; + + EXEC tSQLt.AssertEqualsTable '#expected', '#actual'; +END; +GO diff --git a/Tests/Tests.ssmssqlproj b/Tests/Tests.ssmssqlproj index fbd9eac4f..f22bbfedf 100644 --- a/Tests/Tests.ssmssqlproj +++ b/Tests/Tests.ssmssqlproj @@ -91,6 +91,12 @@ BootStrapTest.sql + + + + + DropAllClassesTests.class.sql + 8c91a03d-f9b4-46c0-a305-b5dcc79ff907:Dev_tSQLt:True Dev_tSQLt