5
5
using System . Collections . Generic ;
6
6
using System . Linq ;
7
7
using System . Net ;
8
- using System . Runtime . InteropServices ;
9
8
using System . Threading . Tasks ;
10
9
using Microsoft . AspNetCore . BrowserTesting ;
11
10
using Microsoft . AspNetCore . Testing ;
17
16
18
17
namespace Templates . Test
19
18
{
19
+ [ TestCaseOrderer ( "Templates.Test.PriorityOrderer" , "BlazorTemplates.Tests" ) ]
20
20
public class BlazorServerTemplateTest : BlazorTemplateTest
21
21
{
22
- public BlazorServerTemplateTest ( ProjectFactoryFixture projectFactory , PlaywrightFixture < BlazorServerTemplateTest > fixture , ITestOutputHelper output )
23
- : base ( fixture )
22
+ public BlazorServerTemplateTest ( ProjectFactoryFixture projectFactory )
23
+ : base ( projectFactory )
24
24
{
25
- ProjectFactory = projectFactory ; ;
26
- Output = output ;
27
- BrowserContextInfo = new ContextInformation ( CreateFactory ( output ) ) ;
28
25
}
29
26
30
- public ProjectFactoryFixture ProjectFactory { get ; set ; }
31
- public ITestOutputHelper Output { get ; }
32
- public ContextInformation BrowserContextInfo { get ; }
33
- public Project Project { get ; private set ; }
27
+ public override string ProjectType { get ; } = "blazorserver" ;
34
28
29
+ // This test is required to run before BlazorServerTemplateWorks_NoAuth to create and build the project
30
+ // If this test is quarantined, BlazorServerTemplateWorks_NoAuth must be quarantined as well
31
+ [ Fact , TestPriority ( BUILDCREATEPUBLISH_PRIORITY ) ]
32
+ public Task BlazorServerTemplate_CreateBuildPublish_NoAuth ( )
33
+ => CreateBuildPublishAsync ( "blazorservernoauth" + BrowserKind . Chromium . ToString ( ) ) ;
35
34
35
+ // This tests depends on BlazorServerTemplate_CreateBuildPublish_NoAuth running first
36
36
[ Theory ]
37
37
[ InlineData ( BrowserKind . Chromium ) ]
38
38
[ QuarantinedTest ( "https://github.com/dotnet/aspnetcore/issues/30761" ) ]
39
39
public async Task BlazorServerTemplateWorks_NoAuth ( BrowserKind browserKind )
40
40
{
41
- // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
42
- Environment . SetEnvironmentVariable ( "EnableDefaultScopedCssItems" , "true" ) ;
41
+ var project = await ProjectFactory . GetOrCreateProject ( "blazorservernoauth" + browserKind , Output ) ;
43
42
44
- Project = await ProjectFactory . GetOrCreateProject ( "blazorservernoauth" + browserKind . ToString ( ) , Output ) ;
45
-
46
- var createResult = await Project . RunDotNetNewAsync ( "blazorserver" ) ;
47
- Assert . True ( 0 == createResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "create/restore" , Project , createResult ) ) ;
48
-
49
- var publishResult = await Project . RunDotNetPublishAsync ( ) ;
50
- Assert . True ( 0 == publishResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "publish" , Project , publishResult ) ) ;
51
-
52
- // Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
53
- // The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
54
- // later, while the opposite is not true.
55
-
56
- var buildResult = await Project . RunDotNetBuildAsync ( ) ;
57
- Assert . True ( 0 == buildResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "build" , Project , buildResult ) ) ;
58
-
59
- await using var browser = Fixture . BrowserManager . IsAvailable ( browserKind ) ?
60
- await Fixture . BrowserManager . GetBrowserInstance ( browserKind , BrowserContextInfo ) :
43
+ await using var browser = BrowserManager . IsAvailable ( browserKind ) ?
44
+ await BrowserManager . GetBrowserInstance ( browserKind , BrowserContextInfo ) :
61
45
null ;
62
46
63
- using ( var aspNetProcess = Project . StartBuiltProjectAsync ( ) )
47
+ using ( var aspNetProcess = project . StartBuiltProjectAsync ( ) )
64
48
{
65
49
Assert . False (
66
50
aspNetProcess . Process . HasExited ,
67
- ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run built project" , Project , aspNetProcess . Process ) ) ;
51
+ ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run built project" , project , aspNetProcess . Process ) ) ;
68
52
69
53
await aspNetProcess . AssertStatusCode ( "/" , HttpStatusCode . OK , "text/html" ) ;
70
54
71
- if ( Fixture . BrowserManager . IsAvailable ( browserKind ) )
55
+ if ( BrowserManager . IsAvailable ( browserKind ) )
72
56
{
73
57
var page = await browser . NewPageAsync ( ) ;
74
58
await aspNetProcess . VisitInBrowserAsync ( page ) ;
75
- await TestBasicNavigation ( page ) ;
59
+ await TestBasicNavigation ( project , page ) ;
76
60
await page . CloseAsync ( ) ;
77
61
}
78
62
else
@@ -81,18 +65,18 @@ await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo)
81
65
}
82
66
}
83
67
84
- using ( var aspNetProcess = Project . StartPublishedProjectAsync ( ) )
68
+ using ( var aspNetProcess = project . StartPublishedProjectAsync ( ) )
85
69
{
86
70
Assert . False (
87
71
aspNetProcess . Process . HasExited ,
88
- ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run published project" , Project , aspNetProcess . Process ) ) ;
72
+ ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run published project" , project , aspNetProcess . Process ) ) ;
89
73
90
74
await aspNetProcess . AssertStatusCode ( "/" , HttpStatusCode . OK , "text/html" ) ;
91
- if ( Fixture . BrowserManager . IsAvailable ( browserKind ) )
75
+ if ( BrowserManager . IsAvailable ( browserKind ) )
92
76
{
93
77
var page = await browser . NewPageAsync ( ) ;
94
78
await aspNetProcess . VisitInBrowserAsync ( page ) ;
95
- await TestBasicNavigation ( page ) ;
79
+ await TestBasicNavigation ( project , page ) ;
96
80
await page . CloseAsync ( ) ;
97
81
}
98
82
else
@@ -102,49 +86,41 @@ await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo)
102
86
}
103
87
}
104
88
89
+ // This test is required to run before BlazorServerTemplateWorks_IndividualAuth to create and build the project
90
+ // If this test is quarantined, BlazorServerTemplateWorks_IndividualAuth must be quarantined as well
91
+ [ Theory , TestPriority ( BUILDCREATEPUBLISH_PRIORITY ) ]
92
+ [ MemberData ( nameof ( BlazorServerTemplateWorks_IndividualAuthData ) ) ]
93
+ public Task BlazorServerTemplate_CreateBuildPublish_IndividualAuth ( BrowserKind browserKind , bool useLocalDB )
94
+ => CreateBuildPublishAsync ( "blazorserverindividual" + browserKind + ( useLocalDB ? "uld" : "" ) ) ;
95
+
105
96
public static IEnumerable < object [ ] > BlazorServerTemplateWorks_IndividualAuthData =>
106
97
BrowserManager . WithBrowsers ( new [ ] { BrowserKind . Chromium } , true , false ) ;
107
98
99
+ // This tests depends on BlazorServerTemplate_CreateBuildPublish_IndividualAuth running first
108
100
[ Theory ]
109
101
[ MemberData ( nameof ( BlazorServerTemplateWorks_IndividualAuthData ) ) ]
110
102
[ QuarantinedTest ( "https://github.com/dotnet/aspnetcore/issues/30807" ) ]
111
103
[ SkipOnHelix ( "https://github.com/dotnet/aspnetcore/issues/30825" , Queues = "All.OSX" ) ]
112
104
public async Task BlazorServerTemplateWorks_IndividualAuth ( BrowserKind browserKind , bool useLocalDB )
113
105
{
114
- // Additional arguments are needed. See: https://github.com/dotnet/aspnetcore/issues/24278
115
- Environment . SetEnvironmentVariable ( "EnableDefaultScopedCssItems" , "true" ) ;
116
-
117
- Project = await ProjectFactory . GetOrCreateProject ( "blazorserverindividual" + browserKind + ( useLocalDB ? "uld" : "" ) , Output ) ;
118
-
119
- var createResult = await Project . RunDotNetNewAsync ( "blazorserver" , auth : "Individual" , useLocalDB : useLocalDB ) ;
120
- Assert . True ( 0 == createResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "create/restore" , Project , createResult ) ) ;
106
+ var project = await ProjectFactory . GetOrCreateProject ( "blazorserverindividual" + browserKind + ( useLocalDB ? "uld" : "" ) , Output ) ;
121
107
122
- var publishResult = await Project . RunDotNetPublishAsync ( ) ;
123
- Assert . True ( 0 == publishResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "publish" , Project , publishResult ) ) ;
124
-
125
- // Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
126
- // The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
127
- // later, while the opposite is not true.
128
-
129
- var buildResult = await Project . RunDotNetBuildAsync ( ) ;
130
- Assert . True ( 0 == buildResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "build" , Project , buildResult ) ) ;
131
-
132
- var browser = ! Fixture . BrowserManager . IsAvailable ( browserKind ) ?
108
+ var browser = ! BrowserManager . IsAvailable ( browserKind ) ?
133
109
null :
134
- await Fixture . BrowserManager . GetBrowserInstance ( browserKind , BrowserContextInfo ) ;
110
+ await BrowserManager . GetBrowserInstance ( browserKind , BrowserContextInfo ) ;
135
111
136
- using ( var aspNetProcess = Project . StartBuiltProjectAsync ( ) )
112
+ using ( var aspNetProcess = project . StartBuiltProjectAsync ( ) )
137
113
{
138
114
Assert . False (
139
115
aspNetProcess . Process . HasExited ,
140
- ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run built project" , Project , aspNetProcess . Process ) ) ;
116
+ ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run built project" , project , aspNetProcess . Process ) ) ;
141
117
142
118
await aspNetProcess . AssertStatusCode ( "/" , HttpStatusCode . OK , "text/html" ) ;
143
- if ( Fixture . BrowserManager . IsAvailable ( browserKind ) )
119
+ if ( BrowserManager . IsAvailable ( browserKind ) )
144
120
{
145
121
var page = await browser . NewPageAsync ( ) ;
146
122
await aspNetProcess . VisitInBrowserAsync ( page ) ;
147
- await TestBasicNavigation ( page ) ;
123
+ await TestBasicNavigation ( project , page ) ;
148
124
await page . CloseAsync ( ) ;
149
125
}
150
126
else
@@ -153,18 +129,18 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
153
129
}
154
130
}
155
131
156
- using ( var aspNetProcess = Project . StartPublishedProjectAsync ( ) )
132
+ using ( var aspNetProcess = project . StartPublishedProjectAsync ( ) )
157
133
{
158
134
Assert . False (
159
135
aspNetProcess . Process . HasExited ,
160
- ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run published project" , Project , aspNetProcess . Process ) ) ;
136
+ ErrorMessages . GetFailedProcessMessageOrEmpty ( "Run published project" , project , aspNetProcess . Process ) ) ;
161
137
162
138
await aspNetProcess . AssertStatusCode ( "/" , HttpStatusCode . OK , "text/html" ) ;
163
- if ( Fixture . BrowserManager . IsAvailable ( browserKind ) )
139
+ if ( BrowserManager . IsAvailable ( browserKind ) )
164
140
{
165
141
var page = await browser . NewPageAsync ( ) ;
166
142
await aspNetProcess . VisitInBrowserAsync ( page ) ;
167
- await TestBasicNavigation ( page ) ;
143
+ await TestBasicNavigation ( project , page ) ;
168
144
await page . CloseAsync ( ) ;
169
145
}
170
146
else
@@ -174,7 +150,7 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
174
150
}
175
151
}
176
152
177
- private async Task TestBasicNavigation ( IPage page )
153
+ private async Task TestBasicNavigation ( Project project , IPage page )
178
154
{
179
155
var socket = BrowserContextInfo . Pages [ page ] . WebSockets . SingleOrDefault ( ) ??
180
156
( await page . WaitForEventAsync ( PageEvent . WebSocket ) ) . WebSocket ;
@@ -189,7 +165,7 @@ private async Task TestBasicNavigation(IPage page)
189
165
190
166
await page . WaitForSelectorAsync ( "ul" ) ;
191
167
// <title> element gets project ID injected into it during template execution
192
- Assert . Equal ( Project . ProjectName . Trim ( ) , ( await page . GetTitleAsync ( ) ) . Trim ( ) ) ;
168
+ Assert . Equal ( project . ProjectName . Trim ( ) , ( await page . GetTitleAsync ( ) ) . Trim ( ) ) ;
193
169
194
170
// Initially displays the home page
195
171
await page . WaitForSelectorAsync ( "h1 >> text=Hello, world!" ) ;
@@ -211,29 +187,15 @@ private async Task TestBasicNavigation(IPage page)
211
187
Assert . Equal ( 5 , ( await page . QuerySelectorAllAsync ( "p+table>tbody>tr" ) ) . Count ( ) ) ;
212
188
}
213
189
214
- [ Theory ]
190
+ [ Theory , TestPriority ( BUILDCREATEPUBLISH_PRIORITY ) ]
215
191
[ InlineData ( "IndividualB2C" , null ) ]
216
192
[ InlineData ( "IndividualB2C" , new string [ ] { "--called-api-url \" https://graph.microsoft.com\" " , "--called-api-scopes user.readwrite" } ) ]
217
193
[ InlineData ( "SingleOrg" , null ) ]
218
194
[ InlineData ( "SingleOrg" , new string [ ] { "--called-api-url \" https://graph.microsoft.com\" " , "--called-api-scopes user.readwrite" } ) ]
219
195
[ InlineData ( "SingleOrg" , new string [ ] { "--calls-graph" } ) ]
220
196
[ QuarantinedTest ( "https://github.com/dotnet/aspnetcore/issues/30882" ) ]
221
- public async Task BlazorServerTemplat_IdentityWeb_BuildAndPublish ( string auth , string [ ] args )
222
- {
223
- Project = await ProjectFactory . GetOrCreateProject ( "blazorserveridweb" + Guid . NewGuid ( ) . ToString ( ) . Substring ( 0 , 10 ) . ToLowerInvariant ( ) , Output ) ;
197
+ public Task BlazorServerTemplate_IdentityWeb_BuildAndPublish ( string auth , string [ ] args )
198
+ => CreateBuildPublishAsync ( "blazorserveridweb" + Guid . NewGuid ( ) . ToString ( ) . Substring ( 0 , 10 ) . ToLowerInvariant ( ) , auth , args ) ;
224
199
225
- var createResult = await Project . RunDotNetNewAsync ( "blazorserver" , auth : auth , args : args ) ;
226
- Assert . True ( 0 == createResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "create/restore" , Project , createResult ) ) ;
227
-
228
- var publishResult = await Project . RunDotNetPublishAsync ( ) ;
229
- Assert . True ( 0 == publishResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "publish" , Project , publishResult ) ) ;
230
-
231
- // Run dotnet build after publish. The reason is that one uses Config = Debug and the other uses Config = Release
232
- // The output from publish will go into bin/Release/netcoreappX.Y/publish and won't be affected by calling build
233
- // later, while the opposite is not true.
234
-
235
- var buildResult = await Project . RunDotNetBuildAsync ( ) ;
236
- Assert . True ( 0 == buildResult . ExitCode , ErrorMessages . GetFailedProcessMessage ( "build" , Project , buildResult ) ) ;
237
- }
238
200
}
239
201
}
0 commit comments