public async Task HandleAsync_WithNonInternalAdminRole_ThrowsSecurityException() { // Arrange IWeeeAuthorization authorization = new AuthorizationBuilder() .AllowInternalAreaAccess() .DenyRole(Roles.InternalAdmin) .Build(); var dataAccess = A.Fake<IOrganisationDetailsDataAccess>(); var weeeEmailService = A.Dummy<IWeeeEmailService>(); var handler = new UpdateOrganisationContactDetailsHandler(authorization, dataAccess, weeeEmailService); // Act Func<Task> action = async () => await handler.HandleAsync(A.Dummy<UpdateOrganisationContactDetails>()); // Assert await Assert.ThrowsAsync<SecurityException>(action); }
public async Task HandleAsync_WithNonInternalUserOrOrganisationUser_ThrowsSecurityException() { // Arrange var authorizationBuilder = new AuthorizationBuilder() .DenyInternalOrOrganisationAccess(); var authorization = authorizationBuilder.Build(); var dataAccess = A.Dummy<IOrganisationDetailsDataAccess>(); var weeeEmailService = A.Dummy<IWeeeEmailService>(); var handler = new UpdateOrganisationContactDetailsHandler(authorization, dataAccess, weeeEmailService); var request = new UpdateOrganisationContactDetails(new OrganisationData { Id = Guid.NewGuid() }, false); // Act, Assert await Assert.ThrowsAsync<SecurityException>(() => handler.HandleAsync(request)); }
public async Task HandleAsync_WithValidData_FetchesOrganisationAndUpdatesAndSaves() { // Arrange OrganisationData organisationData = new OrganisationData(); organisationData.Id = new Guid("93646500-85A1-4F9D-AE18-73265426EF40"); organisationData.Contact = new ContactData(); organisationData.Contact.FirstName = "FirstName"; organisationData.Contact.LastName = "LastName"; organisationData.Contact.Position = "Position"; organisationData.OrganisationAddress = new Core.Shared.AddressData(); organisationData.OrganisationAddress.Address1 = "Address1"; organisationData.OrganisationAddress.Address2 = "Address2"; organisationData.OrganisationAddress.TownOrCity = "Town"; organisationData.OrganisationAddress.CountyOrRegion = "County"; organisationData.OrganisationAddress.Postcode = "Postcode"; organisationData.OrganisationAddress.CountryId = new Guid("1AF4BB2F-D2B0-41EA-BFD8-B83764C1ECBC"); organisationData.OrganisationAddress.Telephone = "012345678"; organisationData.OrganisationAddress.Email = "*****@*****.**"; UpdateOrganisationContactDetails request = new UpdateOrganisationContactDetails(organisationData); IWeeeAuthorization authorization = A.Dummy<IWeeeAuthorization>(); IOrganisationDetailsDataAccess dataAccess = A.Fake<IOrganisationDetailsDataAccess>(); IWeeeEmailService weeeEmailService = A.Dummy<IWeeeEmailService>(); Organisation organisation = A.Dummy<Organisation>(); A.CallTo(() => dataAccess.FetchOrganisationAsync(new Guid("93646500-85A1-4F9D-AE18-73265426EF40"))) .Returns(organisation); Country country = new Country( new Guid("1AF4BB2F-D2B0-41EA-BFD8-B83764C1ECBC"), "Name"); A.CallTo(() => dataAccess.FetchCountryAsync(new Guid("1AF4BB2F-D2B0-41EA-BFD8-B83764C1ECBC"))) .Returns(country); UpdateOrganisationContactDetailsHandler handler = new UpdateOrganisationContactDetailsHandler(authorization, dataAccess, weeeEmailService); // Act bool result = await handler.HandleAsync(request); // Assert A.CallTo(() => dataAccess.FetchOrganisationAsync(new Guid("93646500-85A1-4F9D-AE18-73265426EF40"))) .MustHaveHappened(Repeated.Exactly.Once); Assert.Equal("FirstName", organisation.Contact.FirstName); Assert.Equal("LastName", organisation.Contact.LastName); Assert.Equal("Position", organisation.Contact.Position); Assert.Equal("Address1", organisation.OrganisationAddress.Address1); Assert.Equal("Address2", organisation.OrganisationAddress.Address2); Assert.Equal("Town", organisation.OrganisationAddress.TownOrCity); Assert.Equal("County", organisation.OrganisationAddress.CountyOrRegion); Assert.Equal("Postcode", organisation.OrganisationAddress.Postcode); Assert.Equal(new Guid("1AF4BB2F-D2B0-41EA-BFD8-B83764C1ECBC"), organisation.OrganisationAddress.Country.Id); Assert.Equal("012345678", organisation.OrganisationAddress.Telephone); Assert.Equal("*****@*****.**", organisation.OrganisationAddress.Email); A.CallTo(() => dataAccess.SaveAsync()) .MustHaveHappened(Repeated.Exactly.Once); }
public async Task HandleAsync_DetailsChanged_SendNotificationTrue_MatchingScheme_SendsChangeEmail() { // Arrange var authorization = A.Dummy<IWeeeAuthorization>(); var dataAccess = A.Fake<IOrganisationDetailsDataAccess>(); var weeeEmailService = A.Dummy<IWeeeEmailService>(); var handler = new UpdateOrganisationContactDetailsHandler(authorization, dataAccess, weeeEmailService); var contact = new Contact("FirstName", "LastName", "Position"); var countryId = Guid.NewGuid(); var country = new Country(countryId, "Country"); var organisationAddress = new Address("Address1", "Address2", "TownOrCity", "CountyOrRegion", "Postcode", country, "Telephone", "Email"); var organisation = A.Fake<Organisation>(); A.CallTo(() => organisation.Contact) .Returns(contact); A.CallTo(() => organisation.OrganisationAddress) .Returns(organisationAddress); A.CallTo(() => dataAccess.FetchOrganisationAsync(A<Guid>._)) .Returns(organisation); A.CallTo(() => dataAccess.FetchCountryAsync(countryId)) .Returns(country); var newContactDetails = new ContactData { FirstName = "FirstName", LastName = "LastName", Position = "Position" }; var newOrganisationAddress = new AddressData { Address1 = "New Address1", Address2 = "New Address2", CountryId = countryId, CountyOrRegion = "CountyOrRegion", Email = "Email", Postcode = "Postcode", Telephone = "Telephone", TownOrCity = "TownOrCity" }; var organisationId = Guid.NewGuid(); var organisationData = new OrganisationData { Id = organisationId, Contact = newContactDetails, OrganisationAddress = newOrganisationAddress }; var request = new UpdateOrganisationContactDetails(organisationData, true); var scheme = A.Fake<Scheme>(); A.CallTo(() => scheme.SchemeName) .Returns("Test Scheme Name"); var competentAuthority = A.Fake<UKCompetentAuthority>(); A.CallTo(() => competentAuthority.Email) .Returns("*****@*****.**"); A.CallTo(() => scheme.CompetentAuthority) .Returns(competentAuthority); A.CallTo(() => dataAccess.FetchSchemeAsync(organisationId)) .Returns(scheme); // Act await handler.HandleAsync(request); // Assert A.CallTo(() => weeeEmailService.SendOrganisationContactDetailsChanged("*****@*****.**", "Test Scheme Name")) .MustHaveHappened(); }
public async Task HandleAsync_WithOrganisationAddressAndContactDetailsUnchanged_SendNotificationTrue_DoesNotSendChangeEmail() { // Arrange var authorization = A.Dummy<IWeeeAuthorization>(); var dataAccess = A.Fake<IOrganisationDetailsDataAccess>(); var weeeEmailService = A.Dummy<IWeeeEmailService>(); var handler = new UpdateOrganisationContactDetailsHandler(authorization, dataAccess, weeeEmailService); var contact = new Contact("FirstName", "LastName", "Position"); var countryId = Guid.NewGuid(); var country = new Country(countryId, "Country"); var organisationAddress = new Address("Address1", "Address2", "TownOrCity", "CountyOrRegion", "Postcode", country, "Telephone", "Email"); var organisation = A.Fake<Organisation>(); A.CallTo(() => organisation.Contact) .Returns(contact); A.CallTo(() => organisation.OrganisationAddress) .Returns(organisationAddress); A.CallTo(() => dataAccess.FetchOrganisationAsync(A<Guid>._)) .Returns(organisation); A.CallTo(() => dataAccess.FetchCountryAsync(countryId)) .Returns(country); var newContactDetails = new ContactData { FirstName = "FirstName", LastName = "LastName", Position = "Position" }; var newOrganisationAddress = new AddressData { Address1 = "Address1", Address2 = "Address2", CountryId = countryId, CountyOrRegion = "CountyOrRegion", Email = "Email", Postcode = "Postcode", Telephone = "Telephone", TownOrCity = "TownOrCity" }; var organisationData = new OrganisationData { Contact = newContactDetails, OrganisationAddress = newOrganisationAddress }; var request = new UpdateOrganisationContactDetails(organisationData, true); // Act await handler.HandleAsync(request); // Assert A.CallTo(() => weeeEmailService.SendOrganisationContactDetailsChanged(A<string>._, A<string>._)) .MustNotHaveHappened(); }