1+ using System ;
2+ using CSF . Extensions . WebDriver ;
3+ using CSF . Extensions . WebDriver . Factories ;
4+ using CSF . Screenplay . Actors ;
5+ using CSF . Screenplay . Reporting ;
6+ using CSF . Screenplay . Selenium . Actions ;
7+ using Microsoft . Extensions . DependencyInjection ;
8+ using Moq ;
9+ using OpenQA . Selenium ;
10+
11+ namespace CSF . Screenplay . Selenium . Tasks ;
12+
13+ [ TestFixture , Parallelizable ]
14+ public class OpenUrlRespectingBaseTests
15+ {
16+ [ Test , AutoMoqData ]
17+ public async Task TheActionCreatedByThisTaskShouldContainTheCorrectReport ( IWebDriver driver , DriverOptions options )
18+ {
19+ var actor = new Actor ( "Anthony" , Guid . NewGuid ( ) ) ;
20+ IPerformable ? performable = null ;
21+
22+ void OnPerform ( object ? sender , PerformableEventArgs ev ) => performable = ( IPerformable ) ev . Performable ;
23+
24+ var namedUri = new NamedUri ( "test.html" , "the test page" ) ;
25+ var baseUri = "https://example.com" ;
26+ actor . IsAbleTo ( new UseABaseUri ( new Uri ( baseUri , UriKind . Absolute ) ) ) ;
27+ actor . IsAbleTo ( new BrowseTheWeb ( Mock . Of < IGetsWebDriver > ( x => x . GetDefaultWebDriver ( It . IsAny < Action < DriverOptions > > ( ) ) == new WebDriverAndOptions ( driver , options ) ) ) ) ;
28+ var sut = new OpenUrlRespectingBase ( namedUri ) ;
29+ var valueFormatterProvider = new ValueFormatterProvider ( new ServiceCollection ( ) . AddTransient < ToStringFormatter > ( ) . BuildServiceProvider ( ) ,
30+ new ValueFormatterRegistry { typeof ( ToStringFormatter ) } ) ;
31+
32+ var formatter = new ReportFragmentFormatter ( new ReportFormatCreator ( ) , valueFormatterProvider ) ;
33+
34+ actor . EndPerformable += OnPerform ;
35+ try
36+ {
37+ await sut . PerformAsAsync ( actor ) ;
38+
39+ Assert . Multiple ( ( ) =>
40+ {
41+ Assert . That ( performable , Is . InstanceOf < OpenUrl > ( ) , "Performable is correct type" ) ;
42+ Assert . That ( ( ( OpenUrl ) performable ! ) . GetReportFragment ( actor , formatter ) . ToString ( ) ,
43+ Is . EqualTo ( "Anthony opens their browser at the test page: https://example.com/test.html" ) ,
44+ "The report is correct" ) ;
45+ } ) ;
46+ }
47+ finally
48+ {
49+ actor . EndPerformable -= OnPerform ;
50+ }
51+ }
52+
53+ [ Test , AutoMoqData ]
54+ public async Task TheActionCreatedByThisTaskShouldContainTheCorrectReportWhenTheActorDoesNotHaveABaseUrl ( IWebDriver driver , DriverOptions options )
55+ {
56+ var actor = new Actor ( "Anthony" , Guid . NewGuid ( ) ) ;
57+ IPerformable ? performable = null ;
58+
59+ void OnPerform ( object ? sender , PerformableEventArgs ev ) => performable = ( IPerformable ) ev . Performable ;
60+
61+ var namedUri = new NamedUri ( "test.html" , "the test page" ) ;
62+ actor . IsAbleTo ( new BrowseTheWeb ( Mock . Of < IGetsWebDriver > ( x => x . GetDefaultWebDriver ( It . IsAny < Action < DriverOptions > > ( ) ) == new WebDriverAndOptions ( driver , options ) ) ) ) ;
63+ var sut = new OpenUrlRespectingBase ( namedUri ) ;
64+ var valueFormatterProvider = new ValueFormatterProvider ( new ServiceCollection ( ) . AddTransient < ToStringFormatter > ( ) . BuildServiceProvider ( ) ,
65+ new ValueFormatterRegistry { typeof ( ToStringFormatter ) } ) ;
66+
67+ var formatter = new ReportFragmentFormatter ( new ReportFormatCreator ( ) , valueFormatterProvider ) ;
68+
69+ actor . EndPerformable += OnPerform ;
70+ try
71+ {
72+ await sut . PerformAsAsync ( actor ) ;
73+
74+ Assert . Multiple ( ( ) =>
75+ {
76+ Assert . That ( performable , Is . InstanceOf < OpenUrl > ( ) , "Performable is correct type" ) ;
77+ Assert . That ( ( ( OpenUrl ) performable ! ) . GetReportFragment ( actor , formatter ) . ToString ( ) ,
78+ Is . EqualTo ( "Anthony opens their browser at the test page: test.html" ) ,
79+ "The report is correct" ) ;
80+ } ) ;
81+ }
82+ finally
83+ {
84+ actor . EndPerformable -= OnPerform ;
85+ }
86+ }
87+ }
0 commit comments