public void GetVet_ParametersMatchExpectedValues() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var fakeVet = new FakeVet { }.Generate(); //Act using (var context = new VetClinicDbContext(dbOptions)) { context.Vets.AddRange(fakeVet); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); //Assert var vetById = service.GetVet(fakeVet.VetId); vetById.VetId.Should().Be(fakeVet.VetId); vetById.Name.Should().Be(fakeVet.Name); vetById.Capacity.Should().Be(fakeVet.Capacity); vetById.OpenDate.Should().Be(fakeVet.OpenDate); vetById.HasSpayNeuter.Should().Be(fakeVet.HasSpayNeuter); } }
public async void GetVetsAsync_ListOpenDateSortedInDescOrder() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var currentUser = new Mock <ICurrentUserService>(); currentUser.SetupGet(c => c.UserId).Returns("testuser"); var currentUserService = currentUser.Object; var fakeVetOne = new FakeVet { }.Generate(); fakeVetOne.OpenDate = DateTime.Now.AddDays(2); var fakeVetTwo = new FakeVet { }.Generate(); fakeVetTwo.OpenDate = DateTime.Now.AddDays(1); var fakeVetThree = new FakeVet { }.Generate(); fakeVetThree.OpenDate = DateTime.Now.AddDays(3); //Act using (var context = new VetClinicDbContext(dbOptions, currentUserService, new DateTimeService())) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); var vetRepo = await service.GetVetsAsync(new VetParametersDto { SortOrder = "-OpenDate" }); //Assert vetRepo.Should() .ContainInOrder(fakeVetThree, fakeVetOne, fakeVetTwo); context.Database.EnsureDeleted(); } }
public async void GetVetsAsync_FilterHasSpayNeuterListWithExact() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var currentUser = new Mock <ICurrentUserService>(); currentUser.SetupGet(c => c.UserId).Returns("testuser"); var currentUserService = currentUser.Object; var fakeVetOne = new FakeVet { }.Generate(); fakeVetOne.HasSpayNeuter = false; var fakeVetTwo = new FakeVet { }.Generate(); fakeVetTwo.HasSpayNeuter = true; var fakeVetThree = new FakeVet { }.Generate(); fakeVetThree.HasSpayNeuter = false; //Act using (var context = new VetClinicDbContext(dbOptions, currentUserService, new DateTimeService())) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); var vetRepo = await service.GetVetsAsync(new VetParametersDto { Filters = $"HasSpayNeuter == true" }); //Assert vetRepo.Should() .HaveCount(1); context.Database.EnsureDeleted(); } }
public void DeleteVet_ReturnsProperCount() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var currentUser = new Mock <ICurrentUserService>(); currentUser.SetupGet(c => c.UserId).Returns("testuser"); var currentUserService = currentUser.Object; var fakeVetOne = new FakeVet { }.Generate(); var fakeVetTwo = new FakeVet { }.Generate(); var fakeVetThree = new FakeVet { }.Generate(); //Act using (var context = new VetClinicDbContext(dbOptions, currentUserService, new DateTimeService())) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); service.DeleteVet(fakeVetTwo); context.SaveChanges(); //Assert var vetList = context.Vets.ToList(); vetList.Should() .NotBeEmpty() .And.HaveCount(2); vetList.Should().ContainEquivalentOf(fakeVetOne); vetList.Should().ContainEquivalentOf(fakeVetThree); Assert.DoesNotContain(vetList, v => v == fakeVetTwo); context.Database.EnsureDeleted(); } }
public async void GetVetsAsync_CountMatchesAndContainsEquivalentObjects() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var currentUser = new Mock <ICurrentUserService>(); currentUser.SetupGet(c => c.UserId).Returns("testuser"); var currentUserService = currentUser.Object; var fakeVetOne = new FakeVet { }.Generate(); var fakeVetTwo = new FakeVet { }.Generate(); var fakeVetThree = new FakeVet { }.Generate(); //Act using (var context = new VetClinicDbContext(dbOptions, currentUserService, new DateTimeService())) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); var vetRepo = await service.GetVetsAsync(new VetParametersDto()); //Assert vetRepo.Should() .NotBeEmpty() .And.HaveCount(3); vetRepo.Should().ContainEquivalentOf(fakeVetOne); vetRepo.Should().ContainEquivalentOf(fakeVetTwo); vetRepo.Should().ContainEquivalentOf(fakeVetThree); context.Database.EnsureDeleted(); } }
public async void GetVetsAsync_ReturnExpectedPageSize() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var fakeVetOne = new FakeVet { }.Generate(); var fakeVetTwo = new FakeVet { }.Generate(); var fakeVetThree = new FakeVet { }.Generate(); // need id's due to default sorting fakeVetOne.VetId = 1; fakeVetTwo.VetId = 2; fakeVetThree.VetId = 3; //Act using (var context = new VetClinicDbContext(dbOptions)) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); var vetRepo = await service.GetVetsAsync(new VetParametersDto { PageSize = 2 }); //Assert vetRepo.Should() .NotBeEmpty() .And.HaveCount(2); vetRepo.Should().ContainEquivalentOf(fakeVetOne); vetRepo.Should().ContainEquivalentOf(fakeVetTwo); context.Database.EnsureDeleted(); } }
public async void GetVetsAsync_FilterOpenDateListWithExact() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var fakeVetOne = new FakeVet { }.Generate(); fakeVetOne.OpenDate = DateTime.Now.AddDays(1); var fakeVetTwo = new FakeVet { }.Generate(); fakeVetTwo.OpenDate = DateTime.Parse(DateTime.Now.AddDays(2).ToString("MM/dd/yyyy")); var fakeVetThree = new FakeVet { }.Generate(); fakeVetThree.OpenDate = DateTime.Now.AddDays(3); //Act using (var context = new VetClinicDbContext(dbOptions)) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); var vetRepo = await service.GetVetsAsync(new VetParametersDto { Filters = $"OpenDate == {fakeVetTwo.OpenDate}" }); //Assert vetRepo.Should() .HaveCount(1); context.Database.EnsureDeleted(); } }
public async void GetVetsAsync_ListCapacitySortedInDescOrder() { //Arrange var dbOptions = new DbContextOptionsBuilder <VetClinicDbContext>() .UseInMemoryDatabase(databaseName: $"VetDb{Guid.NewGuid()}") .Options; var sieveOptions = Options.Create(new SieveOptions()); var fakeVetOne = new FakeVet { }.Generate(); fakeVetOne.Capacity = 2; var fakeVetTwo = new FakeVet { }.Generate(); fakeVetTwo.Capacity = 1; var fakeVetThree = new FakeVet { }.Generate(); fakeVetThree.Capacity = 3; //Act using (var context = new VetClinicDbContext(dbOptions)) { context.Vets.AddRange(fakeVetOne, fakeVetTwo, fakeVetThree); context.SaveChanges(); var service = new VetRepository(context, new SieveProcessor(sieveOptions)); var vetRepo = await service.GetVetsAsync(new VetParametersDto { SortOrder = "-Capacity" }); //Assert vetRepo.Should() .ContainInOrder(fakeVetThree, fakeVetOne, fakeVetTwo); context.Database.EnsureDeleted(); } }
public async Task GetVets_ReturnsSuccessCodeAndResourceWithAccurateFields() { var fakeVetOne = new FakeVet { }.Generate(); var fakeVetTwo = new FakeVet { }.Generate(); var appFactory = _factory; using (var scope = appFactory.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <VetClinicDbContext>(); context.Database.EnsureCreated(); //context.Vets.RemoveRange(context.Vets); context.Vets.AddRange(fakeVetOne, fakeVetTwo); context.SaveChanges(); } var client = appFactory.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false }); var result = await client.GetAsync("api/Vets") .ConfigureAwait(false); var responseContent = await result.Content.ReadAsStringAsync() .ConfigureAwait(false); var response = JsonConvert.DeserializeObject <IEnumerable <VetDto> >(responseContent); // Assert result.StatusCode.Should().Be(200); response.Should().ContainEquivalentOf(fakeVetOne, options => options.ExcludingMissingMembers()); response.Should().ContainEquivalentOf(fakeVetTwo, options => options.ExcludingMissingMembers()); }
public async Task PatchVet204AndFieldsWereSuccessfullyUpdated() { //Arrange var mapper = new MapperConfiguration(cfg => { cfg.AddProfile <VetProfile>(); }).CreateMapper(); var lookupVal = "Easily Identified Value For Test"; // don't know the id at this scope, so need to have another value to lookup var fakeVetOne = new FakeVet { }.Generate(); var expectedFinalObject = mapper.Map <VetDto>(fakeVetOne); expectedFinalObject.Name = lookupVal; var appFactory = _factory; using (var scope = appFactory.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <VetClinicDbContext> (); context.Database.EnsureCreated(); context.Vets.RemoveRange(context.Vets); context.Vets.AddRange(fakeVetOne); context.SaveChanges(); } var client = appFactory.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false }); var patchDoc = new JsonPatchDocument <VetForUpdateDto>(); patchDoc.Replace(v => v.Name, lookupVal); var serializedVetToUpdate = JsonConvert.SerializeObject(patchDoc); // Act // get the value i want to update. assumes I can use sieve for this field. if this is not an option, just use something else var getResult = await client.GetAsync($"api/Vets/?filters=Name=={fakeVetOne.Name}") .ConfigureAwait(false); var getResponseContent = await getResult.Content.ReadAsStringAsync() .ConfigureAwait(false); var getResponse = JsonConvert.DeserializeObject <Response <IEnumerable <VetDto> > >(getResponseContent); var id = getResponse.Data.FirstOrDefault().VetId; // patch it var method = new HttpMethod("PATCH"); var patchRequest = new HttpRequestMessage(method, $"api/Vets/{id}") { Content = new StringContent(serializedVetToUpdate, Encoding.Unicode, "application/json") }; var patchResult = await client.SendAsync(patchRequest) .ConfigureAwait(false); // get it again to confirm updates var checkResult = await client.GetAsync($"api/Vets/{id}") .ConfigureAwait(false); var checkResponseContent = await checkResult.Content.ReadAsStringAsync() .ConfigureAwait(false); var checkResponse = JsonConvert.DeserializeObject <Response <VetDto> >(checkResponseContent); // Assert patchResult.StatusCode.Should().Be(204); checkResponse.Should().BeEquivalentTo(expectedFinalObject, options => options.ExcludingMissingMembers()); }
public async Task PutVetReturnsBodyAndFieldsWereSuccessfullyUpdated() { //Arrange var mapper = new MapperConfiguration(cfg => { cfg.AddProfile <VetProfile>(); }).CreateMapper(); var fakeVetOne = new FakeVet { }.Generate(); var expectedFinalObject = mapper.Map <VetDto>(fakeVetOne); expectedFinalObject.Name = "Easily Identified Value For Test"; var appFactory = _factory; using (var scope = appFactory.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <VetClinicDbContext> (); context.Database.EnsureCreated(); context.Vets.RemoveRange(context.Vets); context.Vets.AddRange(fakeVetOne); context.SaveChanges(); } var client = appFactory.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false }); var serializedVetToUpdate = JsonConvert.SerializeObject(expectedFinalObject); // Act // get the value i want to update. assumes I can use sieve for this field. if this is not an option, just use something else var getResult = await client.GetAsync($"api/Vets/?filters=Name=={fakeVetOne.Name}") .ConfigureAwait(false); var getResponseContent = await getResult.Content.ReadAsStringAsync() .ConfigureAwait(false); var getResponse = JsonConvert.DeserializeObject <Response <IEnumerable <VetDto> > >(getResponseContent); var id = getResponse.Data.FirstOrDefault().VetId; // put it var patchResult = await client.PutAsJsonAsync($"api/Vets/{id}", expectedFinalObject) .ConfigureAwait(false); // get it again to confirm updates var checkResult = await client.GetAsync($"api/Vets/{id}") .ConfigureAwait(false); var checkResponseContent = await checkResult.Content.ReadAsStringAsync() .ConfigureAwait(false); var checkResponse = JsonConvert.DeserializeObject <Response <VetDto> >(checkResponseContent); // Assert patchResult.StatusCode.Should().Be(204); checkResponse.Should().BeEquivalentTo(expectedFinalObject, options => options.ExcludingMissingMembers()); }