Skip to content

Commit

Permalink
Add OpenHentai.Tests.Integration
Browse files Browse the repository at this point in the history
Working on separation of integration part of tests from unit part
  • Loading branch information
Gigas002 committed Jun 28, 2023
1 parent 6e2e80e commit 51c8cd1
Show file tree
Hide file tree
Showing 22 changed files with 1,005 additions and 8 deletions.
35 changes: 35 additions & 0 deletions OpenHentai.Tests.Integration/AuthorsCirclesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using NUnit.Framework.Internal;

namespace OpenHentai.Tests.Integration;

public class AuthorsCirclesTests : DatabaseTestsBase
{
// depends on PushAuthorsTest(1)
// depends on PushCirclesTest(1)
[Test]
[Order(2)]
public void PushAuthorsCirclesTest()
{
using var db = new DatabaseContext(ContextOptions);

var authors = db.Authors.Include(a => a.AuthorNames).ToHashSet();

var ym = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Yukino Minato"));
var asanagi = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Asanagi"));

var circles = db.Circles.Include(c => c.Titles).ToHashSet();

// or by searching through relative table:
// var cts = db.CirclesTitles.ToHashSet();
// var nnntCt = cts.FirstOrDefault(ct => ct.Text == "noraneko-no-tama");
// var nnnt = circles.FirstOrDefault(c => c.Id == nnntCt.Id);

var nnnt = circles.FirstOrDefault(c => c.Titles.Any(ct => ct.Text == "noraneko-no-tama"));
var fatalpulse = circles.FirstOrDefault(c => c.Titles.Any(ct => ct.Text == "Fatalpulse"));

ym!.Circles.Add(nnnt!);
fatalpulse!.Authors.Add(asanagi!);

db.SaveChanges();
}
}
34 changes: 34 additions & 0 deletions OpenHentai.Tests.Integration/AuthorsCreationsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using OpenHentai.Roles;

namespace OpenHentai.Tests.Integration;

public class AuthorsCreationsTests : DatabaseTestsBase
{
// depends on PushAuthorsTest(1)
// depends on PushMangaTest(1)
[Test]
[Order(2)]
public void PushAuthorsCreationsTest()
{
using var db = new DatabaseContext(ContextOptions);

var authors = db.Authors.Include(a => a.AuthorNames).ToHashSet();

var ym = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Yukino Minato"));
var asanagi = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Asanagi"));

var manga = db.Manga.Include(m => m.Titles).ToHashSet();

var ymM1 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "Monokemono Shoya"));
var ymM2 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "Monokemono"));
var aM1 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "VictimGirls 24"));
var aM2 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "VictimGirls 25"));

ym!.AddCreation(ymM1!, AuthorRole.MainArtist);
ym.AddCreation(ymM2!, AuthorRole.MainArtist);
aM1!.AddAuthor(asanagi!, AuthorRole.MainArtist);
aM2!.AddAuthor(asanagi!, AuthorRole.MainArtist);

db.SaveChanges();
}
}
30 changes: 30 additions & 0 deletions OpenHentai.Tests.Integration/AuthorsTagsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
namespace OpenHentai.Tests.Integration;

public class AuthorsTagsTests : DatabaseTestsBase
{
// depends on PushTagsTest(1)
// depends on PushAuthorsTest(1)
[Test]
[Order(2)]
public void PushAuthorsTagsTest()
{
using var db = new DatabaseContext(ContextOptions);

var authors = db.Authors.Include(a => a.AuthorNames).ToHashSet();

var ym = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Yukino Minato"));
var asanagi = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Asanagi"));

var tags = db.Tags.Include(tag => tag.Creatures).ToHashSet();

var loliTag = tags.FirstOrDefault(t => t.Value == "Loli");
var alTag = tags.FirstOrDefault(t => t.Value == "Azur Lane");
var gfTag = tags.FirstOrDefault(t => t.Value == "Granblue Fantasy");

ym!.Tags.Add(loliTag!);
alTag!.Creatures.Add(asanagi!);
gfTag!.Creatures.Add(asanagi!);

db.SaveChanges();
}
}
108 changes: 108 additions & 0 deletions OpenHentai.Tests.Integration/AuthorsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
using OpenHentai.Creatures;
using OpenHentai.Descriptors;
using OpenHentai.Relations;
using OpenHentai.Statuses;

namespace OpenHentai.Tests.Integration;

public class AuthorsTests : DatabaseTestsBase
{
#region Push tests

[Test]
[Order(1)]
public void PushAuthorsTest()
{
using var db = new DatabaseContext(ContextOptions);

// using templates for unknown values
var ym = new Author("default::Yukino Minato")
{
Birthday = new(1900, 01, 01),
Age = 999,
Gender = Gender.Female
};
ym.AddAuthorName("ja-JP::雪野 みなと");
ym.AddName("default::Yukinominato");
ym.Description.Add(new("en-US::Popular loli doujinshi artist"));
ym.Media.Add(new("https://pbs.twimg.com/profile_images/1587354886751993856/vSCQYP59_400x400.jpg", MediaType.Image));
ym.ExternalLinks.Add(new("twitter", "https://twitter.com/straycat_2018")
{
OfficialStatus = OfficialStatus.Official,
PaidStatus = PaidStatus.Free
});
ym.ExternalLinks.Add(new("fanbox", "https://noraneko-no-tama.fanbox.cc/")
{
OfficialStatus = OfficialStatus.Official,
PaidStatus = PaidStatus.Paid
});

var asanagi = new Author("default::Asanagi")
{
Birthday = new(1900, 01, 01),
Age = 999,
Gender = Gender.Male
};
asanagi.AddAuthorName("ja-JP::朝凪");
asanagi.AddName("default::asanagi");
asanagi.Description.Add(new("en-US::Popular mindbreak artist"));
asanagi.Media.Add(new("https://pbs.twimg.com/profile_images/991625674757570562/MHkJ_qqa_400x400.jpg", MediaType.Image));
asanagi.ExternalLinks.Add(new("twitter", "https://twitter.com/Victim_Girls")
{
OfficialStatus = OfficialStatus.Official,
PaidStatus = PaidStatus.Free
});
asanagi.ExternalLinks.Add(new("fantia", "https://fantia.jp/asanagi")
{
OfficialStatus = OfficialStatus.Official,
PaidStatus = PaidStatus.Paid
});

db.Authors.AddRange(ym, asanagi);

db.SaveChanges();
}

// depends on PushAuthorsTest(1)
[Test]
[Order(2)]
public void PushAuthorsRelationsTest()
{
using var db = new DatabaseContext(ContextOptions);

var authors = db.Authors.Include(a => a.AuthorNames).ToHashSet();

var ym = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Yukino Minato"));
var asanagi = authors.FirstOrDefault(a => a.AuthorNames.Any(an => an.Text == "Asanagi"));

ym!.AddRelation(asanagi!, CreatureRelations.Unknown);
asanagi!.AddRelation(ym, CreatureRelations.Friend);

db.SaveChanges();
}

#endregion

#region Read tests

[Test]
[Order(10)]
public async Task ReadAuthorsTest()
{
using var db = new DatabaseContext(ContextOptions);

var authors = db.Authors.Include(a => a.AuthorNames)
.Include(a => a.Circles)
.Include(a => a.Creations)
.ThenInclude(ac => ac.Related)
.Include(a => a.Names)
.Include(a => a.Tags)
.Include(a => a.Relations)
.ThenInclude(cr => cr.Related);

var json = await SerializeEntityAsync(authors).ConfigureAwait(false);
var deserialized = await DeserializeEntityAsync<IEnumerable<Author>>(json).ConfigureAwait(false);
}

#endregion
}
37 changes: 37 additions & 0 deletions OpenHentai.Tests.Integration/CharactersCreationsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using OpenHentai.Roles;

namespace OpenHentai.Tests.Integration;

public class CharactersCreationsTests : DatabaseTestsBase
{
// depends on PushCharactersTest(1)
// depends on PushMangaTest(1)
[Test]
[Order(2)]
public void PushCharactersCreationsTest()
{
using var db = new DatabaseContext(ContextOptions);

var characters = db.Characters.Include(a => a.Names).ToHashSet();

var ymM1M = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Unnamed male"));
var ymM2F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Akaname"));
var aM1F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Ajax"));
var aM2F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Aliza"));

var manga = db.Manga.Include(m => m.Titles).ToHashSet();

var ymM1 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "Monokemono Shoya"));
var ymM2 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "Monokemono"));
var aM1 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "VictimGirls 24"));
var aM2 = manga.FirstOrDefault(m => m.Titles.Any(ct => ct.Text == "VictimGirls 25"));

ymM1M!.AddCreation(ymM1!, CharacterRole.Main);
ymM1M.AddCreation(ymM2!, CharacterRole.Secondary);
ymM2F!.AddCreation(ymM2!, CharacterRole.Main);
aM1!.AddCharacter(aM1F!, CharacterRole.Main);
aM2!.AddCharacter(aM2F!, CharacterRole.Main);

db.SaveChanges();
}
}
32 changes: 32 additions & 0 deletions OpenHentai.Tests.Integration/CharactersTagsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
namespace OpenHentai.Tests.Integration;

public class CharactersTagsTests : DatabaseTestsBase
{
// depends on PushTagsTest(1)
// depends on PushCharactersTest(1)
[Test]
[Order(2)]
public void PushCharactersTagsTest()
{
using var db = new DatabaseContext(ContextOptions);

var characters = db.Characters.Include(a => a.Names).ToHashSet();

var ymM2F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Akaname"));
var aM1F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Ajax"));
var aM2F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Aliza"));

var tags = db.Tags.Include(tag => tag.Creatures).ToHashSet();

var loliTag = tags.FirstOrDefault(t => t.Value == "Loli");
var alTag = tags.FirstOrDefault(t => t.Value == "Azur Lane");
var gfTag = tags.FirstOrDefault(t => t.Value == "Granblue Fantasy");

ymM2F!.Tags.Add(loliTag!);
loliTag!.Creatures.Add(aM1F!);
alTag!.Creatures.Add(aM1F!);
gfTag!.Creatures.Add(aM2F!);

db.SaveChanges();
}
}
88 changes: 88 additions & 0 deletions OpenHentai.Tests.Integration/CharactersTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using OpenHentai.Creatures;
using OpenHentai.Relations;

namespace OpenHentai.Tests.Integration;

public class CharactersTests : DatabaseTestsBase
{
[Test]
[Order(1)]
public void PushCharactersTest()
{
using var db = new DatabaseContext(ContextOptions);

var ymM1M = new Character("default::Unnamed male")
{
Birthday = new DateTime(1900, 01, 01),
Age = 25,
Gender = Gender.Male
};
ymM1M.Description.Add(new("en-US::Protagonist of Monokemono Shoya"));

var ymM2F = new Character("default::Akaname")
{
Birthday = new DateTime(1900, 01, 01),
Age = 10,
Gender = Gender.Female
};
ymM2F.Description.Add(new("en-US::Protagonist of Monokemono Yonya"));

var aM1F = new Character("default::Ajax")
{
Birthday = new DateTime(1900, 01, 01),
Age = 15,
Gender = Gender.Female
};
aM1F.Description.Add(new("en-US::Azur lane character"));

var aM2F = new Character("default::Aliza")
{
Birthday = new DateTime(1900, 01, 01),
Age = 500,
Gender = Gender.Female
};
aM2F.Description.Add(new("en-US::Granblue fantasy character"));

db.Characters.AddRange(ymM1M, ymM2F, aM1F, aM2F);

db.SaveChanges();
}

// depends on PushCharactersTest(1)
[Test]
[Order(2)]
public void PushCharactersRelationsTest()
{
using var db = new DatabaseContext(ContextOptions);

var characters = db.Characters.Include(a => a.Names).ToHashSet();

var ymM1M = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Unnamed male"));
var ymM2F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Akaname"));
var aM1F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Ajax"));
var aM2F = characters.FirstOrDefault(c => c.Names.Any(cn => cn.Text == "Aliza"));

ymM1M!.AddRelation(ymM2F!, CreatureRelations.Unknown);
aM1F!.AddRelation(aM2F!, CreatureRelations.Enemy);

db.SaveChanges();
}

[Test]
[Order(10)]
public async Task ReadCharactersTest()
{
using var db = new DatabaseContext(ContextOptions);

var characters = db.Characters.Include(c => c.Names)
.Include(c => c.Creations)
.ThenInclude(cc => cc.Origin)
.Include(c => c.Tags)
.Include(c => c.Relations)
.ThenInclude(cr => cr.Related)
.ToList();

var json = await SerializeEntityAsync(characters).ConfigureAwait(false);
var deserialized = await DeserializeEntityAsync<IEnumerable<Character>>(json).ConfigureAwait(false);
}
}
Loading

0 comments on commit 51c8cd1

Please sign in to comment.