Exemplo n.º 1
0
        public async Task GetOrderedPageByPopularityAsync_GivenMultipleWithPredicate_ShouldReturnEmpty()
        {
            // Given
            const int pageSize   = 2;
            const int pageNumber = 2;

            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRepository(dbContext);
            var seiyuu1    = new SeiyuuBuilder().WithName("Test1").Build();
            var seiyuu2    = new SeiyuuBuilder().WithName("Test2").Build();
            var seiyuu3    = new SeiyuuBuilder().WithName("Test3").Build();

            await dbContext.Seiyuus.AddAsync(seiyuu1);

            await dbContext.Seiyuus.AddAsync(seiyuu2);

            await dbContext.Seiyuus.AddAsync(seiyuu3);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetOrderedPageByPopularityAsync(x => x.Name.EndsWith("1"), pageNumber, pageSize);

            // Then// Then
            using (new AssertionScope())
            {
                result.TotalCount.Should().Be(1);
                result.Results.Should().BeEmpty();
                result.Page.Should().Be(pageNumber);
                result.PageSize.Should().Be(pageSize);
            }
        }
Exemplo n.º 2
0
        public async Task GetAllSeiyuuRolesAsync_GivenMultipleRoles_ShouldReturnMultiple()
        {
            // Given
            var seiyuuId   = Guid.NewGuid();
            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRoleRepository(dbContext);

            var japanese = new LanguageBuilder().WithLanguageId(LanguageId.Japanese).Build();
            var seiyuu   = new SeiyuuBuilder().WithId(seiyuuId).Build();

            seiyuu.Role = new List <AnimeRole>
            {
                new AnimeRoleBuilder().WithLanguage(japanese).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).Build(),
            };

            await dbContext.AddAsync(seiyuu);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetAllSeiyuuRolesAsync(seiyuuId, false);

            // Then
            result.Should().HaveCount(5);
        }
Exemplo n.º 3
0
        public async Task GetOrderedPageByPopularityAsync_GivenMultipleSeiyuu_ShouldReturnAll()
        {
            // Given
            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRepository(dbContext);
            var seiyuu1    = new SeiyuuBuilder().WithName("Test1").Build();
            var seiyuu2    = new SeiyuuBuilder().WithName("Test2").Build();
            var seiyuu3    = new SeiyuuBuilder().WithName("Test3").Build();

            await dbContext.Seiyuus.AddAsync(seiyuu1);

            await dbContext.Seiyuus.AddAsync(seiyuu2);

            await dbContext.Seiyuus.AddAsync(seiyuu3);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetOrderedPageByPopularityAsync(x => true);

            // Then
            using (new AssertionScope())
            {
                result.TotalCount.Should().Be(3);
                result.Results.Should().HaveCount(3);
            }
        }
Exemplo n.º 4
0
        public async Task HandleAsync_GivenExistingSeiyuu_ShouldSkipAndNotCallJikan()
        {
            // Given
            var       dbContext           = InMemoryDbProvider.GetDbContext();
            var       jikanServiceBuilder = new JikanServiceBuilder();
            const int startingMalId       = 1;
            var       s3Service           = new S3ServiceStub(startingMalId);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingMalId + 1)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 5);

            // When
            await handler.HandleAsync();

            // Then
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPersonAsync(It.IsAny <int>()), Times.Never);
            dbContext.Seiyuus.Should().ContainSingle();
        }
Exemplo n.º 5
0
        public async Task HandleAsync_GivenNotExistingSeiyuuNullFromJikan_ShouldSkipAndNotInsert()
        {
            // Given
            var       dbContext           = InMemoryDbProvider.GetDbContext();
            var       jikanServiceBuilder = new JikanServiceBuilder().WithPersonReturned(null, null);
            const int startingMalId       = 1;
            var       s3Service           = new S3ServiceStub(startingMalId);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingMalId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 1);

            // When
            await handler.HandleAsync();

            // Then
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPersonAsync(startingMalId + 1), Times.Once);
            dbContext.Seiyuus.Should().ContainSingle();
        }
Exemplo n.º 6
0
        public async Task HandleAsync_GivenNotExistingSeiyuuExceptionFromJikan_ShouldSkipAndNotInsert()
        {
            // Given
            var       dbContext           = InMemoryDbProvider.GetDbContext();
            var       jikanServiceBuilder = new JikanServiceBuilder().WithGetPersonThrowing();
            const int startingMalId       = 1;
            var       s3Service           = new S3ServiceStub(startingMalId);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingMalId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 1);

            // When
            var action = handler.Awaiting(x => x.HandleAsync());

            // Then
            using (new AssertionScope())
            {
                await action.Should().ThrowExactlyAsync <JikanRequestException>();

                dbContext.Seiyuus.Should().ContainSingle();
            }
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPersonAsync(startingMalId + 1), Times.Once);
        }
Exemplo n.º 7
0
        public async Task GetAsync_GivenMultipleExistingSeiyuuOneOfWhichWithId_ShouldReturnResult()
        {
            // Given
            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRepository(dbContext);
            var seiyuu1    = new SeiyuuBuilder().WithMalId(1).Build();
            var seiyuu2    = new SeiyuuBuilder().WithMalId(2).Build();
            var seiyuu3    = new SeiyuuBuilder().WithMalId(3).Build();
            var seiyuu4    = new SeiyuuBuilder().WithMalId(4).Build();
            var seiyuu5    = new SeiyuuBuilder().WithMalId(5).Build();

            await dbContext.Seiyuus.AddAsync(seiyuu1);

            await dbContext.Seiyuus.AddAsync(seiyuu2);

            await dbContext.Seiyuus.AddAsync(seiyuu3);

            await dbContext.Seiyuus.AddAsync(seiyuu4);

            await dbContext.Seiyuus.AddAsync(seiyuu5);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetAsync(3);

            // Then
            result.Should().NotBeNull();
            result.MalId.Should().Be(3);
        }
Exemplo n.º 8
0
        public async Task UpdateAsync_GivenExistingSeiyuu_ShouldUpdate()
        {
            // Given
            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRepository(dbContext);
            var seiyuu     = new SeiyuuBuilder().WithName("Test").Build();

            await dbContext.Seiyuus.AddAsync(seiyuu);

            await dbContext.SaveChangesAsync();

            seiyuu.Name = "Updated";

            // When
            await repository.UpdateAsync(seiyuu);

            // Then
            var allSeiyuu = await dbContext.Seiyuus.ToListAsync();

            using (new AssertionScope())
            {
                var updatedSeiyuu = allSeiyuu.SingleOrDefault();
                updatedSeiyuu.Should().NotBeNull();
                updatedSeiyuu.Name.Should().Be("Updated");
                updatedSeiyuu.ModificationDate.Should().HaveDay(DateTime.UtcNow.Day);
            }
        }
Exemplo n.º 9
0
        public async Task GetAllSeiyuuRolesAsync_GivenSeiyuuWithMultipleRolesAndMainRolesOnly_ShouldReturnPartial()
        {
            // Given
            var seiyuuId   = Guid.NewGuid();
            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRoleRepository(dbContext);

            var japanese       = new LanguageBuilder().WithLanguageId(LanguageId.Japanese).Build();
            var seiyuu         = new SeiyuuBuilder().WithId(seiyuuId).Build();
            var mainRole       = new AnimeRoleTypeBuilder().WithId(AnimeRoleTypeId.Main).Build();
            var supportingRole = new AnimeRoleTypeBuilder().WithId(AnimeRoleTypeId.Supporting).Build();

            seiyuu.Role = new List <AnimeRole>
            {
                new AnimeRoleBuilder().WithLanguage(japanese).WithRoleType(mainRole).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).WithRoleType(supportingRole).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).WithRoleType(supportingRole).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).WithRoleType(supportingRole).Build(),
                new AnimeRoleBuilder().WithLanguage(japanese).WithRoleType(mainRole).Build()
            };

            await dbContext.AddAsync(seiyuu);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetAllSeiyuuRolesAsync(seiyuuId, true);

            // Then
            result.Should().HaveCount(2);
        }
        public async Task HandleAsync_GivenMultipleCommonSeiyuu_ShouldReturnMultipleResults()
        {
            // Given
            var query = new CompareAnimeQuery {
                AnimeMalIds = new List <long> {
                    1, 2
                }
            };
            var dbContext = InMemoryDbProvider.GetDbContext();

            var miyukiSawashiro     = new SeiyuuBuilder().WithId(Guid.NewGuid()).WithMalId(1).WithName("Miyuki Sawashiro").Build();
            var chiwaSaito          = new SeiyuuBuilder().WithId(Guid.NewGuid()).WithMalId(2).WithName("Chiwa Saito").Build();
            var onePieceAnime       = new AnimeBuilder().WithId(Guid.NewGuid()).WithMalId(1).WithTitle("One Piece").Build();
            var bakemonogatariAnime = new AnimeBuilder().WithId(Guid.NewGuid()).WithMalId(2).WithTitle("Bakemonogatari").Build();
            var japanese            = new LanguageBuilder().WithLanguageId(LanguageId.Japanese).Build();
            var animeRoles          = new List <AnimeRole>
            {
                new AnimeRoleBuilder()
                .WithAnime(onePieceAnime)
                .WithSeiyuu(miyukiSawashiro)
                .WithCharacter(x => x.WithId(Guid.NewGuid()).WithMalId(1).WithName("Charlotte Pudding").Build())
                .WithLanguage(japanese)
                .Build(),
                new AnimeRoleBuilder()
                .WithAnime(bakemonogatariAnime)
                .WithSeiyuu(miyukiSawashiro)
                .WithCharacter(x => x.WithId(Guid.NewGuid()).WithMalId(2).WithName("Kanbaru Suruga").Build())
                .WithLanguage(japanese)
                .Build(),
                new AnimeRoleBuilder()
                .WithAnime(onePieceAnime)
                .WithSeiyuu(chiwaSaito)
                .WithCharacter(x => x.WithId(Guid.NewGuid()).WithMalId(1).WithName("Chimney").Build())
                .WithLanguage(japanese)
                .Build(),
                new AnimeRoleBuilder()
                .WithAnime(bakemonogatariAnime)
                .WithSeiyuu(chiwaSaito)
                .WithCharacter(x => x.WithId(Guid.NewGuid()).WithMalId(2).WithName("Hitagi Senjougahara").Build())
                .WithLanguage(japanese)
                .Build()
            };

            await dbContext.AddRangeAsync(animeRoles);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext);

            // When
            var result = await handler.HandleAsync(query);

            // Then
            result.Should().HaveCount(2);
        }
Exemplo n.º 11
0
        public async Task HandleAsync_GivenNotExistingNonJapanesePersonWithoutRoles_ShouldSkipAndNotInsert()
        {
            // Given
            var       dbContext     = InMemoryDbProvider.GetDbContext();
            const int startingMalId = 1;
            var       s3Service     = new S3ServiceStub(startingMalId);

            const string returnedSeiyuuName           = "PostUpdateSeiyuuName";
            const string returnedSeiyuuAbout          = "PostUpdateSeiyuuAbout";
            const string returnedSeiyuuGivenName      = "John";
            const string returnedSeiyuuFamilyNameName = "Doe";
            const string returnedSeiyuuImageUrl       = "PostUpdateSeiyuuImageUrl";
            const int    returnedSeiyuuPopularity     = 1;
            var          returnedBirthdate            = new DateTime(1990, 1, 1);

            var returnedSeiyuu = new Person
            {
                Name       = returnedSeiyuuName,
                About      = returnedSeiyuuAbout,
                GivenName  = returnedSeiyuuGivenName,
                FamilyName = returnedSeiyuuFamilyNameName,
                Images     = new ImagesSet
                {
                    JPG = new Image {
                        ImageUrl = returnedSeiyuuImageUrl
                    }
                },
                MemberFavorites = returnedSeiyuuPopularity,
                Birthday        = returnedBirthdate
            };

            var jikanServiceBuilder = new JikanServiceBuilder().WithPersonReturned(returnedSeiyuu, null);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingMalId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 5);

            // When
            await handler.HandleAsync();

            // Then
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPersonAsync(startingMalId + 1), Times.Once);
            dbContext.Seiyuus.Should().ContainSingle();
        }
Exemplo n.º 12
0
        public void ToSeiyuuSearchEntryDto_GivenSeiyuuAnime_ShouldReturnEmptySeiyuuSearchEntryDto()
        {
            // Given
            var seiyuu = new SeiyuuBuilder().Build();

            // When
            var dto = seiyuu.ToSeiyuuSearchEntryDto();

            // Then
            using (new AssertionScope())
            {
                dto.Should().NotBeNull();
                dto.ImageUrl.Should().BeEmpty();
                dto.Name.Should().BeEmpty();
                dto.MalId.Should().Be(default);
Exemplo n.º 13
0
		public async Task GetAllIdsAsync_GivenSingleSeiyuu_ShouldReturnSingle()
		{
			// Given
			var dbContext = InMemoryDbProvider.GetDbContext();
			var repository = new SeiyuuRepository(dbContext);
			var seiyuu = new SeiyuuBuilder().WithName("Test1").Build();

			await dbContext.Seiyuus.AddAsync(seiyuu);
			await dbContext.SaveChangesAsync();

			// When
			var result = await repository.GetAllIdsAsync();

			// Then
			result.Should().HaveCount(1);
		}
Exemplo n.º 14
0
		public async Task GetAsync_GivenExistingSeiyuuWithId_ShouldReturnResult()
		{
			// Given
			var dbContext = InMemoryDbProvider.GetDbContext();
			var repository = new SeiyuuRepository(dbContext);
			var seiyuu = new SeiyuuBuilder().WithMalId(1).Build();

			await dbContext.Seiyuus.AddAsync(seiyuu);
			await dbContext.SaveChangesAsync();

			// When
			var result = await repository.GetAsync(1);

			// Then
			result.Should().NotBeNull();
		}
Exemplo n.º 15
0
        public async Task AddAsync_GivenSeiyuu_ShouldAdd()
        {
            // Given
            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRepository(dbContext);

            const string expectedName        = "ExpectedName";
            const string expectedImageUrl    = "ExpectedImageUrl";
            const string expectedKanjiName   = "期待される日本語タイトル";
            const string expectedAbout       = "ExpectedAbout";
            var          expectedDateOfBirth = new DateTime(1990, 1, 1);
            const int    expectedPopularity  = 1000;
            const long   expectedMalId       = 1;

            var seiyuu = new SeiyuuBuilder()
                         .WithName(expectedName)
                         .WithImageUrl(expectedImageUrl)
                         .WithMalId(expectedMalId)
                         .WithJapaneseName(expectedKanjiName)
                         .WithAbout(expectedAbout)
                         .WithBirthday(expectedDateOfBirth)
                         .WithPopularity(expectedPopularity)
                         .Build();

            // When
            await repository.AddAsync(seiyuu);

            // Then
            var allAnime = await dbContext.Seiyuus.ToListAsync();

            var newSeiyuu = await dbContext.Seiyuus.FirstOrDefaultAsync();

            using (new AssertionScope())
            {
                allAnime.Should().ContainSingle();

                newSeiyuu.Should().NotBeNull();
                newSeiyuu.Name.Should().Be(expectedName);
                newSeiyuu.ImageUrl.Should().Be(expectedImageUrl);
                newSeiyuu.MalId.Should().Be(expectedMalId);
                newSeiyuu.KanjiName.Should().Be(expectedKanjiName);
                newSeiyuu.Birthday.Should().Be(expectedDateOfBirth);
                newSeiyuu.About.Should().Be(expectedAbout);
                newSeiyuu.Popularity.Should().Be(expectedPopularity);
            }
        }
Exemplo n.º 16
0
        public async Task GetAsync_GivenExistingSeiyuuWithId_ShouldReturnResultWithEntities()
        {
            // Given
            const string expectedName        = "ExpectedName";
            const string expectedImageUrl    = "ExpectedImageUrl";
            const string expectedKanjiName   = "期待される日本語タイトル";
            const string expectedAbout       = "ExpectedAbout";
            var          expectedDateOfBirth = new DateTime(1990, 1, 1);
            const int    expectedPopularity  = 1000;
            const long   expectedMalId       = 1;

            var seiyuu = new SeiyuuBuilder()
                         .WithName(expectedName)
                         .WithImageUrl(expectedImageUrl)
                         .WithMalId(expectedMalId)
                         .WithJapaneseName(expectedKanjiName)
                         .WithAbout(expectedAbout)
                         .WithBirthday(expectedDateOfBirth)
                         .WithPopularity(expectedPopularity)
                         .Build();

            var dbContext  = InMemoryDbProvider.GetDbContext();
            var repository = new SeiyuuRepository(dbContext);

            await dbContext.Seiyuus.AddAsync(seiyuu);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetAsync(1);

            // Then
            using (new AssertionScope())
            {
                result.Should().NotBeNull();
                result.Name.Should().Be(expectedName);
                result.ImageUrl.Should().Be(expectedImageUrl);
                result.MalId.Should().Be(expectedMalId);
                result.KanjiName.Should().Be(expectedKanjiName);
                result.Birthday.Should().Be(expectedDateOfBirth);
                result.About.Should().Be(expectedAbout);
                result.Popularity.Should().Be(expectedPopularity);
            }
        }
Exemplo n.º 17
0
        public async Task GetAllSeiyuuRolesByMalIdAsync_GivenNoRolesForAnime_ShouldReturnEmpty()
        {
            // Given
            const int seiyuuMalId = 1;
            var       dbContext   = InMemoryDbProvider.GetDbContext();
            var       repository  = new SeiyuuRoleRepository(dbContext);

            var seiyuu = new SeiyuuBuilder().WithMalId(2).Build();

            await dbContext.AddAsync(seiyuu);

            await dbContext.SaveChangesAsync();

            // When
            var result = await repository.GetAllSeiyuuRolesByMalIdAsync(seiyuuMalId, false);

            // Then
            result.Should().BeEmpty();
        }
 public SeasonSummaryEntryBuilder WithSeiyuu(Action <SeiyuuBuilder> builderAction)
 {
     _seiyuuBuilder = new SeiyuuBuilder();
     builderAction(_seiyuuBuilder);
     return(this);
 }
Exemplo n.º 19
0
        public async Task HandleAsync_GivenNotExistingJapanesePersonWithRolesAndNullResponsesFromCharacterAndAnimeRequests_ShouldInsertNewSeiyuuWithoutroles()
        {
            // Given
            const long animeMalId          = 100;
            const long characterMalId      = 1000;
            var        dbContext           = InMemoryDbProvider.GetDbContext();
            const int  startingSeiyuuMalId = 1;
            var        s3Service           = new S3ServiceStub(startingSeiyuuMalId);

            const string returnedSeiyuuName           = "PostUpdateSeiyuuName";
            const string returnedSeiyuuAbout          = "PostUpdateSeiyuuAbout";
            const string returnedSeiyuuGivenName      = "花澤";
            const string returnedSeiyuuFamilyNameName = "香菜";
            const string returnedSeiyuuImageUrl       = "PostUpdateSeiyuuImageUrl";
            const int    returnedSeiyuuPopularity     = 1;
            var          returnedBirthdate            = new DateTime(1990, 1, 1);

            var returnedSeiyuu = new Person
            {
                Name       = returnedSeiyuuName,
                About      = returnedSeiyuuAbout,
                GivenName  = returnedSeiyuuGivenName,
                FamilyName = returnedSeiyuuFamilyNameName,
                Images     = new ImagesSet
                {
                    JPG = new Image {
                        ImageUrl = returnedSeiyuuImageUrl
                    }
                },
                MemberFavorites = returnedSeiyuuPopularity,
                Birthday        = returnedBirthdate
            };
            var returnedRoles = new List <VoiceActingRole>
            {
                new VoiceActingRole
                {
                    Role  = "Main",
                    Anime = new MalImageSubItem
                    {
                        MalId = animeMalId
                    },
                    Character = new MalImageSubItem()
                    {
                        MalId = characterMalId
                    }
                }
            };

            var jikanServiceBuilder = new JikanServiceBuilder()
                                      .WithPersonReturned(returnedSeiyuu, returnedRoles)
                                      .WithCharacterReturned(null)
                                      .WithAnimeReturned(null);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingSeiyuuMalId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 1);

            // When
            await handler.HandleAsync();

            // Then
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPersonAsync(startingSeiyuuMalId + 1), Times.Once);
            jikanServiceBuilder.JikanClient.Verify(x => x.GetAnimeAsync(animeMalId), Times.Once);
            jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacterAsync(characterMalId), Times.Once);
            dbContext.Seiyuus.Should().HaveCount(2);
            dbContext.AnimeRoles.Should().BeEmpty();
        }
 public SeiyuuComparisonSubEntryBuilder WithSeiyuu(Action <SeiyuuBuilder> builderAction)
 {
     _seiyuuBuilder = new SeiyuuBuilder();
     builderAction(_seiyuuBuilder);
     return(this);
 }
Exemplo n.º 21
0
        public async Task HandleAsync_GivenNotExistingJapanesePersonWithSingleRoles_ShouldInsertNewSeiyuuWithRole()
        {
            // Given
            const long animeMalId          = 100;
            const long characterMalId      = 1000;
            var        dbContext           = InMemoryDbProvider.GetDbContext();
            const int  startingSeiyuuMalId = 1;
            var        s3Service           = new S3ServiceStub(startingSeiyuuMalId);

            const string returnedSeiyuuName           = "PostUpdateSeiyuuName";
            const string returnedSeiyuuAbout          = "PostUpdateSeiyuuAbout";
            const string returnedSeiyuuGivenName      = "花澤";
            const string returnedSeiyuuFamilyNameName = "香菜";
            const string returnedSeiyuuImageUrl       = "PostUpdateSeiyuuImageUrl";
            const int    returnedSeiyuuPopularity     = 1;
            var          returnedBirthdate            = new DateTime(1990, 1, 1);

            const string returnedCharacterName         = "PostUpdateName";
            const string returnedCharacterAbout        = "PostUpdateAbout";
            const string returnedCharacterJapaneseName = "PostUpdateJapanese";
            const string returnedCharacterImageUrl     = "PostUpdateImageUrl";
            const int    returnedCharacterPopularity   = 1;

            const string returnedAnimeTitle         = "PostUpdateTitle";
            const string returnedAnimeAbout         = "PostUpdateAbout";
            const string returnedAnimeEnglishTitle  = "PostUpdateEnglish";
            const string returnedAnimeJapaneseTitle = "PostUpdateJapanese";
            const string returnedAnimeImageUrl      = "PostUpdateImageUrl";
            const int    returnedAnimePopularity    = 3;

            var returnedSeiyuu = new Person
            {
                Name       = returnedSeiyuuName,
                About      = returnedSeiyuuAbout,
                GivenName  = returnedSeiyuuGivenName,
                FamilyName = returnedSeiyuuFamilyNameName,
                Images     = new ImagesSet
                {
                    JPG = new Image {
                        ImageUrl = returnedSeiyuuImageUrl
                    }
                },
                MemberFavorites = returnedSeiyuuPopularity,
                Birthday        = returnedBirthdate
            };
            var returnedRoles = new List <VoiceActingRole>
            {
                new VoiceActingRole
                {
                    Role  = "Main",
                    Anime = new MalImageSubItem
                    {
                        MalId = animeMalId
                    },
                    Character = new MalImageSubItem()
                    {
                        MalId = characterMalId
                    }
                }
            };

            var returnedCharacter = new Character
            {
                MalId     = characterMalId,
                Name      = returnedCharacterName,
                About     = returnedCharacterAbout,
                NameKanji = returnedCharacterJapaneseName,
                Images    = new ImagesSet
                {
                    JPG = new Image {
                        ImageUrl = returnedCharacterImageUrl
                    }
                },
                Nicknames = new List <string>(),
                Favorites = returnedCharacterPopularity
            };

            var returnedAnime = new Anime
            {
                MalId         = animeMalId,
                Title         = returnedAnimeTitle,
                Synopsis      = returnedAnimeAbout,
                TitleEnglish  = returnedAnimeEnglishTitle,
                TitleJapanese = returnedAnimeJapaneseTitle,
                Images        = new ImagesSet
                {
                    JPG = new Image {
                        ImageUrl = returnedAnimeImageUrl
                    }
                },
                TitleSynonyms = new List <string>(),
                Members       = returnedAnimePopularity
            };

            var jikanServiceBuilder = new JikanServiceBuilder()
                                      .WithPersonReturned(returnedSeiyuu, returnedRoles)
                                      .WithCharacterReturned(returnedCharacter)
                                      .WithAnimeReturned(returnedAnime);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingSeiyuuMalId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 1);

            // When
            await handler.HandleAsync();

            // Then
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPersonAsync(startingSeiyuuMalId + 1), Times.Once);
            jikanServiceBuilder.JikanClient.Verify(x => x.GetAnimeAsync(animeMalId), Times.Once);
            jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacterAsync(characterMalId), Times.Once);
            using (new AssertionScope())
            {
                dbContext.Seiyuus.Should().HaveCount(2);
                dbContext.Animes.Should().ContainSingle();
                dbContext.AnimeCharacters.Should().ContainSingle();
                dbContext.AnimeRoles.Should().ContainSingle();
            }
        }
Exemplo n.º 22
0
        public async Task HandleAsync_GivenNotExistingNonJapanesePersonWithRoles_ShouldSkipAndNotInsert()
        {
            // Given
            const long animeMalId          = 100;
            const long characterMalId      = 1000;
            var        dbContext           = InMemoryDbProvider.GetDbContext();
            const int  startingSeiyuuMalId = 1;
            var        s3Service           = new S3ServiceStub(startingSeiyuuMalId);

            const string returnedSeiyuuName           = "PostUpdateSeiyuuName";
            const string returnedSeiyuuAbout          = "PostUpdateSeiyuuAbout";
            const string returnedSeiyuuGivenName      = "John";
            const string returnedSeiyuuFamilyNameName = "Doe";
            const string returnedSeiyuuImageUrl       = "PostUpdateSeiyuuImageUrl";
            const int    returnedSeiyuuPopularity     = 1;
            var          returnedBirthdate            = new DateTime(1990, 1, 1);

            var returnedSeiyuu = new Person
            {
                Name             = returnedSeiyuuName,
                More             = returnedSeiyuuAbout,
                GivenName        = returnedSeiyuuGivenName,
                FamilyName       = returnedSeiyuuFamilyNameName,
                ImageURL         = returnedSeiyuuImageUrl,
                MemberFavorites  = returnedSeiyuuPopularity,
                Birthday         = returnedBirthdate,
                VoiceActingRoles = new List <VoiceActingRole>
                {
                    new VoiceActingRole
                    {
                        Role  = "Main",
                        Anime = new MALImageSubItem
                        {
                            MalId = animeMalId
                        },
                        Character = new MALImageSubItem
                        {
                            MalId = characterMalId
                        }
                    }
                }
            };

            var jikanServiceBuilder = new JikanServiceBuilder().WithPersonReturned(returnedSeiyuu);

            var anime = new SeiyuuBuilder()
                        .WithMalId(startingSeiyuuMalId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

            var handler = CreateHandler(dbContext, jikanServiceBuilder.Build(), s3Service, 5);

            // When
            await handler.HandleAsync();

            // Then
            jikanServiceBuilder.JikanClient.Verify(x => x.GetPerson(startingSeiyuuMalId + 1), Times.Once);
            dbContext.Seiyuus.Should().ContainSingle();
        }