public async Task AddOrUpdateAsync_WhenExisting_ReturnsEntity()
        {
            // Arrange
            var entities = GetDataForTests();
            var context  = GetContext();

            foreach (var entity in entities)
            {
                context.Entities.Add(entity);
            }
            context.SaveChanges();

            var entityToUpdate = entities.First();

            var resultEntity = new BaseEntityImplementation()
            {
                Id = 1,
                RelatedEntityId = 1,
                Deleted         = false
            };

            var repository = GetRepository(context);

            // Act
            var result = await repository.AddOrUpdateAsync(entityToUpdate);

            // Assert
            Assert.NotNull(result);
            result.Should().BeEquivalentTo(resultEntity, opts => opts.Excluding(e => e.RelatedEntity));
        }
        private ICollection <BaseEntityImplementation> GetDataForTests()
        {
            var entity1 = new BaseEntityImplementation()
            {
                Id = 1,
                RelatedEntityId = 1,
                RelatedEntity   = new BaseRelatedEntityImplementation()
                {
                    Id      = 1,
                    Deleted = false
                },
                Deleted = false
            };
            var entity2 = new BaseEntityImplementation()
            {
                Id = 2,
                RelatedEntityId = 2,
                RelatedEntity   = new BaseRelatedEntityImplementation()
                {
                    Id      = 2,
                    Deleted = false
                },
                Deleted = false
            };
            var entity3 = new BaseEntityImplementation()
            {
                Id = 3,
                RelatedEntityId = 3,
                RelatedEntity   = new BaseRelatedEntityImplementation()
                {
                    Id      = 3,
                    Deleted = false
                },
                Deleted = false
            };

            var entities = new List <BaseEntityImplementation>()
            {
                entity1,
                entity2,
                entity3
            };

            return(entities);
        }
        public async Task AddOrUpdateAsync_WhenNew_ReturnsEntityWithId()
        {
            // Arrange
            var entity = new BaseEntityImplementation()
            {
                Id      = 0,
                Deleted = false
            };

            var context    = GetContext();
            var repository = GetRepository(context);

            // Act
            var result = await repository.AddOrUpdateAsync(entity);

            // Assert
            Assert.NotNull(result);
            Assert.NotEqual(0, result.Id);
            Assert.Equal(entity.Deleted, result.Deleted);
        }