public void YearlyPatternMonthsName()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            var list = new List<string>
                    {
                        Month.January.ToString(),
                        Month.February.ToString(),
                        Month.March.ToString(),
                        Month.April.ToString(),
                        Month.May.ToString(),
                        Month.June.ToString(),
                        Month.July.ToString(),
                        Month.August.ToString(),
                        Month.September.ToString(),
                        Month.October.ToString(),
                        Month.November.ToString(),
                        Month.December.ToString()
                    };

            // act
            var yearlyPatternMonthsNameList = vm.YearlyPatternMonthsName;

            // assert
            CollectionAssert.AreEqual(list, (ICollection) yearlyPatternMonthsNameList);
        }
        public void Ctor()
        {
            var vm = new FrequencyPatternDetailsViewModel();

            Assert.IsFalse(vm.CanScrollHorizontal);
            Assert.IsTrue(vm.CanScrollVertical);

            Assert.AreEqual(LanguageService.Translate("Cmd_CreateFrequency"), vm.ToolbarItemList.First().Caption);
            Assert.AreEqual(LanguageService.Translate("Cmd_RemoveFrequency"), vm.ToolbarItemList.Last().Caption);
            Assert.AreEqual(LanguageService.Translate("Cmd_Save"), vm.WindowCommandItemList.First().Caption);
            Assert.AreEqual(LanguageService.Translate("Cmd_Cancel"), vm.WindowCommandItemList.Last().Caption);
        }
        public void DaysOfWeek()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            var list = new List<string>
                    {
                        DayofWeek.Sunday.ToString(),
                        DayofWeek.Monday.ToString(),
                        DayofWeek.Tuesday.ToString(),
                        DayofWeek.Wednesday.ToString(),
                        DayofWeek.Thursday.ToString(),
                        DayofWeek.Friday.ToString(),
                        DayofWeek.Saturday.ToString()
                    };

            // act
            var daysOfWeekList = vm.DaysOfWeek;

            // assert
            CollectionAssert.AreEqual(list, (ICollection)daysOfWeekList);
        }
        public void IsSaveable()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();
            Mock.Arrange(() => vm.HasBrokenRules).Returns(true);

            // act
            var result = vm.IsSaveable;

            // assert
            Assert.IsTrue(result);

            // arrange
            Mock.Arrange(() => vm.HasBrokenRules).Returns(false);
            Mock.Arrange(() => vm.CanSave).Returns(true);

            // act
            result = vm.IsSaveable;

            // assert
            Assert.IsTrue(result);
        }
        public void OnRefreshed()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            var unitOfWork = Mock.Create<IUnitOfWork<IFrequencyPattern>>(Behavior.Loose);
            var model = Mock.Create<IFrequencyPattern>(Behavior.Loose);
            Mock.Arrange(() => model.IsNew).Returns(true);
            Mock.Arrange(() => unitOfWork.Model).Returns(model);

            var dataportalResult = new DataPortalResult<IUnitOfWork<IFrequencyPattern>>(unitOfWork, null, null);

            var shell = Mock.Create<IShell>(Behavior.CallOriginal);
            var baseMethodWasCalled = false;
            Mock.Arrange(() => shell.ShowStatus(Arg.IsAny<Status>(), false)).DoInstead(() => baseMethodWasCalled = true);
            vm.WindowManager = new Lazy<IShell>(() => shell);

            // act
            var privateAccessor = new PrivateAccessor(vm);
            privateAccessor.CallMethod("OnRefreshed", new object[] { null, dataportalResult });
            
            // assert
            Assert.AreEqual(model, vm.Model);
            Assert.AreEqual(FrequencyPatternType.Daily.ToString(), model.PatternType);

            // daily
            Assert.AreEqual(DailyPatternVariant.NumberOfDays.ToString(), model.DailyPatternOption);
            Assert.AreEqual(1, model.DailyPatternDaysToRecur);

            // weekly
            Assert.AreEqual(1, model.WeeklyPatternWeeksToRecur);
            Assert.AreEqual(false, model.IsSundaySelected);
            Assert.AreEqual(false, model.IsMondaySelected);
            Assert.AreEqual(false, model.IsTuesdaySelected);
            Assert.AreEqual(false, model.IsWednesdaySelected);
            Assert.AreEqual(false, model.IsThursdaySelected);
            Assert.AreEqual(false, model.IsFridaySelected);
            Assert.AreEqual(false, model.IsSaturdaySelected);

            // monthly
            Assert.AreEqual(MonthlyPatternVariant.DayByDate.ToString(), model.MonPatOption);
            Assert.AreEqual(1, model.MonPatRecurDate);
            Assert.AreEqual(1, model.MonPatByDateOptionMonthsToRec);
            Assert.AreEqual(TimeIntervalPosition.First.ToString(), model.MonPatTimeIntervalPosition);
            Assert.AreEqual(1, model.MonPatByPositionOptionMonToRec);
            Assert.AreEqual(1, model.MonPatMonthsToRec);
            Assert.AreEqual(DayofWeek.Saturday.ToString(), model.MonPatDayOfWeek);

            // yearly
            Assert.AreEqual(1, model.YearPatYearsToRec);
            Assert.AreEqual(YearlyPatternVariant.DayByDate.ToString(), model.YearPatOption);
            Assert.AreEqual(Month.January.ToString(), model.YearPatByDateOptionSelectMon);
            Assert.AreEqual(1, model.YearPatDayOfSelectMon);
            Assert.AreEqual(TimeIntervalPosition.First.ToString(), model.YearPatTimeIntervalPosition);
            Assert.AreEqual(DayofWeek.Saturday.ToString(), model.YearPatDayOfWeek);
            Assert.AreEqual(Month.January.ToString(), model.YearPatByNameOptionSelectMon);

            Assert.IsTrue(baseMethodWasCalled);

            // arrange
            baseMethodWasCalled = false;
            dataportalResult = new DataPortalResult<IUnitOfWork<IFrequencyPattern>>(null, new Exception(), null);

            var loggerWasCalled = false;
            var logger = new ClientLogger();
            Mock.Arrange(() => logger.Log(LogSeverity.Error, typeof(FrequencyPatternDetailsViewModel).ToString(), Arg.IsAny<Exception>())).DoInstead(() => loggerWasCalled = true);

            vm.Logger = logger;

            var popupMock = PopupMock.Create().NotifyFailureMustBeCalled(Arg.IsAny<Exception>());
            vm.ThePopupFactory = popupMock.TheLazyPopupFactory;

            // act
            privateAccessor.CallMethod("OnRefreshed", new object[] { null, dataportalResult });

            // assert
            Assert.IsTrue(loggerWasCalled);
            popupMock.AssertNotifyFailureCalled();
            Assert.IsTrue(baseMethodWasCalled);
        }
        public void Refresh()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            var dynamicTypeManager = Mock.Create<IDynamicTypeManager>(Behavior.Loose);

            var called = false;
            Mock.Arrange(() => dynamicTypeManager.BeginGetRetriever(Constants.FrequencyPatternProcessName, 1, Arg.IsAny<Action<object, IDataPortalResult>>(), false, false, default(Guid?), null)).DoInstead(() => called = true);

            vm.TheDynamicTypeManager = new Lazy<IDynamicTypeManager>(() => dynamicTypeManager);

            // act
            vm.LoadEditableRoot(1);

            // assert
            Assert.IsTrue(called);
        }
        public void AddNewFrequencyPattern_CheckCurrentIfSaved_Accept()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            var dynamicTypeManager = Mock.Create<IDynamicTypeManager>(Behavior.Loose);
            var popupFactory = Mock.Create<PopupFactory>(Behavior.Loose);

            Mock.Arrange(() => vm.IsSaveable).Returns(true);

            var called = false;
            var confirmMessageShown = false;
            Mock.Arrange(() => popupFactory.Confirm(Arg.AnyString, Arg.IsAny<Action>())).DoInstead<string, Action>((s, a) => { confirmMessageShown = true; a(); });
            Mock.Arrange(() => dynamicTypeManager.BeginNewRetriever(Constants.FrequencyPatternProcessName, Arg.IsAny<Action<object, IDataPortalResult>>())).DoInstead(() => called = true);

            vm.TheDynamicTypeManager = new Lazy<IDynamicTypeManager>(() => dynamicTypeManager);
            vm.ThePopupFactory = new Lazy<PopupFactory>(() => popupFactory);

            // act
            vm.NewEditableRoot();

            // assert
            Assert.IsTrue(called);
            Assert.IsTrue(confirmMessageShown);
        }
        public void IconUrl()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            // act
            var result = vm.IconURL;

            // assert
            Assert.AreEqual(ImageHelper.GetIconPath("frequency.png"), result);
        }
        public void GetTitle()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            // act
            var privateAccessor = new PrivateAccessor(vm);
            var result = privateAccessor.CallMethod("GetTitle");

            // assert
            Assert.AreEqual("Loading...", result);

            // arrange
            var fp = Mock.Create<IFrequencyPattern>(Behavior.CallOriginal);
            Mock.Arrange(() => fp.ProcessDisplayName).Returns("Frequency Pattern");
            Mock.Arrange(() => fp.IsNew).Returns(true);
            Mock.Arrange(() => vm.Model).Returns(fp);

            // act
            result = privateAccessor.CallMethod("GetTitle");

            // assert
            Assert.AreEqual("Details: Frequency Pattern (new)", result);

            // arrange
            Mock.Arrange(() => fp.Id).Returns(1);
            Mock.Arrange(() => fp.IsNew).Returns(false);

            // act
            result = privateAccessor.CallMethod("GetTitle");

            // assert
            Assert.AreEqual("Details: Frequency Pattern (1)", result);
        }
        public void OnSaved()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();

            var shell = Mock.Create<IShell>(Behavior.CallOriginal);
            Mock.Arrange(() => shell.ShowStatus(Arg.IsAny<Status>(), false)).MustBeCalled();
            vm.WindowManager = new Lazy<IShell>(() => shell);

            Mock.NonPublic.Arrange(vm, "RefreshTitle").MustBeCalled();

            var popupFactory = Mock.Create<PopupFactory>();
            Mock.Arrange(() => popupFactory.NotifySuccess("Successfully saved.", "Popup_Success")).MustBeCalled();
            vm.ThePopupFactory = new Lazy<PopupFactory>(() => popupFactory);

            var eventAggregator = Mock.Create<IEventAggregator>();
            Mock.Arrange(() => eventAggregator.Publish(Arg.IsAny<FrequencyPatternSaveEvent>())).MustBeCalled();

            vm.EventAggregator = eventAggregator;

            // act
            var privateAccessor = new PrivateAccessor(vm);
            privateAccessor.CallMethod("OnSaved", new object[] { false });

            // assert
            Mock.Assert(shell);
            Mock.Assert(vm);
            Mock.Assert(popupFactory);
            Mock.Assert(eventAggregator);

            // arrange
            Mock.Arrange(() => popupFactory.NotifySuccess("Frequency Pattern was removed", "Popup_Success")).MustBeCalled();

            // act
            privateAccessor.CallMethod("OnSaved", new object[] { true });

            // assert
            Mock.Assert(popupFactory);

            // arrange
            Mock.Reset();
            Mock.Arrange(() => shell.ShowStatus(Arg.IsAny<Status>(), false)).MustBeCalled();
            Mock.Arrange(() => vm.Error).Returns(new Exception());

            // act
            privateAccessor.CallMethod("OnSaved", new object[] { false });

            // assert
            Mock.Assert(shell);
            Mock.NonPublic.Assert(vm, "RefreshTitle", Occurs.Never());
            Mock.Assert(() => popupFactory.NotifySuccess(Arg.AnyString, Arg.AnyString), Occurs.Never());
        }
        public void AddNewFrequencyPatternCommand()
        {
            // arrange
            var vm = new FrequencyPatternDetailsViewModel();
            var called = false;
            Mock.Arrange(() => vm.NewEditableRoot()).DoInstead(() => called = true);
            Mock.Arrange(() => vm.CanAddItem).Returns(true);

            // act
            vm.AddNewFrequencyPatternCommand.Execute(null);

            // assert
            Assert.IsTrue(called);
        }