Ejemplo n.º 1
0
        protected override void PreRestart(Exception reason, object message)
        {
            UpdateCharacterMessage characterMessage = message as UpdateCharacterMessage;

            _logger.Error(reason, "Error processing candidate @CharacterID", characterMessage.CharacterID);
            base.PreRestart(reason, message);
        }
        public async Task HandleAsync_GivenNullResponseFromJikan_ShouldNotThrowAndCallJikan()
        {
            // Given
            const int malId               = 1;
            var       dbContext           = InMemoryDbProvider.GetDbContext();
            var       jikanServiceBuilder = new JikanServiceBuilder().WithCharacterReturned(null);

            var character = new CharacterBuilder()
                            .WithMalId(malId)
                            .Build();

            await dbContext.AddAsync(character);

            await dbContext.SaveChangesAsync();

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

            var command = new UpdateCharacterMessage
            {
                Id    = Guid.NewGuid(),
                MalId = malId
            };

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

            // Then
            using (new AssertionScope())
            {
                await action.Should().NotThrowAsync();

                jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacter(malId), Times.Once);
            }
        }
        public async Task HandleAsync_GivenExceptionFromJikan_ShouldThrowAndCallJikan()
        {
            // Given
            const int malId               = 1;
            var       dbContext           = InMemoryDbProvider.GetDbContext();
            var       jikanServiceBuilder = new JikanServiceBuilder().WithGetCharacterThrowing();

            var anime = new CharacterBuilder()
                        .WithMalId(malId)
                        .Build();

            await dbContext.AddAsync(anime);

            await dbContext.SaveChangesAsync();

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

            var command = new UpdateCharacterMessage
            {
                Id    = Guid.NewGuid(),
                MalId = malId
            };

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

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

                jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacter(malId), Times.Once);
            }
        }
        public async Task HandleAsync_GivenEmptyDatabase_ShouldNotThrowAndNotCallJikan()
        {
            // Given
            var dbContext           = InMemoryDbProvider.GetDbContext();
            var jikanServiceBuilder = new JikanServiceBuilder();

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

            var command = new UpdateCharacterMessage
            {
                Id    = Guid.NewGuid(),
                MalId = 1
            };

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

            // Then
            using (new AssertionScope())
            {
                await action.Should().NotThrowAsync();

                jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacter(It.IsAny <long>()), Times.Never);
            }
        }
Ejemplo n.º 5
0
 void ProcessNotifyCandidateMessage(UpdateCharacterMessage message)
 {
     Become(Busy);
     _characterMessage = message;
     _client.GetCharacter(message.CharacterID).PipeTo(Self,
                                                      success: (successMessage) => new CharacterUpdated(successMessage),
                                                      failure: (ex) => new FailureMessage(ex));
 }
Ejemplo n.º 6
0
 void UpdateCharacterData(UpdateCharacterMessage message)
 {
     if (_availableWorkers.Count > 0)
     {
         _availableWorkers.Dequeue().Tell(message);
     }
     else
     {
         _queue1.Enqueue(message);
     }
 }
        public async Task PublishCharacterUpdateAsync(UpdateCharacterMessage updateCharacterMessage, int delayInSeconds = 0)
        {
            var sendMessageRequest = new SendMessageRequest
            {
                MessageBody  = JsonSerializer.Serialize(updateCharacterMessage),
                QueueUrl     = _queueUrl,
                DelaySeconds = delayInSeconds
            };

            await _sqsService.SendMessageAsync(sendMessageRequest);
        }
        public async Task HandleAsync_GivenManyNicknames_ShouldUpdateWithJoinedString()
        {
            // Given
            const int malId = 1;

            var nicknames = new List <string> {
                "Nickname 1", "Nickname 2", "Nickname 3"
            };

            var returnedCharacter = new Character
            {
                Nicknames = nicknames
            };

            var jikanServiceBuilder = new JikanServiceBuilder().WithCharacterReturned(returnedCharacter);

            var dbContext = InMemoryDbProvider.GetDbContext();
            var character = new CharacterBuilder()
                            .WithMalId(malId)
                            .WithName("PreUpdateName")
                            .WithAbout("PreUpdateAbout")
                            .WithKanjiName("PreUpdateJapanese")
                            .WithImageUrl("PreUpdateImageUrl")
                            .WithPopularity(0)
                            .Build();

            await dbContext.AddAsync(character);

            await dbContext.SaveChangesAsync();

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

            var command = new UpdateCharacterMessage
            {
                Id    = Guid.NewGuid(),
                MalId = malId
            };

            // When
            await handler.HandleAsync(command);

            // Then
            var updatedCharacter = await dbContext.AnimeCharacters.FirstAsync(x => x.MalId == malId);

            using (new AssertionScope())
            {
                updatedCharacter.Nicknames.Should().Be("Nickname 1;Nickname 2;Nickname 3");

                jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacter(malId), Times.Once);
            }
        }
        private void HandleUpdateCharacterMessage(RestDataRequestMessage message, UpdateCharacterMessage messagecontent,
                                                  ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user == default)
            {
                return;
            }
            user.PlayerData.BodyProperties = messagecontent.BodyProperties;

            user.PlayerData.IsFemale =
                messagecontent.IsFemale;

            response.SetSuccessful(true, "ResultFromServerTask");
        }
Ejemplo n.º 10
0
        public async Task HandleAsync(UpdateCharacterMessage updateCharacterMessage)
        {
            var characterToUpdate = await _characterRepository.GetAsync(updateCharacterMessage.MalId);

            if (characterToUpdate == null)
            {
                return;
            }

            var updateData = await _malApiService.GetCharacterDataAsync(updateCharacterMessage.MalId);

            if (updateData == null)
            {
                return;
            }

            UpdateCharacter(characterToUpdate, updateData);
            await _characterRepository.UpdateAsync(characterToUpdate);
        }
        public async Task HandleAsync_GivenCorrectResponse_ShouldUpdateBasicProperties()
        {
            // Given
            const int malId = 1;

            const string returnedName         = "PostUpdateName";
            const string returnedAbout        = "PostUpdateAbout";
            const string returnedJapaneseName = "PostUpdateJapanese";
            const string returnedImageUrl     = "PostUpdateImageUrl";
            const int    returnedPopularity   = 1;

            var returnedCharacter = new Character
            {
                Name            = returnedName,
                About           = returnedAbout,
                NameKanji       = returnedJapaneseName,
                ImageURL        = returnedImageUrl,
                Nicknames       = new List <string>(),
                MemberFavorites = returnedPopularity
            };

            var dbContext           = InMemoryDbProvider.GetDbContext();
            var jikanServiceBuilder = new JikanServiceBuilder().WithCharacterReturned(returnedCharacter);

            var character = new CharacterBuilder()
                            .WithMalId(malId)
                            .WithName("PreUpdateName")
                            .WithAbout("PreUpdateAbout")
                            .WithKanjiName("PreUpdateJapanese")
                            .WithImageUrl("PreUpdateImageUrl")
                            .WithPopularity(0)
                            .Build();

            await dbContext.AddAsync(character);

            await dbContext.SaveChangesAsync();

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

            var command = new UpdateCharacterMessage
            {
                Id    = Guid.NewGuid(),
                MalId = malId
            };

            // When
            await handler.HandleAsync(command);

            // Then
            var updatedCharacter = await dbContext.AnimeCharacters.FirstAsync(x => x.MalId == malId);

            using (new AssertionScope())
            {
                updatedCharacter.Name.Should().Be(returnedName);
                updatedCharacter.About.Should().Be(returnedAbout);
                updatedCharacter.KanjiName.Should().Be(returnedJapaneseName);
                updatedCharacter.ImageUrl.Should().Be(returnedImageUrl);
                updatedCharacter.Popularity.Should().Be(returnedPopularity);

                jikanServiceBuilder.JikanClient.Verify(x => x.GetCharacter(malId), Times.Once);
            }
        }