1717using Microsoft . Extensions . Logging ;
1818using NSubstitute ;
1919using Xunit ;
20+ using Xunit . Abstractions ;
2021
2122namespace API . Tests . Repository ;
2223
2324#nullable enable
2425
25- public class SeriesRepositoryTests
26+ public class SeriesRepositoryTests ( ITestOutputHelper testOutputHelper ) : AbstractDbTest ( testOutputHelper )
2627{
27- private readonly IUnitOfWork _unitOfWork ;
2828
29- private readonly DbConnection ? _connection ;
30- private readonly DataContext _context ;
31-
32- private const string CacheDirectory = "C:/kavita/config/cache/" ;
33- private const string CoverImageDirectory = "C:/kavita/config/covers/" ;
34- private const string BackupDirectory = "C:/kavita/config/backups/" ;
35- private const string DataDirectory = "C:/data/" ;
36-
37- public SeriesRepositoryTests ( )
38- {
39- var contextOptions = new DbContextOptionsBuilder ( ) . UseSqlite ( CreateInMemoryDatabase ( ) ) . Options ;
40- _connection = RelationalOptionsExtension . Extract ( contextOptions ) . Connection ;
41-
42- _context = new DataContext ( contextOptions ) ;
43- Task . Run ( SeedDb ) . GetAwaiter ( ) . GetResult ( ) ;
44-
45- var config = new MapperConfiguration ( cfg => cfg . AddProfile < AutoMapperProfiles > ( ) ) ;
46- var mapper = config . CreateMapper ( ) ;
47- _unitOfWork = new UnitOfWork ( _context , mapper , null ! ) ;
48- }
49-
50- #region Setup
51-
52- private static DbConnection CreateInMemoryDatabase ( )
53- {
54- var connection = new SqliteConnection ( "Filename=:memory:" ) ;
55-
56- connection . Open ( ) ;
57-
58- return connection ;
59- }
60-
61- private async Task < bool > SeedDb ( )
62- {
63- await _context . Database . MigrateAsync ( ) ;
64- var filesystem = CreateFileSystem ( ) ;
65-
66- await Seed . SeedSettings ( _context ,
67- new DirectoryService ( Substitute . For < ILogger < DirectoryService > > ( ) , filesystem ) ) ;
68-
69- var setting = await _context . ServerSetting . Where ( s => s . Key == ServerSettingKey . CacheDirectory ) . SingleAsync ( ) ;
70- setting . Value = CacheDirectory ;
71-
72- setting = await _context . ServerSetting . Where ( s => s . Key == ServerSettingKey . BackupDirectory ) . SingleAsync ( ) ;
73- setting . Value = BackupDirectory ;
74-
75- _context . ServerSetting . Update ( setting ) ;
76-
77- var lib = new LibraryBuilder ( "Manga" )
78- . WithFolderPath ( new FolderPathBuilder ( "C:/data/" ) . Build ( ) )
79- . Build ( ) ;
80-
81- _context . AppUser . Add ( new AppUser ( )
82- {
83- UserName = "majora2007" ,
84- Libraries = new List < Library > ( )
85- {
86- lib
87- }
88- } ) ;
89-
90- return await _context . SaveChangesAsync ( ) > 0 ;
91- }
92-
93- private async Task ResetDb ( )
94- {
95- _context . Series . RemoveRange ( _context . Series . ToList ( ) ) ;
96- _context . AppUserRating . RemoveRange ( _context . AppUserRating . ToList ( ) ) ;
97- _context . Genre . RemoveRange ( _context . Genre . ToList ( ) ) ;
98- _context . CollectionTag . RemoveRange ( _context . CollectionTag . ToList ( ) ) ;
99- _context . Person . RemoveRange ( _context . Person . ToList ( ) ) ;
100-
101- await _context . SaveChangesAsync ( ) ;
102- }
103-
104- private static MockFileSystem CreateFileSystem ( )
105- {
106- var fileSystem = new MockFileSystem ( ) ;
107- fileSystem . Directory . SetCurrentDirectory ( "C:/kavita/" ) ;
108- fileSystem . AddDirectory ( "C:/kavita/config/" ) ;
109- fileSystem . AddDirectory ( CacheDirectory ) ;
110- fileSystem . AddDirectory ( CoverImageDirectory ) ;
111- fileSystem . AddDirectory ( BackupDirectory ) ;
112- fileSystem . AddDirectory ( DataDirectory ) ;
113-
114- return fileSystem ;
115- }
116-
117- #endregion
118-
119- private async Task SetupSeriesData ( )
29+ private async Task SetupSeriesData ( IUnitOfWork unitOfWork )
12030 {
12131 var library = new LibraryBuilder ( "GetFullSeriesByAnyName Manga" , LibraryType . Manga )
122- . WithFolderPath ( new FolderPathBuilder ( "C:/data/ manga/") . Build ( ) )
32+ . WithFolderPath ( new FolderPathBuilder ( DataDirectory + " manga/") . Build ( ) )
12333 . WithSeries ( new SeriesBuilder ( "The Idaten Deities Know Only Peace" )
12434 . WithLocalizedName ( "Heion Sedai no Idaten-tachi" )
12535 . WithFormat ( MangaFormat . Archive )
@@ -130,8 +40,8 @@ private async Task SetupSeriesData()
13040 . Build ( ) )
13141 . Build ( ) ;
13242
133- _unitOfWork . LibraryRepository . Add ( library ) ;
134- await _unitOfWork . CommitAsync ( ) ;
43+ unitOfWork . LibraryRepository . Add ( library ) ;
44+ await unitOfWork . CommitAsync ( ) ;
13545 }
13646
13747
@@ -142,11 +52,11 @@ private async Task SetupSeriesData()
14252 [ InlineData ( "Hitomi-chan wa Hitomishiri" , MangaFormat . Archive , "" , "Hitomi-chan is Shy With Strangers" ) ]
14353 public async Task GetFullSeriesByAnyName_Should ( string seriesName , MangaFormat format , string localizedName , string ? expected )
14454 {
145- await ResetDb ( ) ;
146- await SetupSeriesData ( ) ;
55+ var ( unitOfWork , _ , _ ) = await CreateDatabase ( ) ;
56+ await SetupSeriesData ( unitOfWork ) ;
14757
14858 var series =
149- await _unitOfWork . SeriesRepository . GetFullSeriesByAnyName ( seriesName , localizedName ,
59+ await unitOfWork . SeriesRepository . GetFullSeriesByAnyName ( seriesName , localizedName ,
15060 2 , format , false ) ;
15161 if ( expected == null )
15262 {
@@ -165,8 +75,8 @@ await _unitOfWork.SeriesRepository.GetFullSeriesByAnyName(seriesName, localizedN
16575 [ InlineData ( 0 , "" , null ) ] // Case 3: Return null if neither exist
16676 public async Task GetPlusSeriesDto_Should_PrioritizeAniListId_Correctly ( int externalAniListId , string ? webLinks , int ? expectedAniListId )
16777 {
168- // Arrange
169- await ResetDb ( ) ;
78+ var ( unitOfWork , _ , _ ) = await CreateDatabase ( ) ;
79+ await SetupSeriesData ( unitOfWork ) ;
17080
17181 var series = new SeriesBuilder ( "Test Series" )
17282 . WithFormat ( MangaFormat . Archive )
@@ -195,12 +105,12 @@ public async Task GetPlusSeriesDto_Should_PrioritizeAniListId_Correctly(int exte
195105 ReleaseYear = 2021
196106 } ;
197107
198- _unitOfWork . LibraryRepository . Add ( library ) ;
199- _unitOfWork . SeriesRepository . Add ( series ) ;
200- await _unitOfWork . CommitAsync ( ) ;
108+ unitOfWork . LibraryRepository . Add ( library ) ;
109+ unitOfWork . SeriesRepository . Add ( series ) ;
110+ await unitOfWork . CommitAsync ( ) ;
201111
202112 // Act
203- var result = await _unitOfWork . SeriesRepository . GetPlusSeriesDto ( series . Id ) ;
113+ var result = await unitOfWork . SeriesRepository . GetPlusSeriesDto ( series . Id ) ;
204114
205115 // Assert
206116 Assert . NotNull ( result ) ;
0 commit comments