/// <summary>
        /// Creates a new instance of this Rhino.Api.Components.RhinoConnector.
        /// </summary>
        /// <param name="configuration">Rhino.Api.Contracts.Configuration.RhinoConfiguration to use with this connector.</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 connector.</param>
        /// <param name="connect"><see cref="true"/> for immediately connect after construct <see cref="false"/> skip connection.</param>
        /// <remarks>If you skip connection you must explicitly call Connect method.</remarks>
        public GurockConnector(RhinoConfiguration configuration, IEnumerable <Type> types, ILogger logger, bool connect)
            : base(configuration, types, logger)
        {
            // setup connector type (double check)
            configuration.ConnectorConfiguration ??= new RhinoConnectorConfiguration();
            configuration.ConnectorConfiguration.Connector = Connector.TestRail;

            // setup provider manager
            ProviderManager = new GurockAutomationProvider(configuration, types, logger);

            // integration
            var clientFactory = new ClientFactory(
                testRailServer: configuration.ConnectorConfiguration.Collection,
                user: configuration.ConnectorConfiguration.UserName,
                password: configuration.ConnectorConfiguration.Password,
                logger);

            casesClient       = clientFactory.Create <TestRailCasesClient>();
            testsClient       = clientFactory.Create <TestRailTestsClient>();
            resultsClient     = clientFactory.Create <TestRailResultsClient>();
            attachmentsClient = clientFactory.Create <TestRailAttachmentsClient>();

            // connect on constructing
            if (connect)
            {
                Connect();
            }
        }
        /// <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);
        }