public async Task UpdatesMetricsWhenRepositoryCloned()
        {
            var serviceProvider = Substitutes.ServiceProvider;
            var operatingSystem = serviceProvider.GetOperatingSystem();
            var vsGitServices   = serviceProvider.GetVSGitServices();
            var usageTracker    = Substitute.For <IUsageTracker>();
            var cloneService    = new RepositoryCloneService(operatingSystem, vsGitServices, usageTracker);

            await cloneService.CloneRepository("https://github.com/foo/bar", "bar", @"c:\dev");

            usageTracker.Received().IncrementCloneCount();
        }
        public async Task UpdatesMetricsWhenRepositoryCloned()
        {
            var serviceProvider = Substitutes.ServiceProvider;
            var operatingSystem = serviceProvider.GetOperatingSystem();
            var vsGitServices   = serviceProvider.GetVSGitServices();
            var usageTracker    = Substitute.For <IUsageTracker>();
            var cloneService    = new RepositoryCloneService(operatingSystem, vsGitServices, usageTracker);

            await cloneService.CloneRepository("https://github.com/foo/bar", "bar", @"c:\dev");

            var model = new UsageModel();

            await usageTracker.Received().IncrementCounter(
                Arg.Is <Expression <Func <UsageModel, int> > >(x =>
                                                               ((MemberExpression)x.Body).Member.Name == nameof(model.NumberOfClones)));
        }
        public async Task UpdatesMetricsWhenRepositoryClonedAsync(string cloneUrl, int numberOfCalls, string counterName)
        {
            var serviceProvider = Substitutes.ServiceProvider;
            var operatingSystem = serviceProvider.GetOperatingSystem();
            var vsGitServices   = serviceProvider.GetVSGitServices();
            var graphqlFactory  = Substitute.For <IGraphQLClientFactory>();
            var usageTracker    = Substitute.For <IUsageTracker>();
            var cloneService    = new RepositoryCloneService(operatingSystem, vsGitServices, graphqlFactory, usageTracker);

            await cloneService.CloneRepository(cloneUrl, @"c:\dev\bar");

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }
        public async Task UpdatesMetricsWhenDefaultClonePath(string targetPath, string defaultPath, int numberOfCalls, string counterName)
        {
            var serviceProvider      = Substitutes.ServiceProvider;
            var operatingSystem      = serviceProvider.GetOperatingSystem();
            var vsGitServices        = serviceProvider.GetVSGitServices();
            var teamExplorerServices = Substitute.For <ITeamExplorerServices>();

            vsGitServices.GetLocalClonePathFromGitProvider().Returns(defaultPath);
            var graphqlFactory = Substitute.For <IGraphQLClientFactory>();
            var usageTracker   = Substitute.For <IUsageTracker>();
            var cloneService   = new RepositoryCloneService(operatingSystem, vsGitServices, teamExplorerServices,
                                                            graphqlFactory, usageTracker);

            await cloneService.CloneRepository("https://github.com/foo/bar", targetPath);

            var model = UsageModel.Create(Guid.NewGuid());

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }
        public async Task UpdatesMetricsWhenCloneOrOpenRepositoryAsync(string cloneUrl, bool dirExists, int numberOfCalls, string counterName)
        {
            var repositoryPath    = @"c:\dev\bar";
            var cloneDialogResult = new CloneDialogResult(repositoryPath, cloneUrl);
            var serviceProvider   = Substitutes.ServiceProvider;
            var operatingSystem   = serviceProvider.GetOperatingSystem();

            operatingSystem.Directory.DirectoryExists(repositoryPath).Returns(dirExists);
            var vsGitServices        = serviceProvider.GetVSGitServices();
            var teamExplorerServices = Substitute.For <ITeamExplorerServices>();
            var graphqlFactory       = Substitute.For <IGraphQLClientFactory>();
            var usageTracker         = Substitute.For <IUsageTracker>();
            var cloneService         = new RepositoryCloneService(operatingSystem, vsGitServices, teamExplorerServices,
                                                                  graphqlFactory, usageTracker);

            await cloneService.CloneOrOpenRepository(cloneDialogResult);

            await usageTracker.Received(numberOfCalls).IncrementCounter(
                Arg.Is <Expression <Func <UsageModel.MeasuresModel, int> > >(x =>
                                                                             ((MemberExpression)x.Body).Member.Name == counterName));
        }