-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample-3-faking-tables.sql
180 lines (126 loc) · 4.12 KB
/
example-3-faking-tables.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
* Example 3
* Faking tables - a keystone test procedure
*
*/
IF OBJECT_ID('Sales.GetEmailList','P') IS NOT NULL
BEGIN
DROP PROCEDURE Sales.GetEmailList
END
GO
CREATE PROCEDURE Sales.GetEmailList
AS
BEGIN
select FirstName, ea.EmailAddress
from Person.Person as p
join Person.EmailAddress as ea on ea.BusinessEntityID = p.BusinessEntityID
WHERE p.EmailPromotion = 1
END
GO
EXEC tSQLt.NewTestClass 'AdventureWorksTests'
RETURN;
--
-- Consider, naive attempt at insert:
--
INSERT INTO Person.Person (FirstName, MiddleName, LastName, EmailPromotion)
VALUES ('Marcus', NULL, 'Aurelius', 1)
--
-- Add the column it's complaining about, but
--
INSERT INTO Person.Person (BusinessEntityID, FirstName, MiddleName, LastName, EmailPromotion)
VALUES (456789,'Marcus', NULL, 'Aurelius', 1)
GO
--
-- To demonstrate results of FakeTable
--
BEGIN TRAN
EXEC tSQLt.FakeTable 'Person.Person'
select * from Person.Person
ROLLBACK TRAN
BEGIN TRAN
EXEC tSQLt.FakeTable 'Person.Person'
INSERT INTO Person.Person (FirstName, MiddleName, LastName, EmailPromotion)
VALUES ('Marcus', NULL, 'Aurelius', 1)
select * from Person.Person
ROLLBACK TRAN
IF OBJECT_ID('[AdventureWorksTests].[Test GetEmailList returns no data for empty tables]', 'P') IS NOT NULL
BEGIN
DROP PROCEDURE [AdventureWorksTests].[Test GetEmailList returns no data for empty tables]
END
GO
CREATE PROCEDURE [AdventureWorksTests].[Test GetEmailList returns no data for empty tables]
AS
BEGIN
EXEC tSQLt.FakeTable 'Person.Person'
CREATE TABLE #Results (
FirstName varchar(100),
EmailAddress varchar(100)
)
--select *
INSERT INTO #Results
EXEC Sales.GetEmailList
EXEC tSQLt.AssertEmptyTable #Results
END
go
EXEC tSQLt.Run '[AdventureWorksTests].[Test GetEmailList returns no data for empty tables]'
IF OBJECT_ID('[AdventureWorksTests].[Test GetEmailList retrieves a single record from table]', 'P') IS NOT NULL
BEGIN
DROP PROCEDURE [AdventureWorksTests].[Test GetEmailList retrieves a single record from table]
END
GO
CREATE PROCEDURE [AdventureWorksTests].[Test GetEmailList retrieves a single record from table]
AS
BEGIN
EXEC tSQLt.FakeTable 'Person.Person'
EXEC tSQLt.FakeTable 'Person.EmailAddress'
INSERT INTO Person.Person (BusinessEntityID, FirstName , EmailPromotion)
VALUES (42, 'Arthur', 1)
INSERT INTO Person.EmailAddress (BusinessEntityID, EmailAddress)
VALUES (42, '[email protected]')
CREATE TABLE #Results (
FirstName varchar(100),
EmailAddress varchar(100)
)
--select *
INSERT INTO #Results
EXEC Sales.GetEmailList
select top 0 *
into #Expected
from #Results
INSERT INTO #Expected(FirstName, EmailAddress)
VALUES ('Arthur', '[email protected]')
EXEC tSQLt.AssertEqualsTable @Expected = #Expected, @Actual = #Results, @Message = 'GetEmailsList should return a single record when single record exists'
END
GO
EXEC tSQLt.Run '[AdventureWorksTests].[Test GetEmailList retrieves a single record from table]'
IF OBJECT_ID('[AdventureWorksTests].[Test GetEmailList retrieves several records from the table]', 'P') IS NOT NULL
BEGIN
DROP PROCEDURE [AdventureWorksTests].[Test GetEmailList retrieves several records from the table]
END
GO
CREATE PROCEDURE [AdventureWorksTests].[Test GetEmailList retrieves several records from the table]
AS
BEGIN
EXEC tSQLt.FakeTable 'Person.Person'
EXEC tSQLt.FakeTable 'Person.EmailAddress'
INSERT INTO Person.Person (BusinessEntityID, FirstName, EmailPromotion)
VALUES (42, 'Arthur', 1), (1919, 'Jurgen', 1), (1984, 'Winston',1)
INSERT INTO Person.EmailAddress (BusinessEntityID, EmailAddress)
CREATE TABLE #Results (
FirstName varchar(100),
EmailAddress varchar(100)
)
INSERT INTO #Results
EXEC Sales.GetEmailList
DECLARE @TableCount INT;
select @TableCount = count (*) from #Results
select top 0 *
into #Expected
from #Results
INSERT INTO #Expected (FirstName, EmailAddress)
VALUES ('Arthur', '[email protected]'), ('Jurgen', '[email protected]'), ('Winston','[email protected]')
EXEC tSQLt.AssertEqualsTable #Expected, #Results
END
GO
exec tSQLt.Run '[AdventureWorksTests].[Test GetEmailList retrieves several records from the table]'