コード例 #1
0
        public async Task <Response> RemoveAsync(Guid code)
        {
            var response = Response.Create();

            if (code.Equals(Guid.Empty))
            {
                return(response.WithBusinessError($"{nameof(code)} is invalid"));
            }

            var character = await CharacterRepository.FindAsync(code);

            if (!character.HasValue)
            {
                return(response.WithBusinessError($"Character with code {code} not found"));
            }

            character.Value.Delete();

            await CharacterRepository.UpdateAsync(character);

            if (!await Uow.CommitAsync())
            {
                return(response.WithCriticalError("Failed to try to delete the character"));
            }

            return(response);
        }
コード例 #2
0
        public async Task Find_given_non_existing_id_returns_null()
        {
            var builder = new DbContextOptionsBuilder <FuturamaContext>()
                          .UseInMemoryDatabase(nameof(Find_given_non_existing_id_returns_null));

            using (var context = new FuturamaContext(builder.Options))
                using (var repository = new CharacterRepository(context))
                {
                    var character = await repository.FindAsync(42);

                    Assert.Null(character);
                }
        }
コード例 #3
0
        public async Task Find_given_existing_id_returns_mapped_CharacterDTO()
        {
            using (var connection = new SqliteConnection("DataSource=:memory:"))
            {
                connection.Open();

                var builder = new DbContextOptionsBuilder <FuturamaContext>()
                              .UseSqlite(connection);

                var context = new FuturamaContext(builder.Options);
                await context.Database.EnsureCreatedAsync();

                var entity = new Character
                {
                    Name    = "Name",
                    Species = "Species",
                    Planet  = "Planet",
                    Image   = "Image",
                    Actor   = new Actor {
                        Name = "Actor"
                    },
                    Episodes = new[] { new EpisodeCharacter {
                                           Episode = new Episode {
                                               Title = "Episode 1"
                                           }
                                       }, new EpisodeCharacter {
                                           Episode = new Episode {
                                               Title = "Episode 2"
                                           }
                                       } }
                };

                context.Characters.Add(entity);
                await context.SaveChangesAsync();

                var id = entity.Id;

                using (var repository = new CharacterRepository(context))
                {
                    var character = await repository.FindAsync(id);

                    Assert.Equal("Name", character.Name);
                    Assert.Equal("Species", character.Species);
                    Assert.Equal("Planet", character.Planet);
                    Assert.Equal("Image", character.Image);
                    Assert.Equal("Actor", character.ActorName);
                    Assert.Equal(2, character.NumberOfEpisodes);
                }
            }
        }
コード例 #4
0
        public async Task FindAsync_given_id_exists_returns_dto()
        {
            using (var connection = await CreateConnectionAsync())
                using (var context = await CreateContextAsync(connection))
                {
                    var entity = new Character
                    {
                        Name    = "Fry",
                        Species = "Human",
                        Planet  = "Earth",
                        Actor   = new Actor {
                            Name = "Billy West"
                        },
                        EpisodeCharacters = new[]
                        {
                            new EpisodeCharacter {
                                Episode = new Episode {
                                    Title = "Space Pilot 3000"
                                }
                            },
                            new EpisodeCharacter {
                                Episode = new Episode {
                                    Title = "The Series Has Landed"
                                }
                            }
                        }
                    };
                    context.Characters.Add(entity);
                    await context.SaveChangesAsync();

                    var repository = new CharacterRepository(context);

                    var character = await repository.FindAsync(1);

                    Assert.Equal(1, character.Id);
                    Assert.Equal("Fry", character.Name);
                    Assert.Equal("Human", character.Species);
                    Assert.Equal("Earth", character.Planet);
                    Assert.Equal(1, character.ActorId);
                    Assert.Equal("Billy West", character.ActorName);
                    Assert.Equal(2, character.NumberOfEpisodes);
                }
        }
コード例 #5
0
        public async Task <Response <Model.Character> > UpdateAsync(UpdateCharacterDto dto)
        {
            var response = Response <Model.Character> .Create();

            if (dto == null)
            {
                return(response.WithBusinessError("Character is invalid"));
            }

            var character = await CharacterRepository.FindAsync(dto.Code);

            if (!character.HasValue)
            {
                return(response.WithBusinessError($"Character {dto.Code} not found"));
            }

            var getHouseResponse = await GetHouseAsync(dto.House, character.Value.House);

            if (getHouseResponse.HasError)
            {
                return(response.WithMessages(getHouseResponse.Messages));
            }

            var updateResponse = character.Value.Update(dto.Name, dto.Role, dto.School, getHouseResponse, dto.Patronus);

            if (updateResponse.HasError)
            {
                return(response.WithMessages(updateResponse.Messages));
            }

            await CharacterRepository.UpdateAsync(character);

            if (!await Uow.CommitAsync())
            {
                return(response.WithCriticalError("Failed to try to update the character"));
            }

            return(response.SetValue(character));
        }