Fixes all lowercase issue (#3302)

This commit is contained in:
Joe Milazzo 2024-10-24 05:36:34 -07:00 committed by GitHub
parent 184c766fa7
commit b65b78a736
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 377 additions and 65 deletions

View file

@ -6,7 +6,6 @@ using System.Threading.Tasks;
using API.Data;
using API.Data.Repositories;
using API.DTOs;
using API.DTOs.CollectionTags;
using API.DTOs.Metadata;
using API.DTOs.SeriesDetail;
using API.Entities;
@ -892,6 +891,62 @@ public class SeriesServiceTests : AbstractDbTest
}
/// <summary>
/// I'm not sure how I could handle this use-case
/// </summary>
//[Fact]
public async Task UpdateSeriesMetadata_ShouldUpdate_ExistingPeople_NewName()
{
await ResetDb(); // Resets the database for a clean state
// Arrange: Build series, metadata, and existing people
var series = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
series.Library = new LibraryBuilder("Test Library", LibraryType.Book).Build();
var existingPerson = new PersonBuilder("Existing Person").Build();
var existingWriter = new PersonBuilder("ExistingWriter").Build(); // Pre-existing writer
series.Metadata.People = new List<SeriesMetadataPeople>
{
new SeriesMetadataPeople { Person = existingWriter, Role = PersonRole.Writer },
new SeriesMetadataPeople { Person = new PersonBuilder("Existing Translator").Build(), Role = PersonRole.Translator },
new SeriesMetadataPeople { Person = new PersonBuilder("Existing Publisher 2").Build(), Role = PersonRole.Publisher }
};
_context.Series.Add(series);
_context.Person.Add(existingPerson);
await _context.SaveChangesAsync();
// Act: Update series metadata, attempting to update the writer to "Existing Writer"
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = series.Id, // Use the series ID
Writers = new List<PersonDto> { new() { Id = 0, Name = "Existing Writer" } }, // Trying to update writer's name
WriterLocked = true
}
});
// Assert: Ensure the operation was successful
Assert.True(success);
// Reload the series from the database
var updatedSeries = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(series.Id);
Assert.NotNull(updatedSeries.Metadata);
// Assert that the people list still contains the updated person with the new name
var updatedPerson = updatedSeries.Metadata.People.FirstOrDefault(p => p.Role == PersonRole.Writer)?.Person;
Assert.NotNull(updatedPerson); // Make sure the person exists
Assert.Equal("Existing Writer", updatedPerson.Name); // Check if the person's name was updated
// Assert that the publisher lock is still true
Assert.True(updatedSeries.Metadata.WriterLocked);
}
[Fact]
public async Task UpdateSeriesMetadata_ShouldRemoveExistingPerson()
{
@ -989,6 +1044,199 @@ public class SeriesServiceTests : AbstractDbTest
#endregion
#region UpdateGenres
[Fact]
public async Task UpdateSeriesMetadata_ShouldAddNewGenre_NoExistingGenres()
{
await ResetDb();
var s = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
s.Library = new LibraryBuilder("Test Lib", LibraryType.Book).Build();
_context.Series.Add(s);
await _context.SaveChangesAsync();
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = s.Id,
Genres = new List<GenreTagDto> {new () {Id = 0, Title = "New Genre"}},
},
});
Assert.True(success);
var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(s.Id);
Assert.NotNull(series.Metadata);
Assert.Contains("New Genre".SentenceCase(), series.Metadata.Genres.Select(g => g.Title));
Assert.False(series.Metadata.GenresLocked); // Ensure the lock is not activated unless specified.
}
[Fact]
public async Task UpdateSeriesMetadata_ShouldReplaceExistingGenres()
{
await ResetDb();
var s = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
s.Library = new LibraryBuilder("Test Lib", LibraryType.Book).Build();
var g = new GenreBuilder("Existing Genre").Build();
s.Metadata.Genres = new List<Genre> { g };
_context.Series.Add(s);
_context.Genre.Add(g);
await _context.SaveChangesAsync();
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = s.Id,
Genres = new List<GenreTagDto> { new() { Id = 0, Title = "New Genre" }},
},
});
Assert.True(success);
var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(s.Id);
Assert.NotNull(series.Metadata);
Assert.DoesNotContain("Existing Genre".SentenceCase(), series.Metadata.Genres.Select(g => g.Title));
Assert.Contains("New Genre".SentenceCase(), series.Metadata.Genres.Select(g => g.Title));
}
[Fact]
public async Task UpdateSeriesMetadata_ShouldRemoveAllGenres()
{
await ResetDb();
var s = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
s.Library = new LibraryBuilder("Test Lib", LibraryType.Book).Build();
var g = new GenreBuilder("Existing Genre").Build();
s.Metadata.Genres = new List<Genre> { g };
_context.Series.Add(s);
_context.Genre.Add(g);
await _context.SaveChangesAsync();
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = s.Id,
Genres = new List<GenreTagDto>(), // Removing all genres
},
});
Assert.True(success);
var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(s.Id);
Assert.NotNull(series.Metadata);
Assert.Empty(series.Metadata.Genres);
}
#endregion
#region UpdateTags
[Fact]
public async Task UpdateSeriesMetadata_ShouldAddNewTag_NoExistingTags()
{
await ResetDb();
var s = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
s.Library = new LibraryBuilder("Test Lib", LibraryType.Book).Build();
_context.Series.Add(s);
await _context.SaveChangesAsync();
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = s.Id,
Tags = new List<TagDto> { new() { Id = 0, Title = "New Tag" }},
},
});
Assert.True(success);
var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(s.Id);
Assert.NotNull(series.Metadata);
Assert.Contains("New Tag".SentenceCase(), series.Metadata.Tags.Select(t => t.Title));
}
[Fact]
public async Task UpdateSeriesMetadata_ShouldReplaceExistingTags()
{
await ResetDb();
var s = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
s.Library = new LibraryBuilder("Test Lib", LibraryType.Book).Build();
var t = new TagBuilder("Existing Tag").Build();
s.Metadata.Tags = new List<Tag> { t };
_context.Series.Add(s);
_context.Tag.Add(t);
await _context.SaveChangesAsync();
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = s.Id,
Tags = new List<TagDto> { new() { Id = 0, Title = "New Tag" }},
},
});
Assert.True(success);
var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(s.Id);
Assert.NotNull(series.Metadata);
Assert.DoesNotContain("Existing Tag".SentenceCase(), series.Metadata.Tags.Select(t => t.Title));
Assert.Contains("New Tag".SentenceCase(), series.Metadata.Tags.Select(t => t.Title));
}
[Fact]
public async Task UpdateSeriesMetadata_ShouldRemoveAllTags()
{
await ResetDb();
var s = new SeriesBuilder("Test")
.WithMetadata(new SeriesMetadataBuilder().Build())
.Build();
s.Library = new LibraryBuilder("Test Lib", LibraryType.Book).Build();
var t = new TagBuilder("Existing Tag").Build();
s.Metadata.Tags = new List<Tag> { t };
_context.Series.Add(s);
_context.Tag.Add(t);
await _context.SaveChangesAsync();
var success = await _seriesService.UpdateSeriesMetadata(new UpdateSeriesMetadataDto
{
SeriesMetadata = new SeriesMetadataDto
{
SeriesId = s.Id,
Tags = new List<TagDto>(), // Removing all tags
},
});
Assert.True(success);
var series = await _unitOfWork.SeriesRepository.GetSeriesByIdAsync(s.Id);
Assert.NotNull(series.Metadata);
Assert.Empty(series.Metadata.Tags);
}
#endregion
#region GetFirstChapterForMetadata
private static Series CreateSeriesMock()