public void Setup()
        {
            _sdkConfigFactory = Substitute.For <ISdkConfigFactory>();
            _sdkConfigFactory.LoadGgpSdkConfigOrDefault().Returns(_sdkConfig);
            _queryParametersParser = Substitute.For <IQueryParametersParser>();
            IDictionary <string, string> dict = new Dictionary <string, string>();

            _queryParametersParser
            .GetFinalQueryString(dict, out string _)
            .Returns(x =>
            {
                x[1] = string.Empty;
                return(ConfigStatus.OkStatus());
            });
            _queryParametersParser
            .ParametersToDictionary(Arg.Any <string>(), out IDictionary <string, string> _)
            .Returns(x =>
            {
                x[1] = dict;
                return(ConfigStatus.OkStatus());
            });
            _queryParametersParser.ParseToLaunchRequest(dict, Arg.Any <LaunchGameRequest>())
            .Returns(ConfigStatus.OkStatus());
            _queryParametersParser
            .ParseToParameters(dict, Arg.Any <LaunchParams>())
            .Returns(ConfigStatus.OkStatus());
            _target = new LaunchGameParamsConverter(_sdkConfigFactory, _queryParametersParser);
        }
 public void Setup()
 {
     _sdkConfigFactory = Substitute.For <ISdkConfigFactory>();
     _sdkConfigFactory.LoadGgpSdkConfigOrDefault().Returns(_sdkConfig);
     _queryParametersParser = new QueryParametersParser();
     _parametersConverter   =
         new LaunchGameParamsConverter(_sdkConfigFactory, _queryParametersParser);
 }
        public ConfigStatus ToLaunchGameRequest(
            LaunchParams parameters, out LaunchGameRequest request)
        {
            ConfigStatus status =
                _queryParametersParser.ParametersToDictionary(
                    parameters.QueryParams, out IDictionary <string, string> parametersDict);

            status = status.Merge(
                _queryParametersParser.ParseToParameters(parametersDict, parameters));
            ISdkConfig sdkConfig = _sdkConfigFactory.LoadGgpSdkConfigOrDefault();

            status = status.Merge(
                EnvironmentVariables(parameters, out IDictionary <string, string> envVariables));
            status = status.Merge(CommandLineArguments(parameters, out string[] cmdArgs));

            if ((parameters.Endpoint == StadiaEndpoint.PlayerEndpoint ||
                 parameters.Endpoint == StadiaEndpoint.AnyEndpoint) &&
                !string.IsNullOrEmpty(parameters.TestAccount))
            {
                status.AppendWarning(
                    ErrorStrings.TestAccountsNotSupported(parameters.TestAccountGamerName));
                parameters.TestAccount = null;
            }

            request = new LaunchGameRequest
            {
                Parent                   = Parent(sdkConfig, parameters),
                GameletName              = parameters.GameletName,
                ApplicationName          = parameters.ApplicationName,
                ExecutablePath           = ExecutablePath(parameters),
                CommandLineArguments     = cmdArgs,
                EnvironmentVariablePairs = envVariables,
                SurfaceEnforcementMode   = parameters.SurfaceEnforcementMode,
                Debug = parameters.Debug,
                EnableDeveloperResumeOffer = parameters.Endpoint == StadiaEndpoint.AnyEndpoint
            };

            status = status.Merge(
                _queryParametersParser.ParseToLaunchRequest(parametersDict, request));

            status = status.Merge(
                _queryParametersParser.GetFinalQueryString(parametersDict, out string queryString));
            parameters.QueryParams = queryString;

            if ((parameters.Endpoint == StadiaEndpoint.PlayerEndpoint ||
                 parameters.Endpoint == StadiaEndpoint.AnyEndpoint) &&
                !string.IsNullOrEmpty(queryString))
            {
                status.AppendWarning(ErrorStrings.QueryParamsNotSupported(queryString));
            }

            return(status);
        }