<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
    <section name="FirefoxPreferences" type="System.Configuration.AppSettingsSection" />
    <section name="FirefoxExtensions" type="System.Configuration.AppSettingsSection" />
    <section name="ChromePreferences" type="System.Configuration.AppSettingsSection" />
    <section name="InternetExplorerPreferences" type="System.Configuration.AppSettingsSection" />
    <section name="ChromeExtensions" type="System.Configuration.AppSettingsSection" />
    <section name="DriverCapabilities" type="System.Configuration.AppSettingsSection" />
    <section name="ChromeArguments" type="System.Configuration.AppSettingsSection" />
    <section name="Inputs" type="System.Configuration.AppSettingsSection" />
    <section name="Outputs" type="System.Configuration.AppSettingsSection" />

    <section name="keyVault" type="System.Configuration.AppSettingsSection" />
    <section name="database" type="System.Configuration.AppSettingsSection" />
    <section name="blobStorage" type="System.Configuration.AppSettingsSection" />
    <section name="docDb" type="System.Configuration.AppSettingsSection" />
    <section name="dataLake" type="System.Configuration.AppSettingsSection" />
    <section name="tableStorage" type="System.Configuration.AppSettingsSection" />
    <section name="appInsights" type="System.Configuration.AppSettingsSection" />
    <section name="serviceBus" type="System.Configuration.AppSettingsSection" />
    <section name="azureAd" type="System.Configuration.AppSettingsSection" />
    <section name="adfpipeline" type="System.Configuration.AppSettingsSection" />

    <section name="spex" type="System.Configuration.AppSettingsSection" />
    <section name="reporting" type="System.Configuration.AppSettingsSection" />
    <section name="chaosMonkey" type="System.Configuration.AppSettingsSection" />

    <sectionGroup name="environments">
      <section name="ChromeWindows" type="System.Configuration.AppSettingsSection" />
      <section name="ChromeWindowsMobile" type="System.Configuration.AppSettingsSection" />
      <section name="ChromeAndroid" type="System.Configuration.AppSettingsSection" />
      <section name="ChromeMac" type="System.Configuration.AppSettingsSection" />
      <section name="FirefoxWindows" type="System.Configuration.AppSettingsSection" />
      <section name="SafariMac" type="System.Configuration.AppSettingsSection" />
      <section name="SafariIPhone" type="System.Configuration.AppSettingsSection" />
      <section name="SafariIPad" type="System.Configuration.AppSettingsSection" />
      <section name="EdgeWindows" type="System.Configuration.AppSettingsSection" />
      <section name="IEWindows" type="System.Configuration.AppSettingsSection" />
    </sectionGroup>

  </configSections>

  <appSettings>
    <add key="Platform" value="Android" />
    <add key="Env" value="dev" />
    <add key="expectedResponseTimeInMs" value="5000" />
    <add key="input" value="TestData\Input" />
    <add key="output" value="TestData\Output" />
    <add key="before" value="TestData\Before" />
    <add key="after" value="TestData\After" />
    <add key="DeploymentDate" value="" />
    <add key="ReadFileUrl" value="" />

    <!--mandatory keys-->
    <!-- URL Configuration-->
    <add key="protocol" value="https" />
    <add key="host" value="www.google.com" />
    <add key="url" value="/" />
    <!--<add key="browser" value="Safari" />-->
    <add key="SimulateMobileBrowser" value="false" />
    <add key="browser" value="Chrome" />
    <!--InternetExplorer, Firefox, FirefoxPortable, PhantomJs, RemoteWebDriver, Edge, BrowserStack-->
    <add key="DriverCapabilities" value="CloudProvider" />
    <!--The browser to use, based on which the appropriate browser 'Preferences/Arguments/Extensions' get picked up from the config below and applied to the DriverContext-->
    <add key="CrossBrowserEnvironment" value="ChromeWindows" />
    <add key="BuildNumber" value="" />
    <add key="FirefoxUseLegacyImplementation" value="false" />
    <add key="FireFoxPath" value="FirefoxPortable.exe" />
    <add key="PhantomJsPath" value="" />
    <add key="RemoteWebDriverHub" value="http://hub-cloud.browserstack.com/wd/hub" />
    <!--<add key="proxy" value="127.0.0.1:9999" />-->
    <!--nlog trace level must be set to "trace" for at least one logger to see EventFiringWebDriver logs-->
    <add key="EnableEventFiringWebDriver" value="false" />
    <!-- Used for ElementStyle Validations -->
    <!--timeouts-->
    <add key="longTimeout" value="9" />
    <add key="mediumTimeout" value="6" />
    <add key="shortTimeout" value="3" />
    <add key="ImplicitlyWaitMilliseconds" value="5000" />
    <!--Enable or disable synchronization with AngularJS-->
    <add key="SynchronizationWithAngularEnabled" value="false" />
    <!--Downloaded files, screenshots and page source location-->
    <add key="UseCurrentDirectory" value="true" />
    <add key="DownloadFolder" value="TestOutput\\Downloads" />
    <add key="ScreenShotFolder" value="TestOutput\\Screenshots" />
    <add key="PageSourceFolder" value="TestOutput\\PageSources" />
    <!--Screenshots and logging-->
    <add key="FullDesktopScreenShotEnabled" value="false" />
    <add key="SeleniumScreenShotEnabled" value="true" />
    <add key="GetPageSourceEnabled" value="false" />
    <!--JavaScript Error Logging-->
    <add key="JavaScriptErrorLogging" value="false"/>
    <add key="JavaScriptErrorTypes" value="SyntaxError,EvalError,ReferenceError,RangeError,TypeError,URIError,Refused to display,Internal Server Error,Cannot read property" />
    <!--Use default firefox profile?-->
    <add key="UseDefaultFirefoxProfile" value="false" />
    <add key="PathToFirefoxProfile" value="C:\Users\ci_objectivity\AppData\Roaming\Mozilla\Firefox\Profiles" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
    <!--Perf logging-->
    <add key="EnablePerfDebugLogging" value="false" />
    <add key="EnablePerfTag" value="false"/>
    <add key="PerfExecutor" value="locust -f {1}.py --no-web --host={3} --num-request=40 --clients=20 --hatch-rate=20 --print-stats --csv={1} --logfile={1}.log" />
    <!--<add key="PerfExecutor" value="abs -n 40 -s 20 -c 20 -e {1}.csv -g {1}.tsv -T &quot;application/json&quot; -H &quot;Authorization:Bearer AUTH_TOKEN&quot; -H &quot;BusinessContext:BUSINESS_CONTEXT&quot; -v 3 &quot;{2}&quot;" />-->
    <add key="TestProjectName" value="EShopApplicationWebSolution" />
    <add key="DefaultKeyPrefix" value="" />

    <!--Driver and Browser paths: Leave it blank to pick it from the default output directory-->
    <add key="PathToChromeDriverDirectory" value="" />
    <!--<add key="PathToFirefoxDriverDirectory" value="" />
    <add key="PathToInternetExplorerDriverDirectory" value="" />
    <add key="PathToEdgeDriverDirectory" value="" />

    <add key="ChromeBrowserExecutableLocation" value="" />
    <add key="FireFoxBrowserExecutableLocation" value="" />-->

  </appSettings>

  <keyVault>
    <add key="ClientId" value="" />
    <add key="ClientSecret" value="" /> <!-- TODO: Replace Client-secret with Cert based approach -->
    <add key="VaultUri" value="https://xyz-secrets-{Env}-kv.vault.azure.net/secrets/" /> <!-- The URL should end with "secrets/" -->
    <add key="CertThumbprint" value="" />
    <add key="CertPath" value="" />
    <add key="CertPwd" value="" />
    <add key="SqlClientIdKey" value="DbClientId" /> <!-- Key from KeyVault -->
    <add key="SqlClientSecretKey" value="DbClientSecret" /> <!-- Key from KeyVault -->
  </keyVault>

  <database>
    <add key="AdTenant" value="" />
    <add key="DbKey" value="xyz-storage-core-{Env}-db" /> <!-- Database name -->
    <add key="DbServer" value="xyz-storage-core-{Env}-ss.database.windows.net" /> <!-- Database Server name -->
    <add key="DbUser" value="" />
    <add key="DbPwd" value="" />
  </database>

  <blobStorage>
    <add key="ConnectionStringKey" value="SecretName" /> <!-- Key from KeyVault -->
  </blobStorage>

  <tableStorage>
    <add key="ConnectionStringKey" value="SecretName" /> <!-- Key from KeyVault -->
  </tableStorage>

  <serviceBus>
    <add key="ConnectionStringKey" value="SecretName" /> <!-- Key from KeyVault -->
  </serviceBus>

  <docDb>
    <add key="DatabaseName" value="" />
    <add key="CollectionName" value="" />
    <add key="EndPointUrl" value="https://xyz-{Env}-cosmos-sql.documents.azure.com:443" />
    <add key="AuthorizationKey" value="" /> <!-- Ideally, the Key from KeyVault -->
  </docDb>

  <dataLake>
    <add key="ClientId" value="" />
    <add key="ClientSecret" value="" />
    <add key="TenantId" value="" />
    <add key="AccountName" value="" />
    <add key="DnsSuffix" value="" />
  </dataLake>

  <appInsights>
    <add key="Url" value="https://api.applicationinsights.io/v1/apps/" />
    <add key="ApiKey" value="x-api-key" />
    <add key="ApiValue" value="" />
    <add key="AppId" value="" />
  </appInsights>

  <azureAd>
    <add key="IsB2C" value="true" />
    <add key="AuthUrl" value="https://login.microsoftonline.com/{TenantName}/oauth2/v2.0/authorize?p={SignInPolicyName}&amp;client_id={clientId}&amp;redirect_uri={RedirectPath}{CallBackPath}&amp;response_type=code%20id_token&amp;scope=openid%20profile%20offline_access%20{ApiScopes}" />
    <add key="TenantName" value="xxx.onmicrosoft.com" />
    <add key="AzureAdB2CInstance" value="https://login.microsoftonline.com/tfp" />
    <add key="SignInPolicyName" value="xxx{Env}{Company}" />
    <add key="Authority" value="{AzureAdB2CInstance}/{TenantName}/{SignInPolicyName}/v2.0" />
    <add key="ApiPath" value="https://{TenantName}/{Company}{Env}api" />
    <add key="ApiScopes" value="{ApiPath}/read" />
    <add key="RedirectPath" value="http://localhost:8704" /><!--https://{Company}portal{Env}.npgtssweb.com-->
    <add key="ApiUrl" value="https://xxx-{Env}-api-services.azurewebsites.net/" />
    <add key="CallBackPath" value="/{Company}-signin-oidc" />
    <add key="ClientId" value="clientid" />
    <add key="ClientSecret" value="clientsecret" />
    <add key="UserIdField" value="//*[@id='signInName']" />
    <add key="PasswordField" value="//*[@id='password']" />
    <add key="SubmitField" value="//*[@id='next']" />
    <!--<add key="SignedOutCallbackPath" value="/{Company}-signout-callback-oidc" />-->
    <!--<add key="ResetPasswordPolicyName" value="xxx{Env}{Company}" />-->
  </azureAd>

  <adfpipeline>
    <add key="AdfTenantId" value="" />
    <add key="AdfClientId" value="" />
    <add key="AdfClientSecret" value="" />
    <add key="AdfSubscriptionId" value="" />
    <add key="AdfResourceGroupName" value="" />
    <add key="DataFactoryName"  value=""/>
    <add key="WaitTimeInMilliSeconds" value=""/>
  </adfpipeline>

  <specFlow>
    <stepAssemblies>
      <stepAssembly assembly="Ocaramba" />
      <stepAssembly assembly="EShopApplicationWebSolution" />
      <stepAssembly assembly="Bdd.Core" />
      <stepAssembly assembly="Bdd.Core.Web" />
    </stepAssemblies>
    <!-- https://specflow.org/2019/updating-to-specflow-3/ -->
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
  </specFlow>

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd" autoReload="true" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
    <targets async="true">
      <target name="logfile" xsi:type="File" fileName="${basedir}\EShopApplicationWebSolution_${date:format=ddMMMyyyy:universalTime=false:cached=True}.log" layout="${longdate}|${level}|${callsite}|${message}|${exception}" />
      <target name="perf" xsi:type="File" fileName="${basedir}\EShopApplicationWebSolution.Perf_${date:format=ddMMMyyyy_hh.mm.ss.tt:universalTime=false:cached=True}.json" layout="${message}," />
      <target name="console" xsi:type="ColoredConsole" layout="[${level}] ${message}|${exception}" />
      <target name="debugger" xsi:type="Debugger" layout="[${level}] ${message}|${exception}" />
    </targets>
    <rules>
      <logger name="Perf" minlevel="Debug" writeTo="perf" />
      <logger name="*" minlevel="Debug" writeTo="debugger" />
      <logger name="*" minlevel="Debug" writeTo="logfile" />
      <logger name="*" minlevel="Debug" writeTo="console" />
    </rules>
  </nlog>

  <FirefoxPreferences>
    <!--add key="PreferenceToBeOverride" value="NewValue" /-->
  </FirefoxPreferences>
  <FirefoxExtensions>
    <!-->add key="FirefoxPluginName.xpi" value=""/-->
  </FirefoxExtensions>

  <InternetExplorerPreferences>
  </InternetExplorerPreferences>

  <ChromePreferences>
    <add key="download.default_directory" value="TestData" />
    <add key="download.prompt_for_download" value="false" />
  </ChromePreferences>

  <ChromeExtensions>
    <!-->add key="ChromePluginName.crx" value=""/-->
  </ChromeExtensions>

  <ChromeArguments>
    <add key="incognito" value="true" />
    <add key="no-sandbox" value="true" />
    <!--<add key="headless" value="true" />
    <add key="disable-gpu" value="true" />
    <add key="disable-software-rasterizer" value="true" />-->
  </ChromeArguments>

  <DriverCapabilities>
    <add key="browserstack.user" value=""/>
    <add key="browserstack.key" value=""/>
    <add key="project" value="EShopApplicationWebSolution"/>
    <add key="browserstack.debug" value="true" />
    <add key="browserstack.networkLogs" value="true" />
    <add key="browserstack.console" value="warnings" />
    <!--https://www.browserstack.com/automate/capabilities-->
    <add key="acceptSslCerts" value="true" />

    <!--<add key="browserstack.local" value="false" />-->
    <!--<add key="browserstack.ie.enablePopups" value="true" />-->
    <!--<add key="browserstack.safari.enablePopups" value="true" />-->
    <!--<add key="browserstack.selenium_version" value="3.5.2" />-->

    <!--TestingBot related stuff-->
    <!--<add key="key" value="" />
    <add key="secret" value="" />
    <add key="server" value="" />-->

  </DriverCapabilities>

  <environments>
    <ChromeWindows>
      <!--<add key="browser_version" value="65.0" />-->
      <add key="browser" value="chrome" />
      <add key="os" value="Windows"/>
      <add key="os_version" value="10"/>
      <add key="resolution" value="1366x768" />
      <add key="name" value="" />
    </ChromeWindows>
    <ChromeWindowsMobile>
      <!--<add key="browser_version" value="65.0" />-->
      <add key="browser" value="chrome" />
      <add key="os" value="Windows"/>
      <add key="os_version" value="10"/>
      <add key="resolution" value="720x480" />
      <add key="name" value="" />
    </ChromeWindowsMobile>
    <ChromeMac>
      <add key="browser" value="chrome" />
      <add key="os" value="OS X"/>
      <add key="os_version" value="High Sierra"/>
      <add key="name" value="" />
    </ChromeMac>
    <ChromeAndroid>
      <add key="os_version" value="7.1"/>
      <add key="device" value="Google Pixel" />
      <add key="real_mobile" value="true" />
      <add key="name" value="" />
      <!--<add key="deviceOrientation" value="landscape" />-->
    </ChromeAndroid>
    <SafariMac>
      <add key="browser" value="safari" />
      <add key="os" value="OS X"/>
      <add key="os_version" value="High Sierra"/>
    </SafariMac>
    <SafariIPhone>
      <add key="device" value="iPhone 7" />
      <add key="os_version" value="10.3"/>
      <add key="real_mobile" value="true" />
    </SafariIPhone>
    <SafariIPad>
      <add key="device" value="iPad 5th" />
      <add key="os_version" value="11.0"/>
      <add key="real_mobile" value="true" />
    </SafariIPad>
    <EdgeWindows>
      <add key="browser" value="edge" />
      <add key="os" value="Windows"/>
      <add key="os_version" value="10"/>
    </EdgeWindows>
    <IEWindows>
      <add key="browser" value="IE" />
      <add key="browser_version" value="10.0" />
      <add key="os" value="Windows"/>
      <add key="os_version" value="8"/>
    </IEWindows>
    <FirefoxWindows>
      <add key="browser" value="firefox" />
      <add key="os" value="Windows"/>
      <add key="os_version" value="10"/>
    </FirefoxWindows>

  </environments>

  <!-- Docs: https://vamsitp.github.io/spexdocs/ -->
  <!-- Alternative to Spex.json -->
  <spex>

    <add key="Account" value="{account}" />
    <add key="Project" value="{project}" />
    <add key="PersonalAccessToken" value="{pat}" />

    <add key="AreaPath" value="{areaPath}" />
    <add key="IterationPath" value="{project}\{iteration-path}" />
    <add key="DefaultAssignedTo" value="{default-user-email}" />

    <add key="TestProjectPath" value=".\EShopApplicationWebSolution.csproj" />
    <add key="TestAssemblyPath" value=".\bin\debug\EShopApplicationWebSolution.dll" />

    <!-- Comma separated filters (e.g. Features,FeatureName1,path2/FeatureName2) -->
    <add key="FeatureFilters" value="" />

    <!-- Comma separated filters (e.g. ScenarioName1,ScenarioName2) -->
    <add key="ScenarioFilters" value="" />

    <!-- Comma separated tags (e.g. @attach,@input) -->
    <add key="AttachmentTags" value="@attach" />

    <!-- Root folder for attachments -->
    <add key="AttachmentsPath" value="TestData" />

    <!-- Comma separated fields (e.g. customField1=defaultValue1,customField2=defaultValue2) -->
    <add key="AdditionalFields" value="" />

    <add key="BddThenAsExpectedResult" value="false" />
    <add key="ScenarioOutlineExamplesInline" value="false" />

    <!-- Valid values: blank, s, r, m -->
    <add key="QuiteMode" value="" />

  </spex>

  <reporting>
    <add key="Path" value="TestOutput\Reports" />
    <add key="Enabled" value="true" />
    <add key="DarkTheme" value="true" />
    <add key="ShowSteps" value="true" />
	  <add key="ShowLogs" value="true" />
  </reporting>

  <chaosMonkey>
    <add key="Enabled" value="false" />
    <add key="sqlDb" value="SqlConnectionString" />
    <add key="blobStorage" value="BlobConnectionString" />
    <add key="tableStorage" value="TableConnectionString" />
    <add key="serviceBus" value="ServiceBusConnectionString" />
    <add key="dataLake" value="DataLakeConnectionString" />
    <add key="function" value="FunctionConnectionString" />
    <add key="logicApp" value="LogicAppConnectionString" />
    <add key="aks" value="AksConnectionString" />
    <add key="appService" value="AppServiceConnectionString" />
  </chaosMonkey>

  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider"
             type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
             serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider"
             type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
             serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>

</configuration>