Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
initial commit
  • Loading branch information
lizbaron committed Aug 15, 2021
commit 54246d605eb746446d3efbbb9cf272c14ed1148c
17 changes: 17 additions & 0 deletions TestSomething/Code/Bookings.Customers.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
CREATE SEQUENCE Bookings.CustomerSequence AS INT START WITH 0 INCREMENT BY 1;
GO
CREATE TABLE Bookings.Customers
(
CustomerId INT
CONSTRAINT Booking_Customers_CustomerId_DF DEFAULT NEXT VALUE FOR Bookings.CustomerSequence
CONSTRAINT Booking_Customers_PK PRIMARY KEY CLUSTERED,
FirstName NVARCHAR(200),
LastName NVARCHAR(200),
JoinDate DATE,
BirthDate DATE,
GenderCd CHAR(1),
RegionId INT,
Email NVARCHAR(MAX),
OptIn BIT,
AdditionalColumns BINARY(200)
);
17 changes: 17 additions & 0 deletions TestSomething/Code/Bookings.Reservations.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
CREATE SEQUENCE Bookings.ReservationSequence AS INT START WITH 0 INCREMENT BY 1;
GO
CREATE TABLE Bookings.Reservations
(
ReservationId INT
CONSTRAINT [Booking.Reservations.ReservationId:DF] DEFAULT NEXT VALUE FOR Bookings.ReservationSequence
CONSTRAINT [Booking.Reservations:PK] PRIMARY KEY CLUSTERED,
CustomerId INT,
HotelId INT,
BookingDate DATETIME2,
StartDate DATE,
StayLengthInDays INT,
ReservationDate DATE,
AdditionalColumns BINARY(200),
CONSTRAINT [Bookings.Reservations:FK-->Bookings.Customers]
FOREIGN KEY (CustomerId) REFERENCES Bookings.Customers(CustomerId)
);
1 change: 1 addition & 0 deletions TestSomething/Code/Bookings.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE SCHEMA [Bookings]
70 changes: 70 additions & 0 deletions TestSomething/Code/Code.sqlproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Name>Code</Name>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>4.1</ProjectVersion>
<ProjectGuid>{017953a9-c3d7-4473-8cca-9a45ee1c4d5d}</ProjectGuid>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql150DatabaseSchemaProvider</DSP>
<OutputType>Database</OutputType>
<RootPath>
</RootPath>
<RootNamespace>Code</RootNamespace>
<AssemblyName>Code</AssemblyName>
<ModelCollation>1033, CI</ModelCollation>
<DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
<DeployToDatabase>True</DeployToDatabase>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetLanguage>CS</TargetLanguage>
<AppDesignerFolder>Properties</AppDesignerFolder>
<SqlServerVerification>False</SqlServerVerification>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseSet>True</TargetDatabaseSet>
<IncludeSchemaNameInFileName>True</IncludeSchemaNameInFileName>
<TargetDatabase>Code</TargetDatabase>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<ItemGroup>
<Folder Include="Properties" />
</ItemGroup>
<ItemGroup>
<Build Include="Marketing.sql" />
<Build Include="Marketing.GetGreeting.sql" />
<Build Include="Marketing.EmailList.sql" />
<Build Include="Bookings.sql" />
<Build Include="Bookings.Customers.sql" />
<Build Include="Bookings.Reservations.sql" />
</ItemGroup>
</Project>
8 changes: 8 additions & 0 deletions TestSomething/Code/Marketing.EmailList.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CREATE VIEW Marketing.EmailList
AS
SELECT C.CustomerId, C.FirstName, C.LastName, C.Email, C.OptIn, ISNULL(R.ReservationCount,0) ReservationCount
FROM Bookings.Customers AS C
LEFT JOIN (SELECT CustomerId, COUNT(1) ReservationCount FROM Bookings.Reservations GROUP BY CustomerId) AS R
ON R.CustomerId = C.CustomerId
WHERE C.OptIn = 1;

10 changes: 10 additions & 0 deletions TestSomething/Code/Marketing.GetGreeting.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
CREATE FUNCTION Marketing.GetGreeting(@FirstName NVARCHAR(MAX), @LastName NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN 'Dear ' + CASE
WHEN @FirstName IS NULL THEN 'Friend'
WHEN @LastName IS NULL THEN @FirstName
ELSE LEFT(@FirstName,1) + '. ' + @LastName
END;
END;
1 change: 1 addition & 0 deletions TestSomething/Code/Marketing.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CREATE SCHEMA [Marketing]
38 changes: 38 additions & 0 deletions TestSomething/TestSomething.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31205.134
MinimumVisualStudioVersion = 10.0.40219.1
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "Tests", "Tests\Tests.sqlproj", "{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}"
ProjectSection(ProjectDependencies) = postProject
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D} = {017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}
EndProjectSection
EndProject
Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "Code", "Code\Code.sqlproj", "{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}.Release|Any CPU.Build.0 = Release|Any CPU
{D2A2592D-1509-4D96-A2A8-0B9B68679EC3}.Release|Any CPU.Deploy.0 = Release|Any CPU
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}.Release|Any CPU.Build.0 = Release|Any CPU
{017953A9-C3D7-4473-8CCA-9A45EE1C4D5D}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7211CF9F-D1AC-4C59-816E-4895232BE58E}
EndGlobalSection
EndGlobal
84 changes: 84 additions & 0 deletions TestSomething/Tests/Marketing_EmailList_Tests.class.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
CREATE SCHEMA [Marketing_EmailList_Tests] AUTHORIZATION [tSQLt.TestClass];
GO

CREATE PROCEDURE Marketing_EmailList_Tests.[test returns no rows if customers table is empty]
AS
BEGIN
EXEC tSQLt.FakeTable @TableName = 'Bookings.Customers';

SELECT * INTO #Actual FROM Marketing.EmailList AS C;

EXEC tSQLt.AssertEmptyTable @TableName='#Actual';
END;
GO

CREATE PROCEDURE Marketing_EmailList_Tests.[test returns correct columns for a single opted-in customer]
AS
BEGIN
EXEC tSQLt.FakeTable @TableName = 'Bookings.Customers';
INSERT INTO Bookings.Customers (CustomerId, FirstName, LastName, Email, OptIn)
VALUES(1201,'1201_fn','1201_ln','1201_email',1);

SELECT CustomerId, FirstName, LastName, Email, OptIn INTO #Actual FROM Marketing.EmailList AS C;
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
INSERT INTO #Expected
VALUES(1201,'1201_fn','1201_ln','1201_email',1);

EXEC tSQLt.AssertEqualsTable @Expected='#Expected', @Actual='#Actual';
END;
GO

CREATE PROCEDURE Marketing_EmailList_Tests.[test returns multiple opted-in customers]
AS
BEGIN
EXEC tSQLt.FakeTable @TableName = 'Bookings.Customers';
INSERT INTO Bookings.Customers (CustomerId, OptIn)
VALUES(1201,1),(1202,1),(1203,1);

SELECT CustomerId, OptIn INTO #Actual FROM Marketing.EmailList AS C;
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
INSERT INTO #Expected
VALUES(1201,1),(1202,1),(1203,1);

EXEC tSQLt.AssertEqualsTable @Expected='#Expected', @Actual='#Actual';
END;
GO

CREATE PROCEDURE Marketing_EmailList_Tests.[test returns only opted-in customers]
AS
BEGIN
EXEC tSQLt.FakeTable @TableName = 'Bookings.Customers';
INSERT INTO Bookings.Customers (CustomerId, OptIn)
VALUES(1201,0),(1202,1),(1203,0);

SELECT CustomerId, OptIn INTO #Actual FROM Marketing.EmailList AS C;
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
INSERT INTO #Expected
VALUES(1202,1);

EXEC tSQLt.AssertEqualsTable @Expected='#Expected', @Actual='#Actual';
END;
GO
/*---------------------------------------------------------------------------
-- Tests below this line are for the optional exercise
---------------------------------------------------------------------------*/
GO

CREATE PROCEDURE Marketing_EmailList_Tests.[test returns accurate reservation count for each customer]
AS
BEGIN
EXEC tSQLt.FakeTable @TableName = 'Bookings.Customers';
EXEC tSQLt.FakeTable @TableName = 'Bookings.Reservations';
INSERT INTO Bookings.Customers (CustomerId, OptIn)
VALUES(1201,1),(1202,1),(1203,1);
INSERT INTO Bookings.Reservations(CustomerId)
VALUES(1202),(1203),(1203),(1203);

SELECT CustomerId, ReservationCount INTO #Actual FROM Marketing.EmailList AS C;
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
INSERT INTO #Expected
VALUES(1201,0),(1202,1),(1203,3);

EXEC tSQLt.AssertEqualsTable @Expected='#Expected', @Actual='#Actual';
END;
GO
67 changes: 67 additions & 0 deletions TestSomething/Tests/Marketing_GetGreeting_Tests.class.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
CREATE SCHEMA [Marketing_GetGreeting_Tests] AUTHORIZATION [tSQLt.TestClass];
GO

CREATE PROCEDURE Marketing_GetGreeting_Tests.[test returns correct greeting for John Smith]
AS
BEGIN
DECLARE @ActualGreeting NVARCHAR(MAX);
DECLARE @FirstName NVARCHAR(MAX) = 'John';
DECLARE @LastName NVARCHAR(MAX) = 'Smith';

SELECT @ActualGreeting = Marketing.GetGreeting(@FirstName,@LastName);

EXEC tSQLt.AssertEqualsString @Expected = 'Dear J. Smith', @Actual = @ActualGreeting;
END
GO

CREATE PROCEDURE Marketing_GetGreeting_Tests.[test returns correct greeting for another customer]
AS
BEGIN
DECLARE @ActualGreeting NVARCHAR(MAX);
DECLARE @FirstName NVARCHAR(MAX) = 'Diana';
DECLARE @LastName NVARCHAR(MAX) = 'Doe';

SELECT @ActualGreeting = Marketing.GetGreeting(@FirstName,@LastName);

EXEC tSQLt.AssertEqualsString @Expected = 'Dear D. Doe', @Actual = @ActualGreeting;
END
GO

CREATE PROCEDURE Marketing_GetGreeting_Tests.[test if first name is unknown returns 'Dear Friend' as the greeting]
AS
BEGIN
DECLARE @ActualGreeting NVARCHAR(MAX);
DECLARE @FirstName NVARCHAR(MAX) = NULL;
DECLARE @LastName NVARCHAR(MAX) = 'Doe';

SELECT @ActualGreeting = Marketing.GetGreeting(@FirstName,@LastName);

EXEC tSQLt.AssertEqualsString @Expected = 'Dear Friend', @Actual = @ActualGreeting;
END
GO

CREATE PROCEDURE Marketing_GetGreeting_Tests.[test if last name is unknown returns 'Dear <FirstName>' as the greeting]
AS
BEGIN
DECLARE @ActualGreeting NVARCHAR(MAX);
DECLARE @FirstName NVARCHAR(MAX) = 'Jordan';
DECLARE @LastName NVARCHAR(MAX) = NULL;

SELECT @ActualGreeting = Marketing.GetGreeting(@FirstName,@LastName);

EXEC tSQLt.AssertEqualsString @Expected = 'Dear Jordan', @Actual = @ActualGreeting;
END
GO

CREATE PROCEDURE Marketing_GetGreeting_Tests.[test if both name parts are unknown returns 'Dear Friend' as the greeting]
AS
BEGIN
DECLARE @ActualGreeting NVARCHAR(MAX);
DECLARE @FirstName NVARCHAR(MAX) = NULL;
DECLARE @LastName NVARCHAR(MAX) = NULL;

SELECT @ActualGreeting = Marketing.GetGreeting(@FirstName,@LastName);

EXEC tSQLt.AssertEqualsString @Expected = 'Dear Friend', @Actual = @ActualGreeting;
END
GO
10 changes: 10 additions & 0 deletions TestSomething/Tests/OneDb2.publish.noxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>r2d5</TargetDatabaseName>
<DeployScriptFileName>OneDb2.sql</DeployScriptFileName>
<TargetConnectionString>Data Source=localhost,41433;Persist Security Info=True;User ID=sa;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False</TargetConnectionString>
<ProfileVersionNumber>1</ProfileVersionNumber>
</PropertyGroup>
</Project>
Loading