Пример #1
0
        public void CopyNonEditableProperties(TagForEditContract contract, IUserPermissionContext permissionContext)
        {
            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext).ToArray();
            CanDelete            = contract.CanDelete;
            CurrentName          = contract.Name;
            Deleted = contract.Deleted;
            Id      = contract.Id;
            IsEmpty = contract.IsEmpty;
            Thumb   = contract.Thumb;
            UrlSlug = contract.UrlSlug;

            string GetTagTargetTypeName(TagTargetTypes t)
            {
                switch (t)
                {
                case TagTargetTypes.Nothing:
                    return("Nothing");

                case TagTargetTypes.All:
                    return("Anything");
                }
                return(string.Join(", ", EnumVal <EntryType> .Values.Where(e => e != EntryType.Undefined).Where(e => t.HasFlag((TagTargetTypes)e)).Select(e => Translate.EntryTypeNames[e])));
            }

            AllTagTargetTypes = new[] { TagTargetTypes.Album, TagTargetTypes.Artist, TagTargetTypes.Song, TagTargetTypes.Event }
            .ToDictionary(t => t, GetTagTargetTypeName);
        }
Пример #2
0
        public void Update_Name_DuplicateWithAnotherTag()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            updated.Names[0].Value = "MMD";

            _queries.Invoking(subject => subject.Update(updated, null)).Should().Throw <DuplicateTagNameException>();
        }
Пример #3
0
        public void Update_Name_DuplicateWithAnotherTag()
        {
            var updated = new TagForEditContract(tag, false, permissionContext);

            updated.Names[0].Value = "MMD";

            queries.Update(updated, null);
        }
Пример #4
0
        public void Update_Name_DuplicateTranslation()
        {
            var updated = new TagForEditContract(tag, false, permissionContext);

            updated.Names = updated.Names.Concat(new[] { new LocalizedStringWithIdContract {
                                                             Value = "Appearance Miku", Language = ContentLanguageSelection.Romaji
                                                         } }).ToArray();

            queries.Update(updated, null);
        }
Пример #5
0
        public void Update_Name_DuplicateTranslation()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            updated.Names = updated.Names.Concat(new[] { new LocalizedStringWithIdContract {
                                                             Value = "Appearance Miku", Language = ContentLanguageSelection.Romaji
                                                         } }).ToArray();

            _queries.Invoking(subject => subject.Update(updated, null)).Should().Throw <DuplicateTagNameException>();
        }
Пример #6
0
 public void CopyNonEditableProperties(TagForEditContract contract, IUserPermissionContext permissionContext)
 {
     AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext).ToArray();
     CanDelete            = contract.CanDelete;
     CurrentName          = contract.Name;
     Deleted = contract.Deleted;
     Id      = contract.Id;
     IsEmpty = contract.IsEmpty;
     Thumb   = contract.Thumb;
     UrlSlug = contract.UrlSlug;
 }
Пример #7
0
        public TagEdit(TagForEditContract contract)
        {
            ParamIs.NotNull(() => contract);

            AliasedTo    = contract.AliasedTo;
            CategoryName = contract.CategoryName;
            Description  = contract.Description;
            Name         = contract.Name;

            CopyNonEditableProperties(contract);
        }
Пример #8
0
        public void Update_Parent_Renamed()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            _tag2.TranslatedName.Default = "Api Miku";
            updated.Parent = new TagBaseContract(_tag2, ContentLanguagePreference.English);

            _queries.Update(updated, null);

            _tag.Parent.Should().Be(_tag2, "Parent");
            _tag2.Children.Contains(_tag).Should().BeTrue("Parent contains child tag");
        }
Пример #9
0
        public TagForEditContract GetTagForEdit(int id)
        {
            return(HandleQuery(session => {
                var inUse = session.Query <ArtistTagUsage>().Any(a => a.Tag.Id == id && !a.Artist.Deleted) ||
                            session.Query <AlbumTagUsage>().Any(a => a.Tag.Id == id && !a.Album.Deleted) ||
                            session.Query <SongTagUsage>().Any(a => a.Tag.Id == id && !a.Song.Deleted);

                var contract = new TagForEditContract(LoadTagById(session, id), !inUse, PermissionContext);

                return contract;
            }));
        }
Пример #10
0
        public void Update_Parent_Renamed()
        {
            var updated = new TagForEditContract(tag, false, permissionContext);

            tag2.TranslatedName.Default = "Api Miku";
            updated.Parent = new TagBaseContract(tag2, ContentLanguagePreference.English);

            queries.Update(updated, null);

            Assert.AreEqual(tag2, tag.Parent, "Parent");
            Assert.IsTrue(tag2.Children.Contains(tag), "Parent contains child tag");
        }
Пример #11
0
        private TagForEditContract Update(TagForEditContract contract)
        {
            var permissionContext = new FakePermissionContext(new UserWithPermissionsContract(Db.UserWithEditPermissions, ContentLanguagePreference.Default));

            return(context.RunTest(repository => {
                var queries = new TagQueries(repository, permissionContext, new FakeEntryLinkFactory(), new InMemoryImagePersister(), new InMemoryImagePersister(),
                                             new FakeUserIconFactory(), new EnumTranslations());

                var updated = queries.Update(contract, null);

                return queries.GetTagForEdit(updated.Id);
            }));
        }
Пример #12
0
        public void Update_SwapNameTranslations()
        {
            var contract = new TagForEditContract(Db.Tag2, false, userContext);

            contract.Names[0].Value = "ロック";             // Swap values
            contract.Names[1].Value = "rock";

            var result = Update(contract);

            Assert.AreEqual(2, result.Names.Length, "Number of names");
            var name = result.Names[0];

            Assert.AreEqual("ロック", name.Value, "Name value");
        }
Пример #13
0
        public TagForEditContract GetTagForEdit(string tagName)
        {
            ParamIs.NotNullOrEmpty(() => tagName);

            return(HandleQuery(session => {
                var inUse = session.Query <ArtistTagUsage>().Any(a => a.Tag.Name == tagName && !a.Artist.Deleted) ||
                            session.Query <AlbumTagUsage>().Any(a => a.Tag.Name == tagName && !a.Album.Deleted) ||
                            session.Query <SongTagUsage>().Any(a => a.Tag.Name == tagName && !a.Song.Deleted);

                var contract = new TagForEditContract(session.Load(tagName), !inUse);

                return contract;
            }));
        }
Пример #14
0
        public void Update_Name()
        {
            var updated = new TagForEditContract(tag, false, permissionContext);

            updated.Names[0].Value = "Api Miku";

            queries.Update(updated, null);

            Assert.AreEqual("Api Miku", tag.DefaultName, "EnglishName");

            var archivedVersion = GetArchivedVersion(tag);

            Assert.IsNotNull(archivedVersion, "Archived version was created");
            Assert.AreEqual(TagEditableFields.Names, archivedVersion.Diff.ChangedFields.Value, "Changed fields");
        }
Пример #15
0
        public TagForEditContract GetTagForEdit(string tagName)
        {
            ParamIs.NotNullOrEmpty(() => tagName);

            return(HandleQuery(session => {
                var inUse = session.Query <ArtistTagUsage>().Any(a => a.Tag.Name == tagName && !a.Artist.Deleted) ||
                            session.Query <AlbumTagUsage>().Any(a => a.Tag.Name == tagName && !a.Album.Deleted) ||
                            session.Query <SongTagUsage>().Any(a => a.Tag.Name == tagName && !a.Song.Deleted);

                var contract = new TagForEditContract(session.Load <Tag>(tagName),
                                                      session.Query <Tag>().Select(t => t.CategoryName).OrderBy(t => t).Distinct().ToArray(), !inUse);

                return contract;
            }));
        }
Пример #16
0
        public void Update_Parent_IgnoreSelf()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            updated.Parent = new TagBaseContract(_tag, ContentLanguagePreference.English);

            _queries.Update(updated, null);

            _tag.Parent.Should().BeNull("Parent");

            var archivedVersion = GetArchivedVersion(_tag);

            archivedVersion.Should().NotBeNull("Archived version was created");
            archivedVersion.Diff.ChangedFields.Value.Should().Be(TagEditableFields.Nothing, "Changed fields");
        }
Пример #17
0
        public void Update_Parent_IgnoreSelf()
        {
            var updated = new TagForEditContract(tag, false, permissionContext);

            updated.Parent = new TagBaseContract(tag, ContentLanguagePreference.English);

            queries.Update(updated, null);

            Assert.IsNull(tag.Parent, "Parent");

            var archivedVersion = GetArchivedVersion(tag);

            Assert.IsNotNull(archivedVersion, "Archived version was created");
            Assert.AreEqual(TagEditableFields.Nothing, archivedVersion.Diff.ChangedFields.Value, "Changed fields");
        }
Пример #18
0
        public TagEdit(TagForEditContract contract)
            : this()
        {
            ParamIs.NotNull(() => contract);

            AliasedTo    = contract.AliasedTo;
            CategoryName = contract.CategoryName;
            Description  = contract.Description;
            Name         = contract.Name;
            Parent       = contract.Parent;
            Status       = contract.Status;
            Thumb        = contract.Thumb;

            CopyNonEditableProperties(contract);
        }
Пример #19
0
        public void Update_Name()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            updated.Names[0].Value = "Api Miku";

            _queries.Update(updated, null);

            _tag.DefaultName.Should().Be("Api Miku", "EnglishName");

            var archivedVersion = GetArchivedVersion(_tag);

            archivedVersion.Should().NotBeNull("Archived version was created");
            archivedVersion.Diff.ChangedFields.Value.Should().Be(TagEditableFields.Names, "Changed fields");
        }
Пример #20
0
        public TagEditViewModel(TagForEditContract contract, IUserPermissionContext permissionContext)
        {
            ParamIs.NotNull(() => contract);

            CategoryName        = contract.CategoryName;
            DefaultNameLanguage = contract.DefaultNameLanguage;
            Description         = contract.Description;
            HideFromSuggestions = contract.HideFromSuggestions;
            Name     = contract.Name;
            Parent   = contract.Parent;
            Status   = contract.Status;
            Thumb    = contract.Thumb;
            WebLinks = contract.WebLinks;

            CopyNonEditableProperties(contract, permissionContext);
        }
Пример #21
0
        public void Update_Name_DuplicateKana()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext)
            {
                Names = new[] {
                    new LocalizedStringWithIdContract {
                        Value = "コノザマ", Language = ContentLanguageSelection.Japanese
                    },
                    new LocalizedStringWithIdContract {
                        Value = "このざま", Language = ContentLanguageSelection.Japanese
                    },
                }.ToArray()
            };

            _queries.Invoking(subject => subject.Update(updated, null)).Should().Throw <DuplicateTagNameException>();
        }
Пример #22
0
        public void Update_Name_DuplicateKana()
        {
            var updated = new TagForEditContract(tag, false, permissionContext)
            {
                Names = new[] {
                    new LocalizedStringWithIdContract {
                        Value = "コノザマ", Language = ContentLanguageSelection.Japanese
                    },
                    new LocalizedStringWithIdContract {
                        Value = "このざま", Language = ContentLanguageSelection.Japanese
                    },
                }.ToArray()
            };

            queries.Update(updated, null);
        }
Пример #23
0
        public void Update_Description()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            updated.Description = new EnglishTranslatedStringContract {
                Original = "mikumikudance.wikia.com/wiki/Miku_Hatsune_Appearance_(Mamama)", English = string.Empty
            };

            _queries.Update(updated, null);

            _tag.Description.Original.Should().Be(updated.Description.Original, "Description was updated");

            var archivedVersion = _repository.List <ArchivedTagVersion>().FirstOrDefault(a => a.Tag.Id == _tag.Id);

            archivedVersion.Should().NotBeNull("Archived version was created");
            archivedVersion.Diff.ChangedFields.Value.Should().Be(TagEditableFields.Description, "Changed fields");
        }
Пример #24
0
        public void Update_ReplaceName()
        {
            var contract = new TagForEditContract(Db.Tag, false, userContext);

            contract.Names[0] = new LocalizedStringWithIdContract {
                Value = "electronic", Language = ContentLanguageSelection.Japanese
            };

            var result = Update(contract);

            Assert.AreEqual(1, result.Names.Length, "Number of names");
            var name = result.Names[0];

            Assert.AreEqual(ContentLanguageSelection.Japanese, name.Language, "Name language");
            Assert.AreEqual("electronic", name.Value, "Name value");
            Assert.AreNotEqual(0, name.Id, "Id was assigned");
        }
Пример #25
0
        public void Update_Image()
        {
            var updated = new TagForEditContract(tag, false, permissionContext);

            using (var stream = TestImage()) {
                queries.Update(updated, new UploadedFileContract {
                    Mime = MediaTypeNames.Image.Jpeg, Stream = stream
                });
            }

            var thumb = new EntryThumb(tag, MediaTypeNames.Image.Jpeg, ImagePurpose.Main);

            Assert.IsTrue(imagePersister.HasImage(thumb, ImageSize.Original), "Original image was saved");
            Assert.IsTrue(imagePersister.HasImage(thumb, ImageSize.SmallThumb), "Small thumbnail was saved");

            var archivedVersion = GetArchivedVersion(tag);

            Assert.IsNotNull(archivedVersion, "Archived version was created");
            Assert.AreEqual(TagEditableFields.Picture, archivedVersion.Diff.ChangedFields.Value, "Changed fields");
        }
Пример #26
0
        public void Update_Image()
        {
            var updated = new TagForEditContract(_tag, false, _permissionContext);

            using (var stream = TestImage())
            {
                _queries.Update(updated, new UploadedFileContract {
                    Mime = MediaTypeNames.Image.Jpeg, Stream = stream
                });
            }

            var thumb = new EntryThumb(_tag, MediaTypeNames.Image.Jpeg, ImagePurpose.Main);

            _imagePersister.HasImage(thumb, ImageSize.Original).Should().BeTrue("Original image was saved");
            _imagePersister.HasImage(thumb, ImageSize.SmallThumb).Should().BeTrue("Small thumbnail was saved");

            var archivedVersion = GetArchivedVersion(_tag);

            archivedVersion.Should().NotBeNull("Archived version was created");
            archivedVersion.Diff.ChangedFields.Value.Should().Be(TagEditableFields.Picture, "Changed fields");
        }
Пример #27
0
 public void CopyNonEditableProperties(TagForEditContract contract)
 {
     AllCategoryNames = contract.AllCategoryNames;
     IsEmpty          = contract.IsEmpty;
     Thumb            = contract.Thumb;
 }
Пример #28
0
        public TagBaseContract Update(TagForEditContract contract, UploadedFileContract uploadedImage)
        {
            ParamIs.NotNull(() => contract);

            PermissionContext.VerifyPermission(PermissionToken.EditTags);

            return(repository.HandleTransaction(ctx => {
                var tag = LoadTagById(ctx, contract.Id);

                permissionContext.VerifyEntryEdit(tag);

                var diff = new TagDiff();

                if (tag.CategoryName != contract.CategoryName)
                {
                    diff.CategoryName.Set();
                }

                diff.Description.Set(tag.Description.CopyFrom(contract.Description));

                if (tag.HideFromSuggestions != contract.HideFromSuggestions)
                {
                    diff.HideFromSuggestions.Set();
                }

                if (tag.Targets != contract.Targets)
                {
                    diff.Targets.Set();
                }

                if (tag.TranslatedName.DefaultLanguage != contract.DefaultNameLanguage)
                {
                    tag.TranslatedName.DefaultLanguage = contract.DefaultNameLanguage;
                    diff.OriginalName.Set();
                }

                var nameDiff = SyncNames(ctx.OfType <TagName>(), tag, contract.Names);

                if (nameDiff.Changed)
                {
                    diff.Names.Set();
                }

                if (!Tag.Equals(tag.Parent, contract.Parent))
                {
                    var newParent = GetRealTag(ctx, contract.Parent, tag);

                    if (!Equals(newParent, tag.Parent))
                    {
                        diff.Parent.Set();
                        tag.SetParent(newParent);
                    }
                }

                var relatedTagsDiff = tag.SyncRelatedTags(contract.RelatedTags, tagId => ctx.Load(tagId));
                ctx.Sync(relatedTagsDiff);
                diff.RelatedTags.Set(relatedTagsDiff.Changed);

                var webLinkDiff = tag.WebLinks.Sync(contract.WebLinks, tag);
                ctx.OfType <TagWebLink>().Sync(webLinkDiff);

                if (webLinkDiff.Changed)
                {
                    diff.WebLinks.Set();
                }

                if (tag.Status != contract.Status)
                {
                    diff.Status.Set();
                }

                tag.CategoryName = contract.CategoryName;
                tag.HideFromSuggestions = contract.HideFromSuggestions;
                tag.Status = contract.Status;
                tag.Targets = contract.Targets;

                if (uploadedImage != null)
                {
                    diff.Picture.Set();

                    var thumb = new EntryThumb(tag, uploadedImage.Mime);
                    tag.Thumb = thumb;
                    var thumbGenerator = new ImageThumbGenerator(imagePersister);
                    thumbGenerator.GenerateThumbsAndMoveImage(uploadedImage.Stream, thumb, Tag.ImageSizes, originalSize: Constants.RestrictedImageOriginalSize);
                }

                var logStr = string.Format("updated properties for tag {0} ({1})", entryLinkFactory.CreateEntryLink(tag), diff.ChangedFieldsString);
                ctx.AuditLogger.AuditLog(logStr);

                var archived = Archive(ctx, tag, diff, EntryEditEvent.Updated, contract.UpdateNotes);
                AddEntryEditedEntry(ctx.OfType <ActivityEntry>(), tag, EntryEditEvent.Updated, archived);

                ctx.Update(tag);

                return new TagBaseContract(tag, LanguagePreference);
            }));
        }
Пример #29
0
 public void CopyNonEditableProperties(TagForEditContract contract)
 {
     IsEmpty = contract.IsEmpty;
     Thumb   = contract.Thumb;
 }