public void DeleteDeletesCorrectly() { var methodName = MethodBase.GetCurrentMethod().Name; var options = new DbContextOptionsBuilder <GTLContext>().UseInMemoryDatabase(methodName).Options; // add volumes to db using (var context = new GTLContext(options)) { context.AddRange(volumes); context.SaveChanges(); } // delete volume using (var context = new GTLContext(options)) { var volumeController = ControllerFactory.CreateVolumeController(context); var volumeToDelete = volumes[1]; volumeController.Delete(volumeToDelete); var fetchedVolume = context.Volumes.Find(volumeToDelete.VolumeId); var fetchedVolumes = context.Volumes.ToList(); Assert.Multiple(() => { // assert that the fetched volume is null - deleted from db Assert.That(fetchedVolume, Is.Null); // assert that number of volumes decreased by 1 Assert.AreEqual(fetchedVolumes.Count, volumes.Count - 1); }); } }
public void UpdateMemberWithNewAddress() { MethodBase method = MethodBase.GetCurrentMethod(); DbContextOptions <GTLContext> options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(method.Name).EnableSensitiveDataLogging(true) .Options; using (var context = new GTLContext(options)) { //setup IMemberController mController = ControllerFactory.CreateMemberController(context); InsertDummyData(context); var member = mController.Create(ssn, fName, lName, homeAddres, campusAddress, zip, homeAddressAdditionalInfo, mTypes); IAddressController aController = ControllerFactory.CreateAddressController(context); var newAddress = aController.Create("Blaviken street", "Be careful of the Dog", zip); //Action mController.Insert(member); //--update the member with new info, find it again make sure they are actually updated. var updatedMember = mController.FindByName(member.FName); updatedMember.HomeAddress = newAddress; mController.Update(updatedMember); member = mController.FindByName(member.FName); Assert.That(member, Is.EqualTo(updatedMember)); } }
public void CreateCreatesCorrectAddressInstance() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using (var context = new GTLContext(options)) { context.Add(zip); context.SaveChanges(); } // action using (var context = new GTLContext(options)) { var addressController = ControllerFactory.CreateAddressController(context); var address = addressController.Create(street, additionalInfo, zip.Code); // assertion Assert.That(address, Has .Property(nameof(Address.Street)).EqualTo(street).And .Property(nameof(Address.AdditionalInfo)).EqualTo(additionalInfo).And .Property(nameof(Address.Zip))); } }
public void InsertInsertsCorrectly() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action using (var context = new GTLContext(options)) { var authorController = ControllerFactory.CreateAuthorController(context); var author = new Author { FirstName = authorFirstName, LastName = authorLastName }; authorController.Insert(author); } // assertion using (var context = new GTLContext(options)) { var fetchedAuthor = context.Authors .FirstOrDefault(a => a.FirstName == authorFirstName && a.LastName == authorLastName); Assert.That(fetchedAuthor, Has .Property(nameof(Author.FirstName)).EqualTo(authorFirstName).And .Property(nameof(Author.LastName)).EqualTo(authorLastName)); } }
public void InsertInsertsCorrectly() { var methodName = MethodBase.GetCurrentMethod().Name; var options = new DbContextOptionsBuilder <GTLContext>().UseInMemoryDatabase(methodName).Options; var materialId = 1; var homeLocationId = 1; var currentLocationId = 1; using (var context = new GTLContext(options)) { var volumeController = ControllerFactory.CreateVolumeController(context); var volume = new Volume { MaterialId = materialId, HomeLocationId = homeLocationId, CurrentLocationId = currentLocationId }; volumeController.Insert(volume); } using (var context = new GTLContext(options)) { var insertedVolume = context.Volumes.FirstOrDefault(v => v.MaterialId == materialId && v.CurrentLocationId == currentLocationId && v.HomeLocationId == homeLocationId); Assert.That(insertedVolume, Has .Property(nameof(Volume.MaterialId)) .EqualTo(materialId) .And .Property(nameof(Volume.HomeLocationId)) .EqualTo(homeLocationId) .And .Property(nameof(Volume.CurrentLocationId)) .EqualTo(currentLocationId) ); } }
public void FindByIdFindsAnExistingAuthor() { // setup int authorId; var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action using (var context = new GTLContext(options)) { var author = new Author { FirstName = authorFirstName, LastName = authorLastName }; context.Add(author); context.SaveChanges(); authorId = author.AuthorId; } // assertion using (var context = new GTLContext(options)) { var authorController = ControllerFactory.CreateAuthorController(context); var fetchedAuthor = authorController.FindByID(authorId); Assert.That(fetchedAuthor, Has .Property(nameof(Author.FirstName)).EqualTo(authorFirstName).And .Property(nameof(Author.LastName)).EqualTo(authorLastName)); } }
public void UpdateMembertypeOnMember() { MethodBase method = MethodBase.GetCurrentMethod(); DbContextOptions <GTLContext> options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(method.Name).EnableSensitiveDataLogging(true) .Options; MemberType student = new MemberType() { TypeName = "Student" }; MemberType staff = new MemberType() { TypeName = "Staff" }; List <MemberType> memberTypes = new List <MemberType>(); memberTypes.Add(student); using (var context = new GTLContext(options)) { //Basic environment. IMemberController mController = ControllerFactory.CreateMemberController(context); InsertDummyData(context); var member = mController.Create(ssn, fName, lName, homeAddres, campusAddress, zip, homeAddressAdditionalInfo, memberTypes); mController.Insert(member); memberTypes.Add(staff); //Actions mController.UpdateMembershipsOnMember(member, memberTypes); mController.Update(member); var updatedMember = mController.FindByName(member.FName); //Assertations! Assert.That(member, Is.EqualTo(updatedMember)); } }
public void FindByName() { MethodBase method = MethodBase.GetCurrentMethod(); DbContextOptions <GTLContext> options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(method.Name).EnableSensitiveDataLogging(true) .Options; using (var context = new GTLContext(options)) { //as long as dbContext is needed for initializing controller. this can't easily be extracted - so it must be in each method. IMemberController mController = ControllerFactory.CreateMemberController(context); InsertDummyData(context); var member = mController.Create(ssn, fName, lName, homeAddres, campusAddress, zip, homeAddressAdditionalInfo, mTypes); string firstName = "Bodacious"; string lastName = "Booty"; member.FName = firstName; member.LName = lastName; //currently not inserting data for some reason. //action mController.Insert(member); //Assertation Assert.That(member, Has. Property("FName").EqualTo(firstName) .And.Property("LName").EqualTo(lastName)); var foundMember = mController.FindByName(member.FName); Assert.That(member, Is.EqualTo(foundMember)); }; }
public void FindAllReturnsAPopulatedList() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using (var context = new GTLContext(options)) { var material = new Material { Isbn = _isbn, Title = _title, Description = _description, Lendable = _lendable, Language = _language, Type = _materialType, }; context.Materials.Add(material); context.SaveChanges(); } // action using (var context = new GTLContext(options)) { var controller = ControllerFactory.CreateMaterialController(context); var materialList = controller.FindAll(); Assert.That(materialList, Is.Not.Empty); } }
public void AddMemberShipToMember() { MethodBase method = MethodBase.GetCurrentMethod(); DbContextOptions <GTLContext> options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(method.Name).EnableSensitiveDataLogging(true) .Options; using (var context = new GTLContext(options)) { IMemberController mController = ControllerFactory.CreateMemberController(context); InsertDummyData(context); MemberType teachingAssistant = new MemberType() { TypeName = "Teaching Assistant" }; var member = mController.Create(ssn, fName, lName, homeAddres, campusAddress, zip, homeAddressAdditionalInfo, mTypes); mController.Insert(member); mTypes.Add(teachingAssistant); member.Memberships = mController.UpdateMembershipsOnMember(member, mTypes); mController.Update(member); Assert.That(member, Is.EqualTo(mController.FindByName(member.FName))); } }
public void CreateCreatesCorrectly() { // setup var bookType = new MaterialType { Type = "Book" }; var programmingSubject = new MaterialSubject { SubjectName = "Programming" }; var author = new Author { FirstName = "Nikola", LastName = "Velichkov" }; var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using (var context = new GTLContext(options)) { context.Add(bookType); context.Add(programmingSubject); context.Add(author); context.SaveChanges(); } // action using (var context = new GTLContext(options)) { var controller = ControllerFactory.CreateMaterialController(context); var material = controller.Create( _isbn, _title, _language, _lendable, _description, bookType, new List <MaterialSubject> { programmingSubject }, new List <Author> { author } ); // assertion Assert.That(material, Has .Property(nameof(Material.Isbn)).EqualTo(_isbn).And .Property(nameof(Material.Title)).EqualTo(_title).And .Property(nameof(Material.Language)).EqualTo(_language).And .Property(nameof(Material.Lendable)).EqualTo(_lendable).And .Property(nameof(Material.Description)).EqualTo(_description).And .Property(nameof(Material.Type)).And .Property(nameof(Material.MaterialSubjects)).And .Property(nameof(Material.MaterialAuthors))); } }
public void UpdateUpdatesCorrectly() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; int materialId; var newTitle = "Some other title"; var newLanguage = "Danish"; using (var context = new GTLContext(options)) { var material = new Material { Isbn = _isbn, Title = _title, Language = _language, Lendable = _lendable, Description = _description, Type = _materialType, }; context.Add(material); context.SaveChanges(); materialId = material.MaterialId; } // action using (var context = new GTLContext(options)) { var controller = ControllerFactory.CreateMaterialController(context); var material = context.Materials.Find(materialId); material.Title = newTitle; material.Language = newLanguage; controller.Update(material); } // assertion using (var context = new GTLContext(options)) { var material = context.Materials.Find(materialId); Assert.That(material, Has .Property(nameof(Material.Isbn)).EqualTo(_isbn).And .Property(nameof(Material.Title)).EqualTo(newTitle).And .Property(nameof(Material.Language)).EqualTo(newLanguage).And .Property(nameof(Material.Lendable)).EqualTo(_lendable).And .Property(nameof(Material.Description)).EqualTo(_description).And .Property(nameof(Material.Type)) ); } }
private void InsertDummyData(GTLContext context) { //this should be passed by reference, and as such work with differnet objects without carrying the data over. ZipCode zipCode = new ZipCode { City = "Georgia", Code = zip }; context.ZipCodes.Add(zipCode); context.MemberTypes.AddRange(mTypes); context.SaveChanges(); }
public void InsertThrowsArgumentNullExceptionWithNullAuthorParam() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using var context = new GTLContext(options); var authorController = ControllerFactory.CreateAuthorController(context); // assertion Assert.Throws <ArgumentNullException>(() => authorController.Insert(null)); }
public void FindAllReturnsAnEmptyList() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // don't add any materials using var context = new GTLContext(options); var controller = ControllerFactory.CreateMaterialController(context); var materialList = controller.FindAll(); Assert.That(materialList, Is.Empty); }
public void FindByIdReturnsNullWhenMaterialNotFound() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action using var context = new GTLContext(options); var controller = ControllerFactory.CreateMaterialController(context); var material = controller.FindByID(42); Assert.That(material, Is.Null); }
public void CreateThrowsAnArgumentExceptionWithAZipThatDoesNotExist() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action using var context = new GTLContext(options); var addressController = ControllerFactory.CreateAddressController(context); // assertion Assert.Throws <ArgumentException>(() => addressController.Create(street, additionalInfo, zip.Code)); }
public void FindByIdDoesNotFindAnInstance() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action using var context = new GTLContext(options); var addressController = ControllerFactory.CreateAddressController(context); // some random number, doesn't matter what, DB should be empty var address = addressController.FindByID(42); Assert.That(address, Is.Null); }
public void CreateThrowsArgumentExceptionWithEmptyFirstNameArgument() { // setup authorFirstName = ""; var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using var context = new GTLContext(options); var authorController = ControllerFactory.CreateAuthorController(context); // assertion Assert.Throws <ArgumentException>(() => authorController.Create(authorFirstName, authorLastName)); }
public void FindByIdReturnsNullOnANonExistingAuthor() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action using var context = new GTLContext(options); var authorController = ControllerFactory.CreateAuthorController(context); // some random number, doesn't matter what var fetchedAuthor = authorController.FindByID(11); // assertion Assert.That(fetchedAuthor, Is.Null); }
public void GetMembershipsOfMember() { MethodBase method = MethodBase.GetCurrentMethod(); DbContextOptions <GTLContext> options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(method.Name).EnableSensitiveDataLogging(true) .Options; using (var context = new GTLContext(options)) { IMemberController mController = ControllerFactory.CreateMemberController(context); InsertDummyData(context); var member = mController.Create(ssn, fName, lName, homeAddres, campusAddress, zip, homeAddressAdditionalInfo, mTypes); mController.Insert(member); //This only checks that the numbers of memberships on the member is correct. It does not check what the individual ones are. Assert.That(member.Memberships.Count, Is.EqualTo(mTypes.Count)); } }
public void FindMaterialsFetchesMaterialsWithMultipleAuthors() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .UseLazyLoadingProxies() .Options; var authorOne = new Author { FirstName = authorFirstName, LastName = authorLastName }; var authorTwo = new Author { FirstName = "Gergana", LastName = "Petkova" }; // action // add authors to materials materials.ForEach(material => { material.MaterialAuthors = new List <MaterialAuthor> { new MaterialAuthor { Author = authorOne, Material = material }, new MaterialAuthor { Author = authorTwo, Material = material } }; }); using (var context = new GTLContext(options)) { context.AddRange(materials); context.SaveChanges(); } // assertion using (var context = new GTLContext(options)) { var authorController = ControllerFactory.CreateAuthorController(context); var fetchedAuthor = context.Authors.FirstOrDefault(a => a.FirstName == authorOne.FirstName); var fetchedMaterials = authorController.FindMaterials(fetchedAuthor); Assert.That(fetchedMaterials, Has.Exactly(materials.Count).Items); } }
// should be more tests with the same conditions for different properties of Material // (Isbn, Title, Language, Description, Lendable?) public void CreateThrowsAnArgumentNullExceptionOnNullOrEmptyTitle() { // setup var bookType = new MaterialType { Type = "Book" }; var programmingSubject = new MaterialSubject { SubjectName = "Programming" }; var author = new Author { FirstName = "Nikola", LastName = "Velichkov" }; var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using (var context = new GTLContext(options)) { context.Add(bookType); context.Add(programmingSubject); context.Add(author); context.SaveChanges(); } // assertion using (var context = new GTLContext(options)) { var controller = ControllerFactory.CreateMaterialController(context); Assert.Throws <ArgumentNullException>(() => controller.Create( _isbn, "", _language, _lendable, _description, bookType, new List <MaterialSubject> { programmingSubject }, new List <Author> { author } )); } }
public void CreateCreatesCorrectAuthorInstance() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; using var context = new GTLContext(options); var authorController = ControllerFactory.CreateAuthorController(context); // action var author = authorController.Create(authorFirstName, authorLastName); // assertion Assert.That(author, Has .Property(nameof(Author.FirstName)).EqualTo(authorFirstName).And .Property(nameof(Author.LastName)).EqualTo(authorLastName)); }
public void CreateCreatesCorrectly() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; int memberId; int volumeId; using (var context = new GTLContext(options)) { context.Add(_member); context.Add(_volume); context.SaveChanges(); memberId = _member.MemberId; volumeId = _volume.VolumeId; } // action using (var context = new GTLContext(options)) { var member = context.Members.Find(memberId); var volume = context.Volumes.Find(volumeId); var controller = ControllerFactory.CreateLoanController(context); var loan = controller.Create(member, volume); // assertion var today = DateTime.Today; var dueDate = DateTime.Today.AddDays(LoanController.LendingPeriod); Assert.That(loan, Has .Property(nameof(Loan.Member)).Not.Null.And .Property(nameof(Loan.Volume)).Not.Null.And .Property(nameof(Loan.LoanDate)).EqualTo(today).And .Property(nameof(Loan.DueDate)).EqualTo(dueDate).And .Property(nameof(Loan.ReturnedDate)).Null.And .Property(nameof(Loan.Extensions)).EqualTo(0) ); } }
public void CreateWithNonExistingDataThrowsArgumentException() { var methodName = MethodBase.GetCurrentMethod().Name; var options = new DbContextOptionsBuilder <GTLContext>().UseInMemoryDatabase(methodName).Options; // There is no material and address with the following IDs in the DB var materialId = 1; var homeLocationId = 1; var currentLocationId = 1; using (var context = new GTLContext(options)) { var volumeController = ControllerFactory.CreateVolumeController(context); // Since there is no address and material in the DB, creating a volume with those // references should throw and exception Assert.Throws <ArgumentException>(() => volumeController.Create(materialId, homeLocationId, currentLocationId)); } }
public void CreateCreatesCorrectly() { var methodName = MethodBase.GetCurrentMethod().Name; var options = new DbContextOptionsBuilder <GTLContext>().UseInMemoryDatabase(methodName).Options; // setup using (var context = new GTLContext(options)) { var zip = new ZipCode { City = "Aalborg", Code = 9000 }; // zip has to be saved in db in order for the address to be created context.Add(zip); context.SaveChanges(); var homeAddress = new Address { Street = "Main road 4", AdditionalInfo = "4.floor, 10", Zip = zip }; var currentAddress = new Address { Street = "Library road 5", AdditionalInfo = "1.floor", Zip = zip }; var material = new Material { Isbn = "1234321", Title = "Mat title", Description = "A description", Language = "English", Lendable = true }; context.Add(homeAddress); context.Add(currentAddress); context.Add(material); context.SaveChanges(); var volumeController = ControllerFactory.CreateVolumeController(context); var createdVolume = volumeController.Create(materialId: material.MaterialId, homeLocationId: homeAddress.AddressId, currentLocationId: currentAddress.AddressId); Assert.Multiple(() => { Assert.AreEqual(createdVolume.Material.MaterialId, material.MaterialId); Assert.AreEqual(createdVolume.HomeLocation.AddressId, homeAddress.AddressId); Assert.AreEqual(createdVolume.CurrentLocation.AddressId, currentAddress.AddressId); }); } }
public void InsertMemberIntoDatabase() { MethodBase method = MethodBase.GetCurrentMethod(); DbContextOptions <GTLContext> options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(method.Name).EnableSensitiveDataLogging(true) .Options; using (var context = new GTLContext(options)) { IMemberController mController = ControllerFactory.CreateMemberController(context); //Currently only inserting for the first method calling it. InsertDummyData(context); var member = mController.Create(ssn, fName, lName, homeAddres, campusAddress, zip, homeAddressAdditionalInfo, mTypes); mController.Insert(member); Assert.That(member, Has.Property("FName").EqualTo(fName).And.Property("LName").EqualTo(lName) ); } }
public void FindByIdFindsAnExistingMaterial() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; // action int materialId; using (var context = new GTLContext(options)) { var material = new Material { Isbn = _isbn, Title = _title, Language = _language, Lendable = _lendable, Description = _description, Type = _materialType, }; context.Add(material); context.SaveChanges(); materialId = material.MaterialId; } // assertion using (var context = new GTLContext(options)) { var controller = ControllerFactory.CreateMaterialController(context); var material = controller.FindByID(materialId); Assert.That(material, Has .Property(nameof(Material.Isbn)).EqualTo(_isbn).And .Property(nameof(Material.Title)).EqualTo(_title).And .Property(nameof(Material.Language)).EqualTo(_language).And .Property(nameof(Material.Lendable)).EqualTo(_lendable).And .Property(nameof(Material.Description)).EqualTo(_description).And .Property(nameof(Material.Type))); } }
public void DeleteDeletesCorrectly() { // setup var options = new DbContextOptionsBuilder <GTLContext>() .UseInMemoryDatabase(MethodBase.GetCurrentMethod().Name) .Options; int materialId; using (var context = new GTLContext(options)) { var material = new Material { Isbn = _isbn, Title = _title, Language = _language, Lendable = _lendable, Description = _description, Type = _materialType, }; context.Add(material); context.SaveChanges(); materialId = material.MaterialId; } // action using (var context = new GTLContext(options)) { var controller = ControllerFactory.CreateMaterialController(context); var material = context.Materials.Find(materialId); controller.Delete(material); } // assertion using (var context = new GTLContext(options)) { var material = context.Materials.Find(materialId); Assert.That(material, Is.Null); } }