Esempio n. 1
0
        public async Task OnConnect_QueriesUserProjectAndBuildConfigs_AndSendMappedInfoToClient_AndTriggersRefreshForThisClient()
        {
            string username     = _fixture.Create <string>();
            string connectionId = _fixture.Create <string>();

            A.CallTo(() => _principal.Identity.Name).Returns(username);
            A.CallTo(() => _context.ConnectionId).Returns(connectionId);
            A.CallTo(() => _context.User).Returns(_principal);

            List <Project> projects = _fixture.CreateMany <Project>().ToList();

            A.CallTo(() => _infoQuery.GetUserProjectsAndBuildConfigs(username))
            .Returns(projects);

            A.CallTo(() => _fakeClients.Client(connectionId)).Returns(_fakeClient);

            CiDashboardHub hub = new CiDashboardHub(_connectionsManager, _commandProcessor, _infoQuery, _refreshInfo)
            {
                Context = _context
            };

            hub.Clients = _fakeClients;
            await hub.OnConnected();

            A.CallTo(() => _infoQuery.GetUserProjectsAndBuildConfigs(username))
            .MustHaveHappened();

            List <string> buildCiIds = projects
                                       .SelectMany(
                p => p.Builds
                .Where(b => !string.IsNullOrEmpty(b.CiExternalId))
                .ToList())
                                       .Select(b => b.CiExternalId)
                                       .ToList();

            A.CallTo(() => _connectionsManager.AddBuildConfigs(connectionId,
                                                               A <IEnumerable <BuildConfig> > .That.Matches(l => !l.Select(b => b.CiExternalId).Except(buildCiIds).Any())))
            .MustHaveHappened();

            A.CallTo(() => _refreshInfo.SendRefreshBuildResults(connectionId))
            .MustHaveHappened();

            A.CallTo(() => _fakeClient
                     .SendProjectsAndBuildConfigs(projects))
            .MustHaveHappened();
        }
        private async Task GetUserProjectsAndBuildsAndSendTheInfoToClient(string username, string connectionId)
        {
            IEnumerable <Project> userProjects = await _infoQuery.GetUserProjectsAndBuildConfigs(username);

            IEnumerable <Project> enumerable = userProjects as Project[] ?? userProjects.ToArray();
            List <BuildConfig>    buildCiIds = enumerable
                                               .SelectMany(p => p.Builds
                                                           .Where(b => !string.IsNullOrEmpty(b.CiExternalId))
                                                           .ToList())
                                               .ToList();

            await _connectionsManager.AddBuildConfigs(connectionId, buildCiIds);

            Logger.Debug("Start retrieving builds for {user} and {connectionId}", username, connectionId);

            Clients.Client(connectionId).SendProjectsAndBuildConfigs(enumerable);
            await SendInfoMessage(connectionId, "Your builds are being retrieved");
        }