Exemplo n.º 1
0
        public async Task FindAsyncLoadsEntityWithComplexId()
        {
            DbContextDataProvider <DefaultDataProvider, TestContext> provider = CreateProvider();

            var dbEntity = new DbEntityWithComplexId
            {
                Id      = 1,
                Version = 1,
                Value   = Guid.NewGuid().ToString()
            };

            TestContext testContext = provider.GetContext();

            testContext.ComplexEntities.Add(dbEntity);
            await testContext.SaveChangesAsync();

            TestContextComplexIdRepository repository = CreateComplexIdRepository(provider);
            EntityWithComplexId            result     = await repository.FindAsync(
                new VersionId(dbEntity.Id, dbEntity.Version),
                CancellationToken.None);

            result.Id.Should()
            .Be(new VersionId(dbEntity.Id, dbEntity.Version));

            result.Should()
            .BeEquivalentTo(result);
        }
Exemplo n.º 2
0
        public async Task UpdateSucceedsIfExpectedChangeTokenMatches()
        {
            DbContextDataProvider <DefaultDataProvider, TestContext> provider = CreateProvider();
            string          changeToken = Guid.NewGuid().ToString("N");
            ITokenGenerator generator   = CreateTokenGenerator(changeToken);

            TestContext testContext = provider.GetContext();
            var         dbEntity    = new DbEntityWithChangeToken()
            {
                ChangeToken = changeToken
            };

            testContext.ChangeTokenEntities.Add(dbEntity);
            await testContext.SaveChangesAsync();

            TestContextChangeTokenExRepository repository = CreateChangeTokenExRepository(provider, generator);
            await repository.UpdateAsync(
                new EntityWithChangeTokenEx { Id = dbEntity.Id, ChangeToken = "abc", ExpectedChangeToken = changeToken },
                CancellationToken.None);
        }
Exemplo n.º 3
0
        public async Task CreateUsesExplicitChangeToken()
        {
            DbContextDataProvider <DefaultDataProvider, TestContext> provider = CreateProvider();
            string changeToken = Guid.NewGuid().ToString("N");

            TestContextChangeTokenExRepository repository = CreateChangeTokenExRepository(provider, Substitute.For <ITokenGenerator>());

            EntityWithChangeTokenEx result = await repository.CreateAsync(
                new EntityWithChangeTokenEx { ChangeToken = changeToken },
                CancellationToken.None);

            result.ChangeToken.Should()
            .Be(changeToken);

            DbEntityWithChangeToken dbEntity =
                await provider.GetContext()
                .ChangeTokenEntities.FirstAsync(e => e.Id == result.Id);

            dbEntity.ChangeToken.Should()
            .Be(changeToken);
        }
Exemplo n.º 4
0
        public async Task CreateInitializesChangeTokenEx()
        {
            DbContextDataProvider <DefaultDataProvider, TestContext> provider = CreateProvider();
            string          changeToken = Guid.NewGuid().ToString("N");
            ITokenGenerator generator   = CreateTokenGenerator(changeToken);

            TestContextChangeTokenExRepository repository = CreateChangeTokenExRepository(provider, generator);

            EntityWithChangeTokenEx result = await repository.CreateAsync(
                new EntityWithChangeTokenEx(),
                CancellationToken.None);

            result.ChangeToken.Should()
            .Be(changeToken);

            DbEntityWithChangeToken dbEntity =
                await provider.GetContext()
                .ChangeTokenEntities.FirstAsync(e => e.Id == result.Id);

            dbEntity.ChangeToken.Should()
            .Be(changeToken);
        }
Exemplo n.º 5
0
        private static TestContextComplexIdRepository CreateComplexIdRepository(
            DbContextDataProvider <DefaultDataProvider, TestContext> provider)
        {
            var entityMapper = Substitute.For <IEntityMapper>();

            entityMapper.Map <EntityWithComplexId>(Arg.Any <DbEntityWithComplexId>())
            .Returns(
                ci =>
            {
                var dbEntity = ci.ArgAt <DbEntityWithComplexId>(0);
                return(new EntityWithComplexId
                {
                    Id = new VersionId(dbEntity.Id, dbEntity.Version),
                    Value = dbEntity.Value
                });
            });

            return(new TestContextComplexIdRepository(
                       provider,
                       Substitute.For <ITokenGenerator>(),
                       entityMapper,
                       Substitute.For <ILogger>()));
        }
Exemplo n.º 6
0
        private static TestContextChangeTokenRepository CreateChangeTokenRepository(
            DbContextDataProvider <DefaultDataProvider, TestContext> provider,
            ITokenGenerator generator)
        {
            var entityMapper = Substitute.For <IEntityMapper>();

            entityMapper.Map <EntityWithChangeToken>(Arg.Any <DbEntityWithChangeToken>())
            .Returns(
                ci =>
            {
                var dbEntity = ci.ArgAt <DbEntityWithChangeToken>(0);
                return(new EntityWithChangeToken
                {
                    Id = dbEntity.Id,
                    ChangeToken = dbEntity.ChangeToken
                });
            });

            entityMapper.Map <DbEntityWithChangeToken>(Arg.Any <EntityWithChangeToken>())
            .Returns(
                ci =>
            {
                var dbEntity = ci.ArgAt <EntityWithChangeToken>(0);
                return(new DbEntityWithChangeToken
                {
                    Id = dbEntity.Id,
                    ChangeToken = dbEntity.ChangeToken
                });
            });

            return(new TestContextChangeTokenRepository(
                       provider,
                       generator,
                       entityMapper,
                       Substitute.For <ILogger>()));
        }
Exemplo n.º 7
0
        public async Task UpdateThrowsIfExpectedChangeTokenDoesNotMatch()
        {
            DbContextDataProvider <DefaultDataProvider, TestContext> provider = CreateProvider();
            string          changeToken = Guid.NewGuid().ToString("N");
            ITokenGenerator generator   = CreateTokenGenerator(changeToken);

            TestContext testContext = provider.GetContext();
            var         dbEntity    = new DbEntityWithChangeToken()
            {
                ChangeToken = changeToken
            };

            testContext.ChangeTokenEntities.Add(dbEntity);
            await testContext.SaveChangesAsync();

            TestContextChangeTokenExRepository repository = CreateChangeTokenExRepository(provider, generator);

            await Assert.ThrowsAsync <EntityConcurrencyException>(
                () => repository.UpdateAsync(
                    new EntityWithChangeTokenEx {
                Id = dbEntity.Id, ExpectedChangeToken = "abc"
            },
                    CancellationToken.None));
        }