Update tests with guids

This commit is contained in:
Zoe Roux 2023-11-28 23:00:35 +01:00
parent 73f4187087
commit b2e0363594
10 changed files with 147 additions and 293 deletions

View File

@ -186,7 +186,6 @@ namespace Kyoo.Abstractions.Models
// foreach (PeopleRole link in People) // foreach (PeopleRole link in People)
// link.Show = this; // link.Show = this;
// } // }
if (Seasons != null) if (Seasons != null)
{ {
foreach (Season season in Seasons) foreach (Season season in Seasons)

View File

@ -85,7 +85,7 @@ namespace Kyoo.Tests.Database
}; };
await _repository.Create(collection); await _repository.Create(collection);
Collection retrieved = await _repository.Get(2); Collection retrieved = await _repository.Get(2.AsGuid());
Assert.Equal(2, retrieved.ExternalId.Count); Assert.Equal(2, retrieved.ExternalId.Count);
KAssert.DeepEqual(collection.ExternalId.First(), retrieved.ExternalId.First()); KAssert.DeepEqual(collection.ExternalId.First(), retrieved.ExternalId.First());
KAssert.DeepEqual(collection.ExternalId.Last(), retrieved.ExternalId.Last()); KAssert.DeepEqual(collection.ExternalId.Last(), retrieved.ExternalId.Last());

View File

@ -53,36 +53,36 @@ namespace Kyoo.Tests.Database
[Fact] [Fact]
public async Task SlugEditTest() public async Task SlugEditTest()
{ {
Episode episode = await _repository.Get(1); Episode episode = await _repository.Get(1.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e1", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e1", episode.Slug);
await Repositories.LibraryManager.Shows.Patch(episode.ShowId, (x) => await Repositories.LibraryManager.Shows.Patch(episode.ShowId, (x) =>
{ {
x.Slug = "new-slug"; x.Slug = "new-slug";
return Task.FromResult(true); return Task.FromResult(true);
}); });
episode = await _repository.Get(1); episode = await _repository.Get(1.AsGuid());
Assert.Equal("new-slug-s1e1", episode.Slug); Assert.Equal("new-slug-s1e1", episode.Slug);
} }
[Fact] [Fact]
public async Task SeasonNumberEditTest() public async Task SeasonNumberEditTest()
{ {
Episode episode = await _repository.Get(1); Episode episode = await _repository.Get(1.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e1", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e1", episode.Slug);
episode = await _repository.Patch(1, (x) => episode = await _repository.Patch(1.AsGuid(), (x) =>
{ {
x.SeasonNumber = 2; x.SeasonNumber = 2;
return Task.FromResult(true); return Task.FromResult(true);
}); });
Assert.Equal($"{TestSample.Get<Show>().Slug}-s2e1", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s2e1", episode.Slug);
episode = await _repository.Get(1); episode = await _repository.Get(1.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-s2e1", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s2e1", episode.Slug);
} }
[Fact] [Fact]
public async Task EpisodeNumberEditTest() public async Task EpisodeNumberEditTest()
{ {
Episode episode = await _repository.Get(1); Episode episode = await _repository.Get(1.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e1", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e1", episode.Slug);
episode = await Repositories.LibraryManager.Episodes.Patch(episode.Id, (x) => episode = await Repositories.LibraryManager.Episodes.Patch(episode.Id, (x) =>
{ {
@ -90,7 +90,7 @@ namespace Kyoo.Tests.Database
return Task.FromResult(true); return Task.FromResult(true);
}); });
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug);
episode = await _repository.Get(1); episode = await _repository.Get(1.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug);
} }
@ -98,7 +98,7 @@ namespace Kyoo.Tests.Database
public async Task EpisodeCreationSlugTest() public async Task EpisodeCreationSlugTest()
{ {
Episode model = TestSample.Get<Episode>(); Episode model = TestSample.Get<Episode>();
model.Id = 0; model.Id = 0.AsGuid();
model.ShowId = TestSample.Get<Show>().Id; model.ShowId = TestSample.Get<Show>().Id;
model.SeasonNumber = 2; model.SeasonNumber = 2;
model.EpisodeNumber = 4; model.EpisodeNumber = 4;
@ -129,7 +129,7 @@ namespace Kyoo.Tests.Database
x.Slug = "new-slug"; x.Slug = "new-slug";
return Task.FromResult(true); return Task.FromResult(true);
}); });
episode = await _repository.Get(2); episode = await _repository.Get(2.AsGuid());
Assert.Equal($"new-slug-3", episode.Slug); Assert.Equal($"new-slug-3", episode.Slug);
} }
@ -137,13 +137,13 @@ namespace Kyoo.Tests.Database
public async Task AbsoluteNumberEditTest() public async Task AbsoluteNumberEditTest()
{ {
await _repository.Create(TestSample.GetAbsoluteEpisode()); await _repository.Create(TestSample.GetAbsoluteEpisode());
Episode episode = await _repository.Patch(2, (x) => Episode episode = await _repository.Patch(2.AsGuid(), (x) =>
{ {
x.AbsoluteNumber = 56; x.AbsoluteNumber = 56;
return Task.FromResult(true); return Task.FromResult(true);
}); });
Assert.Equal($"{TestSample.Get<Show>().Slug}-56", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-56", episode.Slug);
episode = await _repository.Get(2); episode = await _repository.Get(2.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-56", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-56", episode.Slug);
} }
@ -151,26 +151,26 @@ namespace Kyoo.Tests.Database
public async Task AbsoluteToNormalEditTest() public async Task AbsoluteToNormalEditTest()
{ {
await _repository.Create(TestSample.GetAbsoluteEpisode()); await _repository.Create(TestSample.GetAbsoluteEpisode());
Episode episode = await _repository.Patch(2, (x) => Episode episode = await _repository.Patch(2.AsGuid(), (x) =>
{ {
x.SeasonNumber = 1; x.SeasonNumber = 1;
x.EpisodeNumber = 2; x.EpisodeNumber = 2;
return Task.FromResult(true); return Task.FromResult(true);
}); });
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug);
episode = await _repository.Get(2); episode = await _repository.Get(2.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-s1e2", episode.Slug);
} }
[Fact] [Fact]
public async Task NormalToAbsoluteEditTest() public async Task NormalToAbsoluteEditTest()
{ {
Episode episode = await _repository.Get(1); Episode episode = await _repository.Get(1.AsGuid());
episode.SeasonNumber = null; episode.SeasonNumber = null;
episode.AbsoluteNumber = 12; episode.AbsoluteNumber = 12;
episode = await _repository.Edit(episode); episode = await _repository.Edit(episode);
Assert.Equal($"{TestSample.Get<Show>().Slug}-12", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-12", episode.Slug);
episode = await _repository.Get(1); episode = await _repository.Get(1.AsGuid());
Assert.Equal($"{TestSample.Get<Show>().Slug}-12", episode.Slug); Assert.Equal($"{TestSample.Get<Show>().Slug}-12", episode.Slug);
} }
@ -193,7 +193,7 @@ namespace Kyoo.Tests.Database
}; };
await _repository.Create(value); await _repository.Create(value);
Episode retrieved = await _repository.Get(2); Episode retrieved = await _repository.Get(2.AsGuid());
Assert.Equal(2, retrieved.ExternalId.Count); Assert.Equal(2, retrieved.ExternalId.Count);
KAssert.DeepEqual(value.ExternalId.First(), retrieved.ExternalId.First()); KAssert.DeepEqual(value.ExternalId.First(), retrieved.ExternalId.First());
KAssert.DeepEqual(value.ExternalId.Last(), retrieved.ExternalId.Last()); KAssert.DeepEqual(value.ExternalId.Last(), retrieved.ExternalId.Last());
@ -278,7 +278,7 @@ namespace Kyoo.Tests.Database
public async Task SearchTest(string query) public async Task SearchTest(string query)
{ {
Episode value = TestSample.Get<Episode>(); Episode value = TestSample.Get<Episode>();
value.Id = 0; value.Id = 0.AsGuid();
value.Name = "This is a test super title"; value.Name = "This is a test super title";
value.EpisodeNumber = 56; value.EpisodeNumber = 56;
await _repository.Create(value); await _repository.Create(value);
@ -293,7 +293,7 @@ namespace Kyoo.Tests.Database
await _repository.Delete(TestSample.Get<Episode>()); await _repository.Delete(TestSample.Get<Episode>());
Episode expected = TestSample.Get<Episode>(); Episode expected = TestSample.Get<Episode>();
expected.Id = 0; expected.Id = 0.AsGuid();
expected.ShowId = (await Repositories.LibraryManager.Shows.Create(TestSample.Get<Show>())).Id; expected.ShowId = (await Repositories.LibraryManager.Shows.Create(TestSample.Get<Show>())).Id;
expected.SeasonId = (await Repositories.LibraryManager.Seasons.Create(TestSample.Get<Season>())).Id; expected.SeasonId = (await Repositories.LibraryManager.Seasons.Create(TestSample.Get<Season>())).Id;
await _repository.Create(expected); await _repository.Create(expected);

View File

@ -1,161 +0,0 @@
// Kyoo - A portable and vast media library solution.
// Copyright (c) Kyoo.
//
// See AUTHORS.md and LICENSE file in the project root for full license information.
//
// Kyoo is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// Kyoo is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models;
using Kyoo.Postgresql;
using Microsoft.EntityFrameworkCore;
using Xunit;
using Xunit.Abstractions;
namespace Kyoo.Tests.Database
{
namespace PostgreSQL
{
[Collection(nameof(Postgresql))]
public class PeopleTests : APeopleTests
{
public PeopleTests(PostgresFixture postgres, ITestOutputHelper output)
: base(new RepositoryActivator(output, postgres)) { }
}
}
public abstract class APeopleTests : RepositoryTests<People>
{
private readonly IRepository<People> _repository;
protected APeopleTests(RepositoryActivator repositories)
: base(repositories)
{
_repository = Repositories.LibraryManager.People;
}
[Fact]
public async Task CreateWithExternalIdTest()
{
People value = TestSample.GetNew<People>();
value.ExternalId = new Dictionary<string, MetadataId>
{
["2"] = new()
{
Link = "link",
DataId = "id"
},
["1"] = new()
{
Link = "new-provider-link",
DataId = "new-id"
}
};
await _repository.Create(value);
People retrieved = await _repository.Get(2);
Assert.Equal(2, retrieved.ExternalId.Count);
KAssert.DeepEqual(value.ExternalId.First(), retrieved.ExternalId.First());
KAssert.DeepEqual(value.ExternalId.Last(), retrieved.ExternalId.Last());
}
[Fact]
public async Task EditTest()
{
People value = await _repository.Get(TestSample.Get<People>().Slug);
value.Name = "New Name";
value.Poster = new Image("poster");
await _repository.Edit(value);
await using DatabaseContext database = Repositories.Context.New();
People retrieved = await database.People.FirstAsync();
KAssert.DeepEqual(value, retrieved);
}
[Fact]
public async Task EditMetadataTest()
{
People value = await _repository.Get(TestSample.Get<People>().Slug);
value.ExternalId = new Dictionary<string, MetadataId>
{
["toto"] = new()
{
Link = "link",
DataId = "id"
},
};
await _repository.Edit(value);
await using DatabaseContext database = Repositories.Context.New();
People retrieved = await database.People.FirstAsync();
KAssert.DeepEqual(value, retrieved);
}
[Fact]
public async Task AddMetadataTest()
{
People value = await _repository.Get(TestSample.Get<People>().Slug);
value.ExternalId = new Dictionary<string, MetadataId>
{
["1"] = new()
{
Link = "link",
DataId = "id"
},
};
await _repository.Edit(value);
{
await using DatabaseContext database = Repositories.Context.New();
People retrieved = await database.People.FirstAsync();
KAssert.DeepEqual(value, retrieved);
}
value.ExternalId.Add("toto", new MetadataId
{
Link = "link",
DataId = "id"
});
await _repository.Edit(value);
{
await using DatabaseContext database = Repositories.Context.New();
People retrieved = await database.People.FirstAsync();
KAssert.DeepEqual(value, retrieved);
}
}
[Theory]
[InlineData("Me")]
[InlineData("me")]
[InlineData("na")]
public async Task SearchTest(string query)
{
People value = new()
{
Slug = "slug",
Name = "name",
};
await _repository.Create(value);
ICollection<People> ret = await _repository.Search(query);
KAssert.DeepEqual(value, ret.First());
}
}
}

View File

@ -51,21 +51,21 @@ namespace Kyoo.Tests.Database
[Fact] [Fact]
public async Task SlugEditTest() public async Task SlugEditTest()
{ {
Season season = await _repository.Get(1); Season season = await _repository.Get(1.AsGuid());
Assert.Equal("anohana-s1", season.Slug); Assert.Equal("anohana-s1", season.Slug);
await Repositories.LibraryManager.Shows.Patch(season.ShowId, (x) => await Repositories.LibraryManager.Shows.Patch(season.ShowId, (x) =>
{ {
x.Slug = "new-slug"; x.Slug = "new-slug";
return Task.FromResult(true); return Task.FromResult(true);
}); });
season = await _repository.Get(1); season = await _repository.Get(1.AsGuid());
Assert.Equal("new-slug-s1", season.Slug); Assert.Equal("new-slug-s1", season.Slug);
} }
[Fact] [Fact]
public async Task SeasonNumberEditTest() public async Task SeasonNumberEditTest()
{ {
Season season = await _repository.Get(1); Season season = await _repository.Get(1.AsGuid());
Assert.Equal("anohana-s1", season.Slug); Assert.Equal("anohana-s1", season.Slug);
await _repository.Patch(season.Id, (x) => await _repository.Patch(season.Id, (x) =>
{ {
@ -73,7 +73,7 @@ namespace Kyoo.Tests.Database
return Task.FromResult(true); return Task.FromResult(true);
} }
); );
season = await _repository.Get(1); season = await _repository.Get(1.AsGuid());
Assert.Equal("anohana-s2", season.Slug); Assert.Equal("anohana-s2", season.Slug);
} }
@ -107,7 +107,7 @@ namespace Kyoo.Tests.Database
}; };
await _repository.Create(season); await _repository.Create(season);
Season retrieved = await _repository.Get(2); Season retrieved = await _repository.Get(2.AsGuid());
Assert.Equal(2, retrieved.ExternalId.Count); Assert.Equal(2, retrieved.ExternalId.Count);
KAssert.DeepEqual(season.ExternalId.First(), retrieved.ExternalId.First()); KAssert.DeepEqual(season.ExternalId.First(), retrieved.ExternalId.First());
KAssert.DeepEqual(season.ExternalId.Last(), retrieved.ExternalId.Last()); KAssert.DeepEqual(season.ExternalId.Last(), retrieved.ExternalId.Last());
@ -194,7 +194,7 @@ namespace Kyoo.Tests.Database
Season value = new() Season value = new()
{ {
Name = "This is a test super title", Name = "This is a test super title",
ShowId = 1 ShowId = 1.AsGuid()
}; };
await _repository.Create(value); await _repository.Create(value);
ICollection<Season> ret = await _repository.Search(query); ICollection<Season> ret = await _repository.Search(query);

View File

@ -19,7 +19,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using FluentAssertions;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Postgresql; using Kyoo.Postgresql;
@ -132,40 +131,40 @@ namespace Kyoo.Tests.Database
Assert.Equal(value.Aliases, show.Aliases); Assert.Equal(value.Aliases, show.Aliases);
} }
[Fact] // [Fact]
public async Task EditPeopleTest() // public async Task EditPeopleTest()
{ // {
Show value = await _repository.Get(TestSample.Get<Show>().Slug); // Show value = await _repository.Get(TestSample.Get<Show>().Slug);
value.People = new[] // value.People = new[]
{ // {
new PeopleRole // new PeopleRole
{ // {
Show = value, // Show = value,
People = TestSample.Get<People>(), // People = TestSample.Get<People>(),
ForPeople = false, // ForPeople = false,
Type = "Actor", // Type = "Actor",
Role = "NiceCharacter" // Role = "NiceCharacter"
} // }
}; // };
Show edited = await _repository.Edit(value); // Show edited = await _repository.Edit(value);
//
Assert.Equal(value.Slug, edited.Slug); // Assert.Equal(value.Slug, edited.Slug);
Assert.Equal(edited.People!.First().ShowID, value.Id); // Assert.Equal(edited.People!.First().ShowID, value.Id);
Assert.Equal( // Assert.Equal(
value.People.Select(x => new { x.Role, x.Slug, x.People.Name }), // value.People.Select(x => new { x.Role, x.Slug, x.People.Name }),
edited.People.Select(x => new { x.Role, x.Slug, x.People.Name })); // edited.People.Select(x => new { x.Role, x.Slug, x.People.Name }));
//
await using DatabaseContext database = Repositories.Context.New(); // await using DatabaseContext database = Repositories.Context.New();
Show show = await database.Shows // Show show = await database.Shows
.Include(x => x.People) // .Include(x => x.People)
.ThenInclude(x => x.People) // .ThenInclude(x => x.People)
.FirstAsync(); // .FirstAsync();
//
Assert.Equal(value.Slug, show.Slug); // Assert.Equal(value.Slug, show.Slug);
Assert.Equal( // Assert.Equal(
value.People.Select(x => new { x.Role, x.Slug, x.People.Name }), // value.People.Select(x => new { x.Role, x.Slug, x.People.Name }),
show.People!.Select(x => new { x.Role, x.Slug, x.People.Name })); // show.People!.Select(x => new { x.Role, x.Slug, x.People.Name }));
} // }
[Fact] [Fact]
public async Task EditExternalIDsTest() public async Task EditExternalIDsTest()
@ -194,7 +193,7 @@ namespace Kyoo.Tests.Database
public async Task CreateWithRelationsTest() public async Task CreateWithRelationsTest()
{ {
Show expected = TestSample.Get<Show>(); Show expected = TestSample.Get<Show>();
expected.Id = 0; expected.Id = 0.AsGuid();
expected.Slug = "created-relation-test"; expected.Slug = "created-relation-test";
expected.ExternalId = new Dictionary<string, MetadataId> expected.ExternalId = new Dictionary<string, MetadataId>
{ {
@ -204,44 +203,44 @@ namespace Kyoo.Tests.Database
} }
}; };
expected.Genres = new List<Genre>() { Genre.Action }; expected.Genres = new List<Genre>() { Genre.Action };
expected.People = new[] // expected.People = new[]
{ // {
new PeopleRole // new PeopleRole
{ // {
People = TestSample.Get<People>(), // People = TestSample.Get<People>(),
Show = expected, // Show = expected,
ForPeople = false, // ForPeople = false,
Role = "actor", // Role = "actor",
Type = "actor" // Type = "actor"
} // }
}; // };
expected.Studio = new Studio("studio"); expected.Studio = new Studio("studio");
Show created = await _repository.Create(expected); Show created = await _repository.Create(expected);
KAssert.DeepEqual(expected, created); KAssert.DeepEqual(expected, created);
await using DatabaseContext context = Repositories.Context.New(); await using DatabaseContext context = Repositories.Context.New();
Show retrieved = await context.Shows Show retrieved = await context.Shows
.Include(x => x.People) // .Include(x => x.People)
.ThenInclude(x => x.People) // .ThenInclude(x => x.People)
.Include(x => x.Studio) .Include(x => x.Studio)
.FirstAsync(x => x.Id == created.Id); .FirstAsync(x => x.Id == created.Id);
retrieved.People.ForEach(x => // retrieved.People.ForEach(x =>
{ // {
x.Show = null; // x.Show = null;
x.People.Roles = null; // x.People.Roles = null;
x.People.Poster = null; // x.People.Poster = null;
x.People.Thumbnail = null; // x.People.Thumbnail = null;
x.People.Logo = null; // x.People.Logo = null;
}); // });
retrieved.Studio!.Shows = null; retrieved.Studio!.Shows = null;
expected.People.ForEach(x => // expected.People.ForEach(x =>
{ // {
x.Show = null; // x.Show = null;
x.People.Roles = null; // x.People.Roles = null;
x.People.Poster = null; // x.People.Poster = null;
x.People.Thumbnail = null; // x.People.Thumbnail = null;
x.People.Logo = null; // x.People.Logo = null;
}); // });
KAssert.DeepEqual(retrieved, expected); KAssert.DeepEqual(retrieved, expected);
} }
@ -250,7 +249,7 @@ namespace Kyoo.Tests.Database
public async Task CreateWithExternalID() public async Task CreateWithExternalID()
{ {
Show expected = TestSample.Get<Show>(); Show expected = TestSample.Get<Show>();
expected.Id = 0; expected.Id = 0.AsGuid();
expected.Slug = "created-relation-test"; expected.Slug = "created-relation-test";
expected.ExternalId = new Dictionary<string, MetadataId> expected.ExternalId = new Dictionary<string, MetadataId>
{ {
@ -272,7 +271,7 @@ namespace Kyoo.Tests.Database
public async Task SlugDuplicationTest() public async Task SlugDuplicationTest()
{ {
Show test = TestSample.Get<Show>(); Show test = TestSample.Get<Show>();
test.Id = 0; test.Id = 0.AsGuid();
test.Slug = "300"; test.Slug = "300";
Show created = await _repository.Create(test); Show created = await _repository.Create(test);
Assert.Equal("300!", created.Slug); Assert.Equal("300!", created.Slug);

View File

@ -31,7 +31,7 @@ namespace Kyoo.Tests
typeof(Collection), typeof(Collection),
() => new Collection () => new Collection
{ {
Id = 2, Id = 2.AsGuid(),
Slug = "new-collection", Slug = "new-collection",
Name = "New Collection", Name = "New Collection",
Overview = "A collection created by new sample", Overview = "A collection created by new sample",
@ -42,7 +42,7 @@ namespace Kyoo.Tests
typeof(Show), typeof(Show),
() => new Show () => new Show
{ {
Id = 2, Id = 2.AsGuid(),
Slug = "new-show", Slug = "new-show",
Name = "New Show", Name = "New Show",
Overview = "overview", Overview = "overview",
@ -59,8 +59,8 @@ namespace Kyoo.Tests
typeof(Season), typeof(Season),
() => new Season () => new Season
{ {
Id = 2, Id = 2.AsGuid(),
ShowId = 1, ShowId = 1.AsGuid(),
ShowSlug = Get<Show>().Slug, ShowSlug = Get<Show>().Slug,
Name = "New season", Name = "New season",
Overview = "New overview", Overview = "New overview",
@ -74,10 +74,10 @@ namespace Kyoo.Tests
typeof(Episode), typeof(Episode),
() => new Episode () => new Episode
{ {
Id = 2, Id = 2.AsGuid(),
ShowId = 1, ShowId = 1.AsGuid(),
ShowSlug = Get<Show>().Slug, ShowSlug = Get<Show>().Slug,
SeasonId = 1, SeasonId = 1.AsGuid(),
SeasonNumber = Get<Season>().SeasonNumber, SeasonNumber = Get<Season>().SeasonNumber,
EpisodeNumber = 3, EpisodeNumber = 3,
AbsoluteNumber = 4, AbsoluteNumber = 4,
@ -92,7 +92,7 @@ namespace Kyoo.Tests
typeof(People), typeof(People),
() => new People () => new People
{ {
Id = 2, Id = 2.AsGuid(),
Slug = "new-person-name", Slug = "new-person-name",
Name = "New person name", Name = "New person name",
Logo = new Image("Old Logo"), Logo = new Image("Old Logo"),
@ -107,7 +107,7 @@ namespace Kyoo.Tests
typeof(Collection), typeof(Collection),
() => new Collection () => new Collection
{ {
Id = 1, Id = 1.AsGuid(),
Slug = "collection", Slug = "collection",
Name = "Collection", Name = "Collection",
Overview = "A nice collection for tests", Overview = "A nice collection for tests",
@ -118,7 +118,7 @@ namespace Kyoo.Tests
typeof(Show), typeof(Show),
() => new Show () => new Show
{ {
Id = 1, Id = 1.AsGuid(),
Slug = "anohana", Slug = "anohana",
Name = "Anohana: The Flower We Saw That Day", Name = "Anohana: The Flower We Saw That Day",
Aliases = new List<string> Aliases = new List<string>
@ -131,7 +131,7 @@ namespace Kyoo.Tests
"In time, however, these childhood friends drifted apart, and when they became high " + "In time, however, these childhood friends drifted apart, and when they became high " +
"school students, they had long ceased to think of each other as friends.", "school students, they had long ceased to think of each other as friends.",
Status = Status.Finished, Status = Status.Finished,
StudioId = 1, StudioId = 1.AsGuid(),
StartAir = new DateTime(2011, 1, 1).ToUniversalTime(), StartAir = new DateTime(2011, 1, 1).ToUniversalTime(),
EndAir = new DateTime(2011, 1, 1).ToUniversalTime(), EndAir = new DateTime(2011, 1, 1).ToUniversalTime(),
Poster = new Image("Poster"), Poster = new Image("Poster"),
@ -144,9 +144,9 @@ namespace Kyoo.Tests
typeof(Season), typeof(Season),
() => new Season () => new Season
{ {
Id = 1, Id = 1.AsGuid(),
ShowSlug = "anohana", ShowSlug = "anohana",
ShowId = 1, ShowId = 1.AsGuid(),
SeasonNumber = 1, SeasonNumber = 1,
Name = "Season 1", Name = "Season 1",
Overview = "The first season", Overview = "The first season",
@ -161,10 +161,10 @@ namespace Kyoo.Tests
typeof(Episode), typeof(Episode),
() => new Episode () => new Episode
{ {
Id = 1, Id = 1.AsGuid(),
ShowSlug = "anohana", ShowSlug = "anohana",
ShowId = 1, ShowId = 1.AsGuid(),
SeasonId = 1, SeasonId = 1.AsGuid(),
SeasonNumber = 1, SeasonNumber = 1,
EpisodeNumber = 1, EpisodeNumber = 1,
AbsoluteNumber = 1, AbsoluteNumber = 1,
@ -181,7 +181,7 @@ namespace Kyoo.Tests
typeof(People), typeof(People),
() => new People () => new People
{ {
Id = 1, Id = 1.AsGuid(),
Slug = "the-actor", Slug = "the-actor",
Name = "The Actor", Name = "The Actor",
Poster = new Image("Poster"), Poster = new Image("Poster"),
@ -193,7 +193,7 @@ namespace Kyoo.Tests
typeof(Studio), typeof(Studio),
() => new Studio () => new Studio
{ {
Id = 1, Id = 1.AsGuid(),
Slug = "hyper-studio", Slug = "hyper-studio",
Name = "Hyper studio", Name = "Hyper studio",
} }
@ -202,7 +202,7 @@ namespace Kyoo.Tests
typeof(User), typeof(User),
() => new User () => new User
{ {
Id = 1, Id = 1.AsGuid(),
Slug = "user", Slug = "user",
Username = "User", Username = "User",
Email = "user@im-a-user.com", Email = "user@im-a-user.com",
@ -225,39 +225,39 @@ namespace Kyoo.Tests
public static void FillDatabase(DatabaseContext context) public static void FillDatabase(DatabaseContext context)
{ {
Collection collection = Get<Collection>(); Collection collection = Get<Collection>();
collection.Id = 0; collection.Id = 0.AsGuid();
context.Collections.Add(collection); context.Collections.Add(collection);
Show show = Get<Show>(); Show show = Get<Show>();
show.Id = 0; show.Id = 0.AsGuid();
show.StudioId = 0; show.StudioId = 0.AsGuid();
context.Shows.Add(show); context.Shows.Add(show);
Season season = Get<Season>(); Season season = Get<Season>();
season.Id = 0; season.Id = 0.AsGuid();
season.ShowId = 0; season.ShowId = 0.AsGuid();
season.Show = show; season.Show = show;
context.Seasons.Add(season); context.Seasons.Add(season);
Episode episode = Get<Episode>(); Episode episode = Get<Episode>();
episode.Id = 0; episode.Id = 0.AsGuid();
episode.ShowId = 0; episode.ShowId = 0.AsGuid();
episode.Show = show; episode.Show = show;
episode.SeasonId = 0; episode.SeasonId = 0.AsGuid();
episode.Season = season; episode.Season = season;
context.Episodes.Add(episode); context.Episodes.Add(episode);
Studio studio = Get<Studio>(); Studio studio = Get<Studio>();
studio.Id = 0; studio.Id = 0.AsGuid();
studio.Shows = new List<Show> { show }; studio.Shows = new List<Show> { show };
context.Studios.Add(studio); context.Studios.Add(studio);
People people = Get<People>(); People people = Get<People>();
people.Id = 0; people.Id = 0.AsGuid();
context.People.Add(people); // context.People.Add(people);
User user = Get<User>(); User user = Get<User>();
user.Id = 0; user.Id = 0.AsGuid();
context.Users.Add(user); context.Users.Add(user);
context.SaveChanges(); context.SaveChanges();
@ -267,9 +267,9 @@ namespace Kyoo.Tests
{ {
return new() return new()
{ {
Id = 2, Id = 2.AsGuid(),
ShowSlug = "anohana", ShowSlug = "anohana",
ShowId = 1, ShowId = 1.AsGuid(),
SeasonNumber = null, SeasonNumber = null,
EpisodeNumber = null, EpisodeNumber = null,
AbsoluteNumber = 3, AbsoluteNumber = 3,

View File

@ -17,6 +17,7 @@
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>. // along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
using System; using System;
using System.Security.Cryptography;
using FluentAssertions; using FluentAssertions;
using JetBrains.Annotations; using JetBrains.Annotations;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
@ -64,5 +65,21 @@ namespace Kyoo.Tests
{ {
throw new XunitException(message); throw new XunitException(message);
} }
public static Guid AsGuid(this string src)
{
// Use MD5 since (1) it's faster then SHA and (2) it's already 16 bytes which matches the Guid
return string.IsNullOrWhiteSpace(src)
? Guid.Empty
: new Guid(MD5.Create().ComputeHash(System.Text.Encoding.UTF8.GetBytes(src)));
}
public static Guid AsGuid(this int src)
{
// Use MD5 since (1) it's faster then SHA and (2) it's already 16 bytes which matches the Guid
return src == 0
? Guid.Empty
: new Guid(MD5.Create().ComputeHash(BitConverter.GetBytes(src)));
}
} }
} }

View File

@ -36,11 +36,11 @@ namespace Kyoo.Tests.Utility
Studio genre2 = new() Studio genre2 = new()
{ {
Name = "test", Name = "test",
Id = 5, Id = 5.AsGuid(),
}; };
Studio ret = Merger.Complete(genre, genre2); Studio ret = Merger.Complete(genre, genre2);
Assert.True(ReferenceEquals(genre, ret)); Assert.True(ReferenceEquals(genre, ret));
Assert.Equal(5, ret.Id); Assert.Equal(5.AsGuid(), ret.Id);
Assert.Equal("test", genre.Name); Assert.Equal("test", genre.Name);
Assert.Null(genre.Slug); Assert.Null(genre.Slug);
} }
@ -54,12 +54,12 @@ namespace Kyoo.Tests.Utility
}; };
Collection collection2 = new() Collection collection2 = new()
{ {
Id = 5, Id = 5.AsGuid(),
Name = "test", Name = "test",
}; };
Collection ret = Merger.Complete(collection, collection2); Collection ret = Merger.Complete(collection, collection2);
Assert.True(ReferenceEquals(collection, ret)); Assert.True(ReferenceEquals(collection, ret));
Assert.Equal(5, ret.Id); Assert.Equal(5.AsGuid(), ret.Id);
Assert.Equal("test", ret.Name); Assert.Equal("test", ret.Name);
Assert.Null(ret.Slug); Assert.Null(ret.Slug);
} }

View File

@ -31,7 +31,7 @@ namespace Kyoo.Tests.Utility
[Fact] [Fact]
public void IsPropertyExpression_Tests() public void IsPropertyExpression_Tests()
{ {
Expression<Func<Show, int>> member = x => x.Id; Expression<Func<Show, Guid>> member = x => x.Id;
Expression<Func<Show, object>> memberCast = x => x.Id; Expression<Func<Show, object>> memberCast = x => x.Id;
Assert.True(KUtility.IsPropertyExpression(member)); Assert.True(KUtility.IsPropertyExpression(member));
@ -44,7 +44,7 @@ namespace Kyoo.Tests.Utility
[Fact] [Fact]
public void GetPropertyName_Test() public void GetPropertyName_Test()
{ {
Expression<Func<Show, int>> member = x => x.Id; Expression<Func<Show, Guid>> member = x => x.Id;
Expression<Func<Show, object>> memberCast = x => x.Id; Expression<Func<Show, object>> memberCast = x => x.Id;
Assert.Equal("Id", KUtility.GetPropertyName(member)); Assert.Equal("Id", KUtility.GetPropertyName(member));