コード例 #1
0
        public void TryDistributeTotalInput_ClientHourRegistrationHoursAreUpdatedAsExpected()
        {
            // Arrange
            new DispatcherFrame();
            var headerClient = new ForecastRegistrationDateColumn(new DateTime(2013, 1, 1))
            {
                ForecastTypeRegistration = new ForecastTypeRegistration(ForecastTestData.ProjectHoursOnlyForecastType, null)
            };

            var headerOpen = new ForecastRegistrationDateColumn(new DateTime(2013, 1, 2))
            {
                ForecastTypeRegistration = new ForecastTypeRegistration(ForecastTestData.DedicatedAndProjectHoursForcastType, null)
            };

            var sut = new ProjectRegistration {
                Registrations = new ObservableCollection <ProjectHourRegistration>()
            };

            AddClientHourRegistration(sut, headerClient, 7.5m);
            AddClientHourRegistration(sut, headerOpen, 4);

            // Act
            sut.TryDistributeTotalInput("14");

            // Assert
            Assert.That(sut.Registrations.Single(x => x.SelectedPresencetypeSupportsProjectHoursOnly()).Hours, Is.EqualTo(7));
            Assert.That(sut.Registrations.Single(x => x.SelectedPresencetypeSupportsDedicatedHours).Hours, Is.EqualTo(7));
        }
コード例 #2
0
        private void UpdateProjectContributors(Project project, ProjectRegistration projectIn)
        {
            var existingContributors = unitOfWork.UserProjects.GetAllFromProject(project.Id);

            unitOfWork.UserProjects.RemoveRange(existingContributors);

            var userProjects = new List <UserProject>();

            userProjects.Add(new UserProject
            {
                Project = project,
                User    = project.Owner
            });

            if (projectIn.Contributors.Count > 0)
            {
                foreach (var user in projectIn.Contributors)
                {
                    var userProject = new UserProject
                    {
                        Project = project,
                        User    = user
                    };
                    userProjects.Add(userProject);
                }
            }

            if (userProjects.Count > 0)
            {
                unitOfWork.UserProjects.AddRange(userProjects);
            }
            unitOfWork.Complete();
        }
コード例 #3
0
        public bool Create(ProjectRegistration projectIn)
        {
            if (string.IsNullOrEmpty(projectIn.Name) ||
                (projectIn.Owner == null) ||
                (projectIn.Categories.Count < 1))
            {
                return(false);
            }

            var project = new Project
            {
                Name              = projectIn.Name,
                Description       = projectIn.Description,
                Owner             = projectIn.Owner,
                UserProjects      = new List <UserProject>(),
                ProjectCategories = new List <ProjectCategory>()
            };

            unitOfWork.Projects.Add(project);
            unitOfWork.Complete();

            UpdateProjectContributors(project, projectIn);
            UpdateProjectCategories(project, projectIn);
            return(true);
        }
コード例 #4
0
        public void GenerateBaseDataByDate_DateIsInFebuary2013_DateDependentCollectionsAreInitialized()
        {
            // Arrange
            var frame            = new DispatcherFrame();
            var fixture          = InitializeFixture();
            var generator        = new ForecastRegistrationDataGenerator(ForecastTestData.MockForecastTypeProvider(fixture).Object, null, new CopyStatusCommandHandler());
            var timeEntryService = new Mock <ITimeEntryService>();
            var appSettings      = new Mock <IAppSettings>();
            var viewModel        = new ForecastRegistrationViewModel(generator, new ProjectSearchViewModel(null), null, null, null, null, null,
                                                                     ForecastTestData.MockForecastTypeProvider(fixture).Object, timeEntryService.Object, appSettings.Object, null);
            var clientRegistration = new ProjectRegistration {
                Registrations = new ObservableCollection <ProjectHourRegistration>()
            };

            viewModel.ProjectRegistrations = new ProjectRegistrations {
                clientRegistration
            };

            var date = new DateTime(2013, 2, 1);

            // Act
            generator.GenerateBaseDataByDate(date, viewModel);

            // Assert
            Assert.That(viewModel.DateColumns, Is.Not.Empty);
            Assert.That(viewModel.PresenceRegistrations, Is.Not.Empty);
        }
コード例 #5
0
        public void CreateRegistrationsFromHeaders_DateHeadersHasTwoItems_ReturnsTwoHourRegistrations()
        {
            // Arrange
            var frame       = new DispatcherFrame();
            var dateHeaders = new List <ForecastRegistrationDateColumn>()
            {
                new ForecastRegistrationDateColumn(new DateTime(2013, 1, 1)),
                new ForecastRegistrationDateColumn(new DateTime(2013, 1, 2))
            };

            var viewModel = new Mock <IForecastRegistrationViewModel>();

            viewModel.SetupGet(x => x.PresenceRegistrations).Returns(new ObservableCollection <ForecastTypeRegistration>(
                                                                         dateHeaders.Select(x =>
            {
                var newItem = new ForecastTypeRegistration(ForecastTestData.ProjectHoursOnlyForecastType, null);
                x.ForecastTypeRegistration = newItem;
                return(newItem);
            }).ToList()
                                                                         ));

            var clientReg = new ProjectRegistration();

            var generator = new ForecastRegistrationDataGenerator(null, null, null);

            // Act
            var result = generator.CreateProjectHoursFromHeaders(dateHeaders, viewModel.Object, clientReg);

            // Assert
            Assert.That(result.Count, Is.EqualTo(2));
            Assert.That(result.Any(x => x.Hours != 0), Is.False);
            Assert.That(result.Any(x => !x.Parent.Equals(clientReg)), Is.False);
        }
コード例 #6
0
        public ProjectRegistration CreateClientRegistration(string clientName)
        {
            var client1 = new ProjectRegistration {
                ProjectName = clientName
            };

            client1.Registrations = CreateClientDateRegistrations(client1);
            return(client1);
        }
コード例 #7
0
        private void AddClientHourRegistration(ProjectRegistration projectRegistration, ForecastRegistrationDateColumn dateColumn, decimal hours)
        {
            var clientHourReg = new ProjectHourRegistration(projectRegistration)
            {
                Hours = hours
            };

            dateColumn.AddProjectHours(clientHourReg);
        }
コード例 #8
0
        private void AddDateColumnWithClientRegistration(ProjectRegistration projectRegistration, decimal hours, bool isEditEnabled)
        {
            var dateColumn             = new ForecastRegistrationDateColumn(new DateTime(2013, 1, 1));
            var clientHourRegistration = new ProjectHourRegistration(projectRegistration)
            {
                Hours         = hours,
                IsEditEnabled = isEditEnabled
            };

            dateColumn.AddProjectHours(clientHourRegistration);
            projectRegistration.Registrations.Add(clientHourRegistration);
        }
コード例 #9
0
        public void TryDistributeTotalInput_InputStringIsNotInt_AbortsUpdate()
        {
            // Arrange
            var sut = new ProjectRegistration {
                Registrations = new ObservableCollection <ProjectHourRegistration>()
            };

            // Act
            sut.TryDistributeTotalInput("abc");

            // Assert
        }
コード例 #10
0
        public void ApplyHoursToAll_IntputIsFifteenthOfMonth_AllDaysAreupdated()
        {
            // Arrange
            var clientRegistration = new ProjectRegistration();

            clientRegistration.Registrations = new ObservableCollection <ProjectHourRegistration>(CreateHoursForMonth(2, 2013, 7.5m, clientRegistration));

            var source = clientRegistration
                         .Registrations
                         .Single(x => x.DateColumn.Date.Day == 15);

            source.Hours = 0;

            // Act
            clientRegistration.ApplyHoursToAll(source);

            // Assert
            Assert.That(clientRegistration.Registrations.Any(x => x.Hours != 0), Is.False);
        }
コード例 #11
0
        public DeployItem(ProjectRegistration projectRegistration)
        {
            InitializeComponent();

            nameLabel.Text = projectRegistration.Name;

            if (projectRegistration.IsNugetPackage)
            {
                typeLabel.Text = "Nuget";
            }
            else if (projectRegistration.IsUpdatePackage)
            {
                typeLabel.Text = "Update";
            }
            else
            {
                typeLabel.Text = "None";
            }
        }
コード例 #12
0
        private void UpdateProjectCategories(Project project, ProjectRegistration projectIn)
        {
            var existingCategories = unitOfWork.ProjectCategories.GetAllFromProject(project.Id);

            unitOfWork.ProjectCategories.RemoveRange(existingCategories);

            var projectCategories = new List <ProjectCategory>();

            foreach (var category in projectIn.Categories)
            {
                var projectCategory = new ProjectCategory
                {
                    Project  = project,
                    Category = category
                };
                projectCategories.Add(projectCategory);
            }

            unitOfWork.ProjectCategories.AddRange(projectCategories);
            unitOfWork.Complete();
        }
コード例 #13
0
        public bool Update(ProjectRegistration projectIn)
        {
            if (string.IsNullOrEmpty(projectIn.Name) ||
                (projectIn.Owner == null) ||
                (projectIn.Categories.Count < 1))
            {
                Console.Error.WriteLine("Wrong parameters for updating a project");
                return(false);
            }

            var project = unitOfWork.Projects.Find(p => p.Name == projectIn.OldName).Single();

            project.Name        = projectIn.Name;
            project.Owner       = projectIn.Owner;
            project.Description = projectIn.Description;
            unitOfWork.Complete();

            UpdateProjectContributors(project, projectIn);
            UpdateProjectCategories(project, projectIn);

            return(true);
        }
コード例 #14
0
        public void ApplyHoursForward_InputIsTenthOfMonth_DaysAfterTenthAreUpdated()
        {
            // Arrange
            var clientRegistration = new ProjectRegistration();

            clientRegistration.Registrations = new ObservableCollection <ProjectHourRegistration>(CreateHoursForMonth(1, 2013, 7.5m, clientRegistration));
            var source = clientRegistration
                         .Registrations
                         .Single(x => x.DateColumn.Date.Day == 10);

            source.Hours = 6;

            // Act
            clientRegistration.ApplyHoursForward(source);

            // Assert
            var preTenth = clientRegistration.Registrations.Where(x => x.DateColumn.Date.Day < 10);

            Assert.That(preTenth.Any(x => x.Hours != 7.5m), Is.False);
            var postTenth = clientRegistration.Registrations.Where(x => x.DateColumn.Date.Day > 10);

            Assert.That(postTenth.Any(x => x.Hours != 6), Is.False);
        }
コード例 #15
0
        public void ApplyHoursBackwards_IntputIsTwentiethOfMonth_DaysBeforeTwentiethAreUpdated()
        {
            // Arrange
            var clientRegistration = new ProjectRegistration();

            clientRegistration.Registrations = new ObservableCollection <ProjectHourRegistration>(CreateHoursForMonth(2, 2013, 7.5m, clientRegistration));

            var source = clientRegistration
                         .Registrations
                         .Single(x => x.DateColumn.Date.Day == 20);

            source.Hours = 4.75m;

            // Act
            clientRegistration.ApplyHoursBackward(source);

            // Assert
            var preTwentieth = clientRegistration.Registrations.Where(x => x.DateColumn.Date.Day < 20);

            Assert.That(preTwentieth.Any(x => x.Hours != 4.75m), Is.False);
            var postTenth = clientRegistration.Registrations.Where(x => x.DateColumn.Date.Day > 20);

            Assert.That(postTenth.Any(x => x.Hours != 7.5m), Is.False);
        }
コード例 #16
0
 ResultValueBindErrorsOk(_ => ProjectRegistration.RegisterProject(BoutiqueContainer)).
コード例 #17
0
        private ObservableCollection <ProjectHourRegistration> CreateClientDateRegistrations(ProjectRegistration parent)
        {
            var dateColumns = CreateDateHeaders();
            var result      = new ObservableCollection <ProjectHourRegistration>();

            foreach (var forecastDateColumn in dateColumns)
            {
                var clientHourReg = new ProjectHourRegistration(parent)
                {
                    Hours = 6.5m
                };
                forecastDateColumn.AddProjectHours(clientHourReg);
                result.Add(clientHourReg);
            }

            result.Last().Hours = 0;
            return(result);
        }
コード例 #18
0
        public virtual ObservableCollection <ProjectHourRegistration> CreateProjectHoursFromHeaders(IEnumerable <ForecastRegistrationDateColumn> dateHeaders
                                                                                                    , IForecastRegistrationViewModel viewModel
                                                                                                    , ProjectRegistration parent)
        {
            var result = new ObservableCollection <ProjectHourRegistration>();

            foreach (var dateHeader in dateHeaders)
            {
                var projectHours = new ProjectHourRegistration(parent);
                dateHeader.AddProjectHours(projectHours);

                // Hookup for updating totals
                var dateItem = projectHours.DateColumn;
                projectHours
                .HoursUpdated
                .Subscribe(x =>
                {
                    viewModel.CalculateTotals(dateItem);
                    viewModel.RaiseCanExecuteActions();
                });

                InitializeIsEditEnabled(viewModel, projectHours);
                result.Add(projectHours);
            }

            return(result);
        }
コード例 #19
0
        private IEnumerable <ProjectHourRegistration> CreateHoursForMonth(int month, int year, decimal defaultHours, ProjectRegistration parent)
        {
            var result = new List <ProjectHourRegistration>();
            var day    = new DateTime(year, month, 1);

            while (day.Month == month)
            {
                if (!day.IsWeekend())
                {
                    var dateColumn = new ForecastRegistrationDateColumn(day);
                    var hourReg    = new ProjectHourRegistration(parent)
                    {
                        Hours = defaultHours
                    };
                    dateColumn.AddProjectHours(hourReg);
                    result.Add(hourReg);
                }

                day = day.AddDays(1);
            }
            return(result);
        }