/// <summary>
        /// Creates a new instance of this Rhino.Api.Simulator.Framework.XrayAutomationProvider.
        /// </summary>
        /// <param name="configuration">Rhino.Api.Contracts.Configuration.RhinoConfiguration to use with this provider.</param>
        /// <param name="types">A collection of <see cref="Type"/> to load for this repository.</param>
        /// <param name="logger">Gravity.Abstraction.Logging.ILogger implementation for this provider.</param>
        public XrayAutomationProvider(RhinoConfiguration configuration, IEnumerable <Type> types, ILogger logger)
            : base(configuration, types, logger)
        {
            // setup
            this.logger = logger?.Setup(loggerName: nameof(XrayAutomationProvider));

            var authentication = configuration.GetJiraAuthentication();

            jiraClient   = new JiraClient(authentication);
            jiraExecutor = new JiraCommandsExecutor(authentication);

            // capabilities
            BucketSize = configuration.GetBucketSize();
            configuration.PutDefaultCapabilities();
            capabilities = configuration.Capabilities.ContainsKey($"{Connector.JiraXRay}:options")
                ? configuration.Capabilities[$"{Connector.JiraXRay}:options"] as IDictionary <string, object>
                : new Dictionary <string, object>();

            // integration
            bugsManager = new JiraBugsManager(jiraClient);
        }
        /// <summary>
        /// Creates a new instance of this Rhino.Api.Simulator.Framework.AutomationProvider.
        /// </summary>
        /// <param name="configuration">Rhino.Api.Contracts.Configuration.RhinoConfiguration to use with this provider.</param>
        /// <param name="types">A collection of <see cref="Type"/> to load for this repository.</param>
        /// <param name="logger">Gravity.Abstraction.Logging.ILogger implementation for this provider.</param>
        public GurockAutomationProvider(RhinoConfiguration configuration, IEnumerable <Type> types, ILogger logger)
            : base(configuration, types, logger)
        {
            // setup
            this.logger = logger?.Setup(loggerName: nameof(GurockAutomationProvider));

            // capabilities
            BucketSize = configuration.GetCapability(ProviderCapability.BucketSize, 15);

            // jira
            var jiraAuth = GetJiraAuthentication(configuration.Capabilities);

            if (!string.IsNullOrEmpty(jiraAuth.Collection))
            {
                jiraClient  = new JiraClient(jiraAuth);
                bugsManager = new JiraBugsManager(jiraClient);
            }

            // integration
            clientFactory = new ClientFactory(
                configuration.ConnectorConfiguration.Collection,
                configuration.ConnectorConfiguration.UserName,
                configuration.ConnectorConfiguration.Password,
                logger);

            suitesClient        = clientFactory.Create <TestRailSuitesClient>();
            casesClient         = clientFactory.Create <TestRailCasesClient>();
            configuraionsClient = clientFactory.Create <TestRailConfiguraionsClient>();
            milestoneClient     = clientFactory.Create <TestRailMilestoneClient>();
            plansClient         = clientFactory.Create <TestRailPlansClient>();
            usersClient         = clientFactory.Create <TestRailUsersClient>();
            prioritiesClient    = clientFactory.Create <TestRailPrioritiesClient>();
            templatesClient     = clientFactory.Create <TestRailTemplatesClient>();

            // meta data
            project = suitesClient.Projects.FirstOrDefault(i => i.Name.Equals(configuration.ConnectorConfiguration.Project, Compare));
            user    = usersClient.GetUserByEmail(configuration.ConnectorConfiguration.UserName);
        }
        /// <summary>
        /// Creates a new instance of this Rhino.Api.Simulator.Framework.XrayAutomationProvider.
        /// </summary>
        /// <param name="configuration">Rhino.Api.Contracts.Configuration.RhinoConfiguration to use with this provider.</param>
        /// <param name="types">A collection of <see cref="Type"/> to load for this repository.</param>
        /// <param name="logger">Gravity.Abstraction.Logging.ILogger implementation for this provider.</param>
        public XrayCloudAutomationProvider(RhinoConfiguration configuration, IEnumerable <Type> types, ILogger logger)
            : base(configuration, types, logger)
        {
            // setup
            this.logger = logger?.Setup(loggerName: nameof(XrayCloudAutomationProvider));
            jiraClient  = new JiraClient(configuration.GetJiraAuthentication());
            xpandClient = new XpandClient(configuration.GetJiraAuthentication());
            executor    = new JiraCommandsExecutor(configuration.GetJiraAuthentication());

            // capabilities
            BucketSize = configuration.GetBucketSize();
            configuration.PutDefaultCapabilities();
            capabilities = configuration.Capabilities.ContainsKey($"{Connector.JiraXryCloud}:options")
                ? configuration.Capabilities[$"{Connector.JiraXryCloud}:options"] as IDictionary <string, object>
                : new Dictionary <string, object>();

            // misc
            options = new ParallelOptions {
                MaxDegreeOfParallelism = BucketSize
            };

            // integration
            bugsManager = new JiraBugsManager(jiraClient);
        }