Example #1
0
        public async Task TestUpdate()
        {
            // Arrange
            var person = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            string newVorname;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                var personAct = await personen.GetById(person.BaPersonID);

                newVorname        = personAct.Vorname + "-test";
                personAct.Vorname = newVorname;
                //await personen.InsertOrUpdateEntity(personAct);

                await context.SaveChangesAsync();
            }

            // Assert
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen     = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                var personAssert = await personen.GetById(person.BaPersonID);

                personAssert.Vorname.ShouldBe(newVorname);
            }
        }
Example #2
0
        public async Task TestUpdateShouldAffectRowversion()
        {
            // Arrange
            var testPerson = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            byte[] rowversionBefore;
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                var person = await personen.GetById(testPerson.BaPersonID);

                rowversionBefore = testPerson.BaPersonTs;
                person.Vorname  += "test";
                await personen.InsertOrUpdateEntity(person);

                await context.SaveChangesAsync();
            }

            // Assert
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                var personAssert = await personen.GetById(testPerson.BaPersonID);

                personAssert.ShouldNotBeNull();
                var rowversionAfter = personAssert.BaPersonTs;
                rowversionAfter.ShouldNotBe(rowversionBefore);
            }
        }
Example #3
0
        public async Task Authenticate_HasClaims()
        {
            var testServerHandler = IntegrationTestEnvironment.TestIdentityServer.CreateHandler();
            var discoveryClient   = new DiscoveryClient(TestServerFixture.Authority, testServerHandler);

            discoveryClient.Policy.ValidateIssuerName = false;
            var disco = await discoveryClient.GetAsync();

            disco.Error.ShouldBeNull();

            var userTestData  = IntegrationTestEnvironment.TestData <XUserTestData>();
            var admin         = userTestData.Administrator;
            var tokenClient   = new TokenClient(disco.TokenEndpoint, "webclient.ro", "EA59A39A-B03D-4985-A4FA-9297663A1858", testServerHandler);
            var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync(admin.LogonName, XUserTestData.AdminPassword, "api");

            tokenResponse.Error.ShouldBeNull();

            var token = new JwtSecurityTokenHandler().ReadToken(tokenResponse.AccessToken) as JwtSecurityToken;

            token.ShouldNotBeNull();
            token.Claims.ShouldContain(clm => clm.Type == Kiss4WebClaims.LogonName);
            token.Claims.ShouldContain(clm => clm.Type == Kiss4WebClaims.ShortName);
            token.Claims.First(clm => clm.Type == Kiss4WebClaims.LogonName).Value.ShouldBe(admin.LogonName);
            token.Claims.First(clm => clm.Type == Kiss4WebClaims.ShortName).Value.ShouldBe(admin.ShortName);
        }
Example #4
0
        public async Task TestUpdateUnchangedEntityInDifferentContextTimestampShouldBeUnchanged()
        {
            // Arrange
            var testPerson   = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;
            var testPersonId = testPerson.Id;

            byte[] timestampBefore;
            byte[] timestampAfter;
            byte[] timestampNewRead;

            // Act
            // Testperson laden
            BaPerson person;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                person = await personen.GetById(testPersonId);

                timestampBefore = person.BaPersonTs;
            }

            // make a change and then reverse it
            var originalName = person.Name;

            person.Name = originalName + " test";
            person.Name = originalName;

            // save
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                await personen.InsertOrUpdateEntity(person);

                await context.SaveChangesAsync();

                timestampAfter = person.BaPersonTs;
            }

            // Assert
            BaPerson personAssert;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                personAssert = await personen.GetById(testPersonId);

                timestampNewRead = personAssert.BaPersonTs;
            }
            personAssert.Name.ShouldBe(testPerson.Name);
            timestampBefore.ShouldBe(timestampAfter, "Timestamp should be unchanged since the entity was unchanged");
            timestampBefore.ShouldBe(timestampNewRead, "Timestamp should be unchanged also on the database");
        }
Example #5
0
        public async Task TestGet()
        {
            var expectedPerson = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                var person   = await personen.GetById(expectedPerson.Id);

                // Assert
                person.ShouldNotBeNull("Person not found");
                person.BaPersonID.ShouldBe(expectedPerson.Id);
                person.Name.ShouldBe(expectedPerson.Name);
                person.Vorname.ShouldBe(expectedPerson.Vorname);
            }
        }
Example #6
0
        public async Task Authenticate_Failure()
        {
            var testServerHandler = IntegrationTestEnvironment.TestIdentityServer.CreateHandler();
            var discoveryClient   = new DiscoveryClient(TestServerFixture.Authority, testServerHandler);

            discoveryClient.Policy.ValidateIssuerName = false;
            var disco = await discoveryClient.GetAsync();

            disco.Error.ShouldBeNull();

            var userTestData  = IntegrationTestEnvironment.TestData <XUserTestData>();
            var admin         = userTestData.Administrator;
            var tokenClient   = new TokenClient(disco.TokenEndpoint, "webclient.ro", "EA59A39A-B03D-4985-A4FA-9297663A1858", testServerHandler);
            var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync(admin.LogonName, XUserTestData.AdminPassword + "Wrong", "api");

            tokenResponse.IsError.ShouldBeTrue();
        }
Example #7
0
        public async Task TestGetInUnchangedState()
        {
            var expectedPerson = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context = IntegrationTestEnvironment.Container.GetInstance <Kiss4DbContext>();

                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                var person   = await personen.GetById(expectedPerson.Id);

                // Assert
                context.ChangeTracker.DetectChanges();
                var entry = context.ChangeTracker.Entries <BaPerson>().FirstOrDefault(prs => prs.Entity.BaPersonID == person.Id);
                entry.ShouldNotBeNull();

                entry.State.ShouldBe(EntityState.Unchanged);
            }
        }
Example #8
0
        public async Task TestUpdateDetectConcurrencyProblem()
        {
            // Arrange
            var person = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            // first User gets an entity
            BaPerson personGet;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                personGet = await personen.GetById(person.BaPersonID);

                personGet.Bemerkung += "bla";
            }

            // simulate second (quicker) User who changes the same entity
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                var personQuick = await personen.GetById(person.BaPersonID);

                personQuick.Bemerkung += "blabla";
                //await personen.InsertOrUpdateEntity(person);
                await context.SaveChangesAsync();
            }

            // nun speichert der langsamere User und sollte eine Concurrency-Exception erhalten
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                await personen.InsertOrUpdateEntity(personGet);

                var ex = await Should.ThrowAsync <DbUpdateConcurrencyException>(() => context.SaveChangesAsync(), "Concurrency problem was not detected");
            }
        }
Example #9
0
        public async Task TestInsertWithReference()
        {
            var testPerson = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Arrange
            const string strasse    = "Teststrasse";
            var          baPersonId = testPerson.BaPersonID;

            var adresse = new BaAdresse
            {
                BaPerson   = testPerson,
                BaPersonId = testPerson.BaPersonID,
                Strasse    = strasse
            };

            // Act
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var adressen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaAdresse> >();

                await adressen.InsertOrUpdateEntity(adresse);

                await context.SaveChangesAsync();
            }
            var baPersonIdInserted = adresse.BaPersonId;

            // Assert
            adresse.BaAdresseId.ShouldNotBe(0);
            baPersonIdInserted.ShouldBe(baPersonId, "Referenzierte Person darf nicht noch einmal eingefügt werden");
            BaAdresse adresseAssert;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var adressen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaAdresse> >();
                adresseAssert = await adressen.GetById(adresse.BaAdresseId);
            }
            adresseAssert.Strasse.ShouldBe(strasse);
            adresseAssert.BaPersonId.ShouldBe(baPersonId);
        }
Example #10
0
        public async Task Test_DontUpdateUnchangedReferencedEntity()
        {
            var testUser    = IntegrationTestEnvironment.TestData <XUserTestData>().Administrator;
            var testAdresse = new BaAdresse
            {
                UserId    = testUser.UserID,
                Bemerkung = "testadresse"
            };

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <Kiss4DbContext>();
                var adressen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaAdresse> >();

                await adressen.InsertOrUpdateEntity(testAdresse);

                await context.SaveChangesAsync();
            }

            // Arrange
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <Kiss4DbContext>();
                var adressen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaAdresse> >();
                var adresse  = await adressen.Where(adr => adr.Id == testAdresse.BaAdresseId)
                               .Include(adr => adr.User)
                               .FirstOrDefaultAsync();

                // Act
                adresse.Bemerkung += "blabla";
                await adressen.InsertOrUpdateEntity(adresse);

                // wird XUser updated? falls ja, gibt es eine exception, weil keine HistoryVersion erstellt wurde
                await context.SaveChangesAsync();

                // Assert
                // nop, keine exception heisst ok
            }
        }
Example #11
0
        public async Task TestRemove()
        {
            // Arrange
            var person = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                personen.Remove(person);
                await context.SaveChangesAsync();
            }

            // Assert
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen     = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                var personAssert = await personen.GetById(person.BaPersonID);

                personAssert.ShouldBeNull();
            }
        }
Example #12
0
        public async Task Test_UpdateAfterDeleteByOtherUser_ExceptionShouldBeThrown()
        {
            // Arrange
            var testPerson = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;

            // Act
            BaPerson person;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                person = await personen.GetById(testPerson.BaPersonID);
            }

            var originalName = person.Name;

            person.Name = originalName + " test";
            person.Name = originalName;

            // other user deletes entity
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <Kiss4DbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                personen.Remove(prs => prs.BaPersonID == testPerson.BaPersonID);
                person = await personen.GetById(testPerson.BaPersonID);

                await context.SaveChangesAsync();
            }

            // try to save
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                await Should.ThrowAsync <DbUpdateException>(() => personen.InsertOrUpdateEntity(person));
            }
        }
Example #13
0
        public async Task TestUpdate_CreatedShouldBeUnchanged()
        {
            // Arrange
            var person = IntegrationTestEnvironment.TestData <BaPersonTestData>().Vasquez;
            var now    = new DateTime(2020, 1, 1);

            IntegrationTestEnvironment.DateTime.SetLocalTime(now);
            var createdBefore = person.Created;

            // Act
            string newVorname;

            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var context  = IntegrationTestEnvironment.Container.GetInstance <IDbContext>();
                var personen = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();

                var personAct = await personen.GetById(person.BaPersonID);

                newVorname        = personAct.Vorname + "-test";
                personAct.Vorname = newVorname;
                //await personen.InsertOrUpdateEntity(personAct);

                await context.SaveChangesAsync();
            }

            // Assert
            using (new EnsureExecutionScope(IntegrationTestEnvironment.Container))
            {
                var personen     = IntegrationTestEnvironment.Container.GetInstance <IRepository <BaPerson> >();
                var personAssert = await personen.GetById(person.BaPersonID);

                personAssert.Vorname.ShouldBe(newVorname);
                personAssert.Created.ShouldBeWithSqlDateTimePrecision(createdBefore);
            }
        }