public void LaunchesChromeBrowserSkipsEmptyParams()
        {
            _launchParams.ApplicationName = "theAppName";
            _launchParams.GameletName     = "gameletName";
            _launchParams.Debug           = true;

            var workingDirectory = "the/working/directory";
            var commandRun       = "";

            _backgroundProcessFactory.Create(YetiConstants.Command,
                                             Arg.Do <string>(x => commandRun = x), workingDirectory);

            var urlBuildStatus = _chromeClientsLauncher.MakeLegacyLaunchUrl(out string launchUrl);

            Assert.That(urlBuildStatus.IsOk, Is.EqualTo(true));
            _chromeClientsLauncher.LaunchGame(launchUrl, workingDirectory);

            var parser = new ChromeCommandParser(commandRun);

            Assert.That(parser.Url, Is.EqualTo(
                            $"https://console.ggp.google.com/organizations/{_sdkConfig.OrganizationId}/stream"));

            var query = parser.QueryParams;

            Assert.That(query.Count, Is.EqualTo(6));
            Assert.That(query["application_name"], Is.EqualTo(_launchParams.ApplicationName));
            Assert.That(query["gamelet_name"], Is.EqualTo(_launchParams.GameletName));
            Assert.That(query["debug_mode"], Is.EqualTo("2"));
            Assert.That(query["rgp"], Is.EqualTo("false"));
            Assert.That(query["renderdoc"], Is.EqualTo("false"));
            Assert.That(query["surface_enforcement_mode"], Is.EqualTo("off"));
        }
        public void LaunchesChromeClient(
            [Values("http://theportalurl", "")] string portalUrl,
            [Values("http://theportalurl", "https://console.ggp.google.com")]
            string expectedPortalUrl)
        {
            _sdkConfig.ChromeProfileDir = "MyProfile";
            _sdkConfig.Url = "http://theurl.com";
            _sdkConfig.PartnerPortalUrl = portalUrl;
            _sdkConfig.OrganizationId   = "orgId";

            _launchParams.ApplicationName        = "theAppName";
            _launchParams.ApplicationId          = "theAppId";
            _launchParams.GameletName            = "gameletName";
            _launchParams.Account                = "*****@*****.**";
            _launchParams.Cmd                    = "TestProject launcharg=1 launcharg2=2";
            _launchParams.TestAccount            = "testAccount";
            _launchParams.GameletEnvironmentVars = "var1=5";
            _launchParams.SdkVersion             = "sdkVersion";
            _launchParams.Rgp                    = true;
            _launchParams.RenderDoc              = true;
            _launchParams.Debug                  = true;
            _launchParams.SurfaceEnforcementMode = SurfaceEnforcementSetting.Warn;
            _launchParams.QueryParams            = "customName=customValue";

            var workingDirectory = "the/working/directory";
            var commandRun       = "";

            _backgroundProcessFactory.Create(YetiConstants.Command,
                                             Arg.Do <string>(x => commandRun = x), workingDirectory);

            var urlBuildStatus = _chromeClientsLauncher.MakeLegacyLaunchUrl(out string launchUrl);

            Assert.That(urlBuildStatus.IsOk, Is.EqualTo(true));
            _chromeClientsLauncher.LaunchGame(launchUrl, workingDirectory);

            var parser = new ChromeCommandParser(commandRun);

            Assert.Multiple(() => {
                Assert.That(
                    parser.Url,
                    Is.EqualTo(
                        $"{expectedPortalUrl}/organizations/{_sdkConfig.OrganizationId}/stream"));

                var query = parser.QueryParams;
                Assert.That(query["application_name"], Is.EqualTo(_launchParams.ApplicationName));
                Assert.That(query["gamelet_name"], Is.EqualTo(_launchParams.GameletName));
                Assert.That(query["cmd"], Is.EqualTo(_launchParams.Cmd));
                Assert.That(query["vars"], Is.EqualTo(_launchParams.GameletEnvironmentVars));
                Assert.That(query["debug_mode"], Is.EqualTo("2"));
                Assert.That(query["rgp"], Is.EqualTo("true"));
                Assert.That(query["renderdoc"], Is.EqualTo("true"));
                Assert.That(query["surface_enforcement_mode"], Is.EqualTo("warn"));
                Assert.That(query["sdk_version"], Is.EqualTo(_launchParams.SdkVersion));
                Assert.That(query["test_account"], Is.EqualTo(_launchParams.TestAccount));
                Assert.That(query["customName"], Is.EqualTo("customValue"));
                Assert.That(parser.Fragment, Is.EqualTo("Email=" + _launchParams.Account));
                Assert.That(parser.ProfileDir, Is.EqualTo(_sdkConfig.ChromeProfileDir));
            });
        }
        public void LaunchChromeBrowserCustomQueryParamOverridesLaunchParam(
            [Values("?", "")] string prefix)
        {
            _launchParams.ApplicationName = "theAppName";
            _launchParams.GameletName     = "gameletName";
            _launchParams.Account         = "*****@*****.**";
            _launchParams.Debug           = true;
            _launchParams.QueryParams
                = $"{prefix}application_name=customAppName&gamelet_name=customGameletName";

            var workingDirectory = "the/working/directory";
            var commandRun       = "";

            _backgroundProcessFactory.Create(YetiConstants.Command,
                                             Arg.Do <string>(x => commandRun = x), workingDirectory);

            var urlBuildStatus = _chromeClientsLauncher.MakeLegacyLaunchUrl(out string launchUrl);

            Assert.That(urlBuildStatus.IsOk, Is.EqualTo(true));
            _chromeClientsLauncher.LaunchGame(launchUrl, workingDirectory);

            var parser = new ChromeCommandParser(commandRun);

            Assert.That(parser.Url, Is.EqualTo(
                            $"https://console.ggp.google.com/organizations/{_sdkConfig.OrganizationId}/stream"));

            var query = parser.QueryParams;

            Assert.That(query["application_name"], Is.EqualTo("customAppName"));
            Assert.That(query["gamelet_name"], Is.EqualTo("customGameletName"));
            Assert.That(query["test_account"], Is.EqualTo(_launchParams.TestAccount));

            Assert.That(_logSpy.GetOutput(), Does.Contain("application_name"));
            Assert.That(_logSpy.GetOutput(), Does.Contain("theAppName"));
            Assert.That(_logSpy.GetOutput(), Does.Contain("customAppName"));

            Assert.That(_logSpy.GetOutput(), Does.Contain("gamelet_name"));
            Assert.That(_logSpy.GetOutput(), Does.Contain("gameletName"));
            Assert.That(_logSpy.GetOutput(), Does.Contain("customGameletName"));
        }