Esempio n. 1
0
        public void InvokingTheQueryUpdateUpdatesTheSuggestions()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            //Fake some tags
            var fakeTags = new List <Tag>();

            for (int i = 0; i < 3; i++)
            {
                var tag = new Tag()
                {
                    Label = $"{nameof(EditTagsViewModelTests)} fake tag {i}",
                    Id    = i
                };

                fakeTags.Add(tag);
                database.Insert(tag);
            }

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                TagQuery = nameof(EditTagsViewModelTests)
            };

            viewModel.TagQueryChangedCommand.Execute(null);

            Assert.Equal(3, viewModel.Suggestions.Count);
            Assert.Contains(nameof(EditTagsViewModel), viewModel.Suggestions[0].Label);
        }
Esempio n. 2
0
        public void AddingATagToMultipleItemsAddsThemUsingTheOfflineTaskService()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                Items = new List <Item>()
                {
                    new Item()
                    {
                        Id = 1, Title = "First test"
                    },
                    new Item()
                    {
                        Id = 2, Title = "Second test"
                    },
                }
            };

            viewModel.Tags.Add(new Tag()
            {
                Id = 1, Label = "test"
            });
            viewModel.FinishCommand.Execute(null);

            A.CallTo(() => offlineTaskService.AddAsync(A <int> .Ignored, OfflineTask.OfflineTaskAction.EditTags, A <List <Tag> > .Ignored, A <List <Tag> > .Ignored)).MustHaveHappened(Repeated.Exactly.Twice);
        }
Esempio n. 3
0
        public void AddingMultipleItemsWithTagsDoesntAddThemToTheCurrentTagList()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                Items = new List <Item>()
                {
                    new Item()
                    {
                        Id = 1, Title = "First test"
                    },
                    new Item()
                    {
                        Id = 2, Title = "Second test"
                    },
                }
            };

            Assert.Equal(0, viewModel.Tags.Count);
            Assert.True(viewModel.TagsCountIsZero);
        }
Esempio n. 4
0
        public async Task AddingOneItemWithTagsDoesAddThemToTheCurrentTagList()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var item = new Item()
            {
                Id   = 1,
                Tags = new System.Collections.ObjectModel.ObservableCollection <Tag>()
                {
                    new Tag()
                    {
                        Id = 1, Label = "test"
                    },
                    new Tag()
                    {
                        Id = 2, Label = "test"
                    },
                    new Tag()
                    {
                        Id = 3, Label = "test"
                    },
                }
            };

            database.Insert(item);

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService);
            await viewModel.ActivateAsync(item.Id, new Dictionary <string, object>(), Data.Common.NavigationMode.New);

            Assert.Equal(3, viewModel.Tags.Count);
            Assert.False(viewModel.TagsCountIsZero);
        }
Esempio n. 5
0
        protected override DriverResult Editor(TagsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var model = new EditTagsViewModel();

            updater.TryUpdateModel(model, Prefix, null, null);

            var tagNames = TagHelpers.ParseCommaSeparatedTagNames(model.Tags);

            // as the tag names are used in the route directly, prevent them from having ASP.NET disallowed chars
            // c.f., http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

            var disallowedTags = tagNames.Where(x => DisalowedChars.Intersect(x).Any()).ToList();

            if (disallowedTags.Any())
            {
                _notifier.Warning(T("The tags \"{0}\" could not be added because they contain forbidden chars: {1}", String.Join(", ", disallowedTags), String.Join(", ", DisalowedChars)));
                tagNames = tagNames.Where(x => !disallowedTags.Contains(x)).ToList();
            }

            if (part.ContentItem.Id != 0)
            {
                _tagService.UpdateTagsForContentItem(part.ContentItem, tagNames);
            }

            return(ContentShape("Parts_Tags_Edit",
                                () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)));
        }
Esempio n. 6
0
        public async Task RemovingAnTagAndAddingAnotherExecutesTheProperActions()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var tagToRemove = new Tag()
            {
                Id = 2, Label = "test"
            };
            var tagToAdd = new Tag()
            {
                Id = 4, Label = "test"
            };
            var item = new Item()
            {
                Id   = 1,
                Tags = new System.Collections.ObjectModel.ObservableCollection <Tag>()
                {
                    new Tag()
                    {
                        Id = 1, Label = "test"
                    },
                    tagToRemove,
                    new Tag()
                    {
                        Id = 3, Label = "test"
                    },
                }
            };

            database.Insert(item);

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService);
            await viewModel.ActivateAsync(item.Id, new Dictionary <string, object>(), Data.Common.NavigationMode.New);

            Assert.Equal(3, viewModel.Tags.Count);

            viewModel.Tags.Add(tagToAdd);
            viewModel.Tags.Remove(tagToRemove);

            Assert.Equal(3, viewModel.Tags.Count);

            viewModel.FinishCommand.Execute(null);

            A.CallTo(() => offlineTaskService.AddAsync(A <int> .Ignored, OfflineTask.OfflineTaskAction.EditTags, A <List <Tag> > .That.Contains(tagToAdd), A <List <Tag> > .That.Contains(tagToRemove))).MustHaveHappened(Repeated.Exactly.Once);
            //A.CallTo(() => navigationService.GoBack()).MustHaveHappened();
        }
Esempio n. 7
0
        public void ParsingTheTagQueryWontAddEmptyOrSpaceStrings()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                TagQuery = ",  ,"
            };

            viewModel.TagSubmittedCommand.Execute(null);
            Assert.Equal(0, viewModel.Suggestions.Count);
        }
Esempio n. 8
0
        protected override DriverResult Editor(TagsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var model = new EditTagsViewModel();

            updater.TryUpdateModel(model, Prefix, null, null);

            var tagNames = TagHelpers.ParseCommaSeparatedTagNames(model.Tags);

            if (part.ContentItem.Id != 0)
            {
                _tagService.UpdateTagsForContentItem(part.ContentItem, tagNames);
            }

            return(ContentShape("Parts_Tags_Edit",
                                () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)));
        }
Esempio n. 9
0
        public async Task <IActionResult> EditTags([FromForm] EditTagsViewModel model)
        {
            // waiting the UpdateTags result to properly show the tags in the EditTagsView
            await Task.Delay(10);

            var tagNames = _mainRepository.GetTagNamesByProductId(model.ProductId).ToList();

            List <string> listOfProductTypes = (from pt in _mainRepository.GetAllProductTypes() orderby pt.Name select pt.Name).ToList();

            return(View("EditTagsView", new EditTagsViewModel
            {
                ProductId = model.ProductId,
                Tags = tagNames,
                ListOfProductTypes = listOfProductTypes,
                EditTagsSuccessful = true
            }));
        }
Esempio n. 10
0
        public void SubmittingWillClearTheQueryAfterwards()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                TagQuery = "test1"
            };

            viewModel.TagSubmittedCommand.Execute(null);
            Assert.Equal(1, viewModel.Tags.Count);

            Assert.False(viewModel.TagsCountIsZero);
            Assert.True(string.IsNullOrEmpty(viewModel.TagQuery));
        }
Esempio n. 11
0
        public void SubmittingASuggestionAddsItToTheTagsList()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService);
            var tagToTest = new Tag()
            {
                Id    = 1337,
                Label = "My suggestion tag"
            };

            viewModel.TagSubmittedCommand.Execute(tagToTest);

            Assert.Equal(1, viewModel.Tags.Count);
            Assert.Equal(tagToTest, viewModel.Tags[0]);
        }
Esempio n. 12
0
        public void SubmittingNothingParsesTheCurrentTagQueryWithoutDuplicates()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                TagQuery = "test1,test2,test2"
            };

            viewModel.TagSubmittedCommand.Execute(null);
            Assert.Equal(2, viewModel.Tags.Count);

            foreach (var tag in viewModel.Tags)
            {
                Assert.Matches("test[1-2]", tag.Label);
            }

            Assert.False(viewModel.TagsCountIsZero);
        }
Esempio n. 13
0
        public void EnteringATagQueryOnlyRespectsTheLastString()
        {
            var offlineTaskService = A.Fake <IOfflineTaskService>();
            var loggingService     = A.Fake <ILoggingService>();
            var database           = TestsHelper.CreateFakeDatabase();
            var navigationService  = A.Fake <INavigationService>();

            // Fake some tags
            database.Insert(new Tag()
            {
                Id = 0, Label = "random tag"
            });

            var viewModel = new EditTagsViewModel(offlineTaskService, loggingService, database, navigationService)
            {
                TagQuery = "test1,test2,random"
            };

            viewModel.TagQueryChangedCommand.Execute(null);

            Assert.Equal(1, viewModel.Suggestions.Count);
            Assert.Equal("random tag", viewModel.Suggestions[0].Label);
        }