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); }
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>(); }
public void Update_Name_DuplicateWithAnotherTag() { var updated = new TagForEditContract(tag, false, permissionContext); updated.Names[0].Value = "MMD"; queries.Update(updated, null); }
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); }
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>(); }
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; }
public TagEdit(TagForEditContract contract) { ParamIs.NotNull(() => contract); AliasedTo = contract.AliasedTo; CategoryName = contract.CategoryName; Description = contract.Description; Name = contract.Name; CopyNonEditableProperties(contract); }
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"); }
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; })); }
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"); }
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); })); }
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"); }
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; })); }
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"); }
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; })); }
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"); }
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"); }
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); }
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"); }
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); }
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>(); }
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); }
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"); }
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"); }
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"); }
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"); }
public void CopyNonEditableProperties(TagForEditContract contract) { AllCategoryNames = contract.AllCategoryNames; IsEmpty = contract.IsEmpty; Thumb = contract.Thumb; }
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); })); }
public void CopyNonEditableProperties(TagForEditContract contract) { IsEmpty = contract.IsEmpty; Thumb = contract.Thumb; }