public async Task<Dictionary<string, string>> Validate (CampaignSummaryModel model)
        {
            var result = new Dictionary<string, string>();

            if (model.EndDate < model.StartDate)
            {
                result.Add(nameof(model.EndDate), "The end date must fall on or after the start date.");
            }

            // Temporary code to avoid current database update error when the post code geo does not exist in the database.
            if (!string.IsNullOrEmpty(model.Location?.PostalCode))
            {
                bool validPostcode = await _mediator.SendAsync(new CheckValidPostcodeQueryAsync
                {
                    Postcode = new PostalCodeGeo
                    {
                        City = model.Location.City,
                        State = model.Location.State,
                        PostalCode = model.Location.PostalCode
                    }
                });

                if (!validPostcode)
                {
                    result.Add(nameof(model.Location.PostalCode), "The city, state and postal code combination is not valid");
                }
            }

            return result;
        }
Beispiel #2
0
        public async Task <Dictionary <string, string> > Validate(CampaignSummaryModel model)
        {
            var result = new Dictionary <string, string>();

            if (model.EndDate < model.StartDate)
            {
                result.Add(nameof(model.EndDate), "The end date must fall on or after the start date.");
            }

            // Temporary code to avoid current database update error when the post code geo does not exist in the database.
            if (!string.IsNullOrEmpty(model.Location?.PostalCode))
            {
                bool validPostcode = await _mediator.SendAsync(new CheckValidPostcodeQueryAsync
                {
                    Postcode = new PostalCodeGeo
                    {
                        City       = model.Location.City,
                        State      = model.Location.State,
                        PostalCode = model.Location.PostalCode
                    }
                });

                if (!validPostcode)
                {
                    result.Add(nameof(model.Location.PostalCode), "The city, state and postal code combination is not valid");
                }
            }

            return(result);
        }
        private static CampaignController CampaignControllerWithSummaryModel(CampaignSummaryModel model, AllReadyContext Context, string userType)
        {
            var mockMediator            = new Mock <IMediator>();
            IAsyncRequest <int> command = new EditCampaignCommand()
            {
                Campaign = model
            };

            mockMediator.Setup(x => x.SendAsync(It.IsAny <EditCampaignCommand>()))
            .Returns(() => {
                IAsyncRequestHandler <EditCampaignCommand, int> handler = new EditCampaignCommandHandler(Context);
                return(handler.Handle((EditCampaignCommand)command));
            });

            var mockImageService = new Mock <IImageService>();

            var controller = new CampaignController(mockMediator.Object, mockImageService.Object);

            controller.SetClaims(new List <Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, userType),
                new Claim(AllReady.Security.ClaimTypes.Organization, model.OrganizationId.ToString())
            });

            return(controller);
        }
        public async Task <IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload)
        {
            if (campaign == null)
            {
                return(HttpBadRequest());
            }

            if (!User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }

            if (ModelState.IsValid)
            {
                if (fileUpload != null)
                {
                    if (fileUpload.IsAcceptableImageContentType())
                    {
                        campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload);
                    }
                    else
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View(campaign));
                    }
                }

                int id = _bus.Send(new EditCampaignCommand {
                    Campaign = campaign
                });
                return(RedirectToAction("Details", new { area = "Admin", id = id }));
            }
            return(View(campaign));
        }
Beispiel #5
0
        public IActionResult Create(int campaignId)
        {
            CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery {
                CampaignId = campaignId
            });

            if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }


            var activity = new ActivityDetailModel
            {
                CampaignId       = campaign.Id,
                CampaignName     = campaign.Name,
                TimeZoneId       = campaign.TimeZoneId,
                OrganizationId   = campaign.OrganizationId,
                OrganizationName = campaign.OrganizationName,
                StartDateTime    = DateTime.Today.Date,
                EndDateTime      = DateTime.Today.Date.AddMonths(1)
            };

            return(View("Edit", activity));
        }
Beispiel #6
0
        public async Task <IActionResult> Create(int campaignId, ActivityDetailModel activity, IFormFile fileUpload)
        {
            if (activity.EndDateTime < activity.StartDateTime)
            {
                ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be earlier than the start date");
            }

            CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery {
                CampaignId = campaignId
            });

            if (campaign == null ||
                !User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }

            if (activity.StartDateTime < campaign.StartDate)
            {
                ModelState.AddModelError(nameof(activity.StartDateTime), "Start date cannot be earlier than the campaign start date " + campaign.StartDate.ToString("d"));
            }

            if (activity.EndDateTime > campaign.EndDate)
            {
                ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be later than the campaign end date " + campaign.EndDate.ToString("d"));
            }

            if (ModelState.IsValid)
            {
                if (fileUpload != null)
                {
                    if (!fileUpload.IsAcceptableImageContentType())
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View("Edit", activity));
                    }
                }

                activity.OrganizationId = campaign.OrganizationId;
                var id = _mediator.Send(new EditActivityCommand {
                    Activity = activity
                });

                if (fileUpload != null)
                {
                    // resave now that activity has the ImageUrl
                    activity.Id       = id;
                    activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, id, fileUpload);

                    _mediator.Send(new EditActivityCommand {
                        Activity = activity
                    });
                }

                return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id }));
            }
            return(View("Edit", activity));
        }
 public void CreateReturnsCorrectViewWithCorrectViewModel()
 {
     var mockMediator = new Mock<IMediator>();
     CampaignController controller = new CampaignController(mockMediator.Object, null);
     ViewResult view = (ViewResult) controller.Create();
     CampaignSummaryModel viewModel = (CampaignSummaryModel)view.ViewData.Model;
     Assert.Equal(view.ViewName, "Edit");
     Assert.NotNull(viewModel);
 }
Beispiel #8
0
        public async Task <IActionResult> Edit(ActivityDetailModel activity, IFormFile fileUpload)
        {
            if (activity == null)
            {
                return(HttpBadRequest());
            }
            //TODO: Use the query pattern here
            int organizationId = _dataAccess.GetManagingOrganizationId(activity.Id);

            if (!User.IsOrganizationAdmin(organizationId))
            {
                return(HttpUnauthorized());
            }

            if (activity.EndDateTime < activity.StartDateTime)
            {
                ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be earlier than the start date");
            }

            CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery {
                CampaignId = activity.CampaignId
            });

            if (activity.StartDateTime < campaign.StartDate)
            {
                ModelState.AddModelError(nameof(activity.StartDateTime), "Start date cannot be earlier than the campaign start date " + campaign.StartDate.ToString("d"));
            }

            if (activity.EndDateTime > campaign.EndDate)
            {
                ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be later than the campaign end date " + campaign.EndDate.ToString("d"));
            }

            if (ModelState.IsValid)
            {
                if (fileUpload != null)
                {
                    if (fileUpload.IsAcceptableImageContentType())
                    {
                        activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, activity.Id, fileUpload);
                    }
                    else
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View(activity));
                    }
                }

                var id = _mediator.Send(new EditActivityCommand {
                    Activity = activity
                });
                return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id }));
            }
            return(View(activity));
        }
Beispiel #9
0
 protected void AssertSummary(CampaignSummaryModel expectedModel, CampaignSummaryModel model)
 {
     Assert.AreEqual(expectedModel.CreatedBy.Id, model.CreatedBy.Id);
     Assert.AreEqual(expectedModel.IsReadOnly, model.IsReadOnly);
     AssertCampaign(expectedModel.Campaign, model.Campaign);
     if (expectedModel.Template == null)
     {
         Assert.IsNull(model.Template);
     }
     else
     {
         AssertTemplate(expectedModel.Template, model.Template);
     }
 }
Beispiel #10
0
        public async Task <IActionResult> Create(int campaignId, ActivityDetailModel activity, IFormFile fileUpload)
        {
            CampaignSummaryModel campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignId });

            if (campaign == null ||
                !User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }

            var validator = new ActivityDetailModelValidator(_mediator);
            var errors    = await validator.Validate(activity, campaign);

            errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value));

            //TryValidateModel is called explictly because of MVC 6 behavior that supresses model state validation during model binding when binding to an IFormFile.
            //See #619.
            if (ModelState.IsValid && TryValidateModel(activity))
            {
                if (fileUpload != null)
                {
                    if (!fileUpload.IsAcceptableImageContentType())
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View("Edit", activity));
                    }
                }

                activity.OrganizationId = campaign.OrganizationId;
                var id = _mediator.Send(new EditActivityCommand {
                    Activity = activity
                });

                if (fileUpload != null)
                {
                    // resave now that activity has the ImageUrl
                    activity.Id       = id;
                    activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, id, fileUpload);

                    _mediator.Send(new EditActivityCommand {
                        Activity = activity
                    });
                }

                return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id }));
            }

            return(View("Edit", activity));
        }
        public IActionResult DeleteConfirmed(int id)
        {
            CampaignSummaryModel campaign = _bus.Send(new CampaignSummaryQuery {
                CampaignId = id
            });

            if (!User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }
            _bus.Send(new DeleteCampaignCommand {
                CampaignId = id
            });
            return(RedirectToAction("Index", new { area = "Admin" }));
        }
Beispiel #12
0
        public async Task<Dictionary<string, string>> Validate (CampaignSummaryModel model)
        {
            var result = new Dictionary<string, string>();

            if (model.EndDate < model.StartDate)
            {
                result.Add(nameof(model.EndDate), "The end date must fall on or after the start date.");
            }

            var postalCodeValidation = new LocationEditModelValidator(_mediator);
            var postalCodeErrors = await postalCodeValidation.Validate(model.Location);
            postalCodeErrors.ToList().ForEach(e => result.Add(e.Key, e.Value));

            return result;
        }
        public async Task AddNewCampaign()
        {
            // Arrange
            var handler     = new EditCampaignCommandHandler(Context);
            var newCampaign = new CampaignSummaryModel {
                Name = "New", Description = "Desc", TimeZoneId = "UTC"
            };

            // Act
            var result = await handler.Handle(new EditCampaignCommand { Campaign = newCampaign });

            // Assert
            Assert.Equal(5, Context.Campaigns.Count());
            Assert.True(result > 0);
        }
        public async Task EditPostAddsCorrectKeyAndErrorMessageToModelStateWhenCampaignEndDateIsLessThanCampainStartDate()
        {
            var campaignSummaryModel = new CampaignSummaryModel { OrganizationId = 1, StartDate = DateTime.Now.AddDays(1), EndDate = DateTime.Now.AddDays(-1)};

            var sut = new CampaignController(null, null);
            sut.SetClaims(new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, campaignSummaryModel.OrganizationId.ToString())
            });

            await sut.Edit(campaignSummaryModel, null);
            var modelStateErrorCollection = sut.ModelState.GetErrorMessagesByKey(nameof(CampaignSummaryModel.EndDate));

            Assert.Equal(modelStateErrorCollection.Single().ErrorMessage, "The end date must fall on or after the start date.");
        }
 public async Task DeleteReturnsCorrectViewModelWhenUserIsOrgAdmin()
 {
     int ORGANIZATION_ID = 99;
     int CAMPAIGN_ID = 100;
     var mockMediator = new Mock<IMediator>();
     mockMediator.Setup(mock => mock.SendAsync(It.Is<CampaignSummaryQuery>(c => c.CampaignId == CAMPAIGN_ID))).ReturnsAsync(new CampaignSummaryModel { Id = CAMPAIGN_ID, OrganizationId = ORGANIZATION_ID });
     CampaignController controller = new CampaignController(mockMediator.Object, null);
     controller.SetClaims(new List<Claim>
     {
         new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
         new Claim(AllReady.Security.ClaimTypes.Organization, ORGANIZATION_ID.ToString())
     });
     ViewResult view = (ViewResult)(await controller.Delete(CAMPAIGN_ID));
     CampaignSummaryModel viewModel = (CampaignSummaryModel)view.ViewData.Model;
     Assert.Equal(viewModel.Id, CAMPAIGN_ID);
 }
Beispiel #16
0
        // GET: Campaign/Delete/5
        public IActionResult Delete(int id)
        {
            CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery {
                CampaignId = id
            });

            if (campaign == null)
            {
                return(HttpNotFound());
            }
            if (!User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }

            return(View(campaign));
        }
        public void ReturnsCorrectErrorWhenEndDateTimeIsLessThanStartDateTime()
        {
            var validator      = new EventEditModelValidator();
            var parentCampaign = new CampaignSummaryModel {
                EndDate = new DateTimeOffset(new DateTime(1999, 2, 1))
            };
            var model = new EventEditModel
            {
                StartDateTime = new DateTimeOffset(new DateTime(2000, 1, 1)),
                EndDateTime   = new DateTimeOffset(new DateTime(1999, 1, 1))
            };

            var errors = validator.Validate(model, parentCampaign);

            Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime")));
            Assert.Equal(errors.Find(x => x.Key == "EndDateTime").Value, "End date cannot be earlier than the start date");
        }
Beispiel #18
0
        public async Task ReportErrorsWhenDatesAreInvalid()
        {
            // arrage
            var mediator  = new Mock <IMediator>();
            var validator = new CampaignSummaryModelValidator(mediator.Object);
            var model     = new CampaignSummaryModel
            {
                StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)),
                EndDate   = new DateTimeOffset(new DateTime(1999, 1, 1))
            };

            // act
            var errors = await validator.Validate(model);

            // assert
            Assert.True(errors.ContainsKey("EndDate"));
        }
Beispiel #19
0
        public async Task ReportErrorsWhenEndDateIsInvalid()
        {
            // arrage
            var mediator  = new Mock <IMediator>();
            var validator = new ActivityDetailModelValidator(mediator.Object);
            var campaign  = new CampaignSummaryModel();
            var model     = new ActivityDetailModel
            {
                StartDateTime = new DateTimeOffset(new DateTime(2000, 1, 1)),
                EndDateTime   = new DateTimeOffset(new DateTime(1999, 1, 1))
            };

            // act
            var errors = await validator.Validate(model, campaign);

            // assert
            Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime")));
        }
Beispiel #20
0
        public async Task <IActionResult> Edit(ActivityDetailModel activity, IFormFile fileUpload)
        {
            if (activity == null)
            {
                return(HttpBadRequest());
            }

            //TODO: Use the query pattern here
            var organizationId = _dataAccess.GetManagingOrganizationId(activity.Id);

            if (!User.IsOrganizationAdmin(organizationId))
            {
                return(HttpUnauthorized());
            }

            CampaignSummaryModel campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = activity.CampaignId });

            var validator = new ActivityDetailModelValidator(_mediator);
            var errors    = await validator.Validate(activity, campaign);

            errors.ForEach(e => ModelState.AddModelError(e.Key, e.Value));

            if (ModelState.IsValid)
            {
                if (fileUpload != null)
                {
                    if (fileUpload.IsAcceptableImageContentType())
                    {
                        activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, activity.Id, fileUpload);
                    }
                    else
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View(activity));
                    }
                }

                var id = _mediator.Send(new EditActivityCommand {
                    Activity = activity
                });
                return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id }));
            }
            return(View(activity));
        }
        public void RetrunsCorrectErrorWhenModelsEndDateTimeIsGreaterThanParentCampaignsEndDate()
        {
            var validator      = new EventEditModelValidator();
            var parentCampaign = new CampaignSummaryModel
            {
                StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)),
                EndDate   = new DateTimeOffset(new DateTime(2001, 1, 1))
            };
            var model = new EventEditModel
            {
                StartDateTime = new DateTimeOffset(new DateTime(2001, 1, 1)),
                EndDateTime   = new DateTimeOffset(new DateTime(2001, 2, 1)),
            };

            var errors = validator.Validate(model, parentCampaign);

            Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime")));
            Assert.Equal(errors.Find(x => x.Key == "EndDateTime").Value, "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d"));
        }
        public void ReturnsCorrectErrorWhenModelsStartDateTimeIsLessThanParentCampaignsStartDate()
        {
            var validator      = new EventDetailModelValidator();
            var parentCampaign = new CampaignSummaryModel
            {
                StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)),
                EndDate   = new DateTimeOffset(new DateTime(2001, 2, 1))
            };

            var model = new EventDetailModel
            {
                EndDateTime = new DateTimeOffset(new DateTime(2001, 1, 1))
            };

            var errors = validator.Validate(model, parentCampaign);

            Assert.True(errors.Exists(x => x.Key.Equals("StartDateTime")));
            Assert.Equal(errors.Find(x => x.Key == "StartDateTime").Value, "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d"));
        }
Beispiel #23
0
        public async Task CampaignDoesNotExist()
        {
            var context = ServiceProvider.GetService <AllReadyContext>();
            var vm      = new CampaignSummaryModel
            {
                TimeZoneId = "Eastern Standard Time"
            };
            var query = new EditCampaignCommand {
                Campaign = vm
            };
            var handler = new EditCampaignCommandHandler(context);
            var result  = await handler.Handle(query);

            Assert.True(result > 0);

            var data = context.Campaigns.Count(_ => _.Id == result);

            Assert.True(data == 1);
        }
Beispiel #24
0
        public void UpdatingExistingCampaignWithNoPriorContactAddsContactWithAllProperties()
        {
            // Arrange
            var name         = "New Name";
            var desc         = "New Desc";
            var org          = 2;
            var contactEmail = "*****@*****.**";
            var firstname    = "John";
            var lastname     = "Doe";
            var telephone    = "01323 111111";

            var handler         = new EditCampaignCommandHandler(Context);
            var updatedCampaign = new CampaignSummaryModel
            {
                Id                        = 2,
                Name                      = name,
                Description               = desc,
                OrganizationId            = org,
                TimeZoneId                = "GMT Standard Time",
                PrimaryContactEmail       = contactEmail,
                PrimaryContactFirstName   = firstname,
                PrimaryContactLastName    = lastname,
                PrimaryContactPhoneNumber = telephone
            };

            // Act
            var result = handler.Handle(new EditCampaignCommand {
                Campaign = updatedCampaign
            });
            var newContact = Context.Contacts.OrderBy(c => c.Id).LastOrDefault();

            // Assert
            Assert.Equal(2, Context.CampaignContacts.Count());
            Assert.Equal(2, Context.Contacts.Count());

            Assert.NotNull(newContact);

            Assert.Equal(contactEmail, newContact.Email);
            Assert.Equal(firstname, newContact.FirstName);
            Assert.Equal(lastname, newContact.LastName);
            Assert.Equal(telephone, newContact.PhoneNumber);
        }
Beispiel #25
0
        public async Task <IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload)
        {
            if (campaign == null)
            {
                return(HttpBadRequest());
            }

            if (!User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(HttpUnauthorized());
            }

            var validator = new CampaignSummaryModelValidator(_mediator);
            var errors    = await validator.Validate(campaign);

            errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value));

            if (ModelState.IsValid)
            {
                if (fileUpload != null)
                {
                    if (fileUpload.IsAcceptableImageContentType())
                    {
                        campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload);
                    }
                    else
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View(campaign));
                    }
                }

                var id = _mediator.SendAsync(new EditCampaignCommand {
                    Campaign = campaign
                });

                return(RedirectToAction(nameof(Details), new { area = "Admin", id = id }));
            }

            return(View(campaign));
        }
Beispiel #26
0
        public void UpdatingExistingCampaignUpdatesAllCoreProperties()
        {
            // Arrange
            var name       = "New Name";
            var desc       = "New Desc";
            var fullDesc   = "New Full Desc";
            var timezoneId = "GMT Standard Time";
            var startDate  = DateTime.Now;
            var endDate    = DateTime.Now.AddDays(30);
            var org        = 2;

            var handler         = new EditCampaignCommandHandler(Context);
            var updatedCampaign = new CampaignSummaryModel {
                Id              = 2,
                Name            = name,
                Description     = desc,
                FullDescription = fullDesc,
                TimeZoneId      = timezoneId,
                StartDate       = startDate,
                EndDate         = endDate,
                OrganizationId  = org,
            };

            // Act
            var result = handler.Handle(new EditCampaignCommand {
                Campaign = updatedCampaign
            });
            var savedCampaign = Context.Campaigns.SingleOrDefault(s => s.Id == 2);

            // Assert
            Assert.Equal(4, Context.Campaigns.Count());
            Assert.Equal(2, result);

            Assert.Equal(name, savedCampaign.Name);
            Assert.Equal(desc, savedCampaign.Description);
            Assert.Equal(fullDesc, savedCampaign.FullDescription);
            Assert.Equal(timezoneId, savedCampaign.TimeZoneId);
            Assert.NotEqual(startDate.Date, new DateTime()); // We're not testing the date logic in this test, only that a datetime value is saved
            Assert.NotEqual(endDate.Date, new DateTime());   // We're not testing the date logic in this test, only that a datetime value is saved
            Assert.Equal(org, savedCampaign.ManagingOrganizationId);
        }
        public async Task EditPostReturnsCorrectViewModelWhenInvalidImageFormatIsSupplied()
        {
            int ORGANIZATION_ID = 100;
            var mockMediator = new Mock<IMediator>();
            var mockImageService = new Mock<IImageService>();

            var sut = new CampaignController(mockMediator.Object, mockImageService.Object);
            sut.SetClaims(new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, ORGANIZATION_ID.ToString())
            });

            var file = FormFile("audio/mpeg3");
            CampaignSummaryModel model = MassiveTrafficLightOutage_model;
            model.OrganizationId = ORGANIZATION_ID;

            ViewResult view = (ViewResult)(await sut.Edit(model, file));
            CampaignSummaryModel viewModel = (CampaignSummaryModel)view.ViewData.Model;
            Assert.True(Object.ReferenceEquals(model, viewModel));
        }
        public List <KeyValuePair <string, string> > Validate(EventEditModel model, CampaignSummaryModel parentCampaign)
        {
            var result = new List <KeyValuePair <string, string> >();

            if (model.EndDateTime < model.StartDateTime)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date"));
            }

            if (model.StartDateTime < parentCampaign.StartDate)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d")));
            }

            if (model.EndDateTime > parentCampaign.EndDate)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d")));
            }

            return(result);
        }
        public List<KeyValuePair<string, string>> Validate(EventEditModel model, CampaignSummaryModel parentCampaign)
        {
            var result = new List<KeyValuePair<string, string>>();

            if (model.EndDateTime < model.StartDateTime)
            {
                result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date"));
            }

            if (model.StartDateTime < parentCampaign.StartDate)
            {
                result.Add(new KeyValuePair<string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d")));
            }

            if (model.EndDateTime > parentCampaign.EndDate)
            {
                result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d")));
            }

            return result;
        }
Beispiel #30
0
        public void UpdatingExistingCampaignUpdatesLocationWithAllProperties()
        {
            // Arrange
            var name     = "New Name";
            var desc     = "New Desc";
            var org      = 2;
            var address1 = "Address 1";
            var address2 = "Address 1";
            var city     = "City";
            var state    = "State";
            var postcode = "45231";
            var country  = "USA";

            var handler         = new EditCampaignCommandHandler(Context);
            var updatedCampaign = new CampaignSummaryModel
            {
                Id             = 2,
                Name           = name,
                Description    = desc,
                OrganizationId = org,
                TimeZoneId     = "GMT Standard Time",
                Location       = new LocationEditModel {
                    Address1 = address1, Address2 = address2, City = city, State = state, PostalCode = postcode
                }
            };

            // Act
            var result = handler.Handle(new EditCampaignCommand {
                Campaign = updatedCampaign
            });
            var savedCampaign = Context.Campaigns.SingleOrDefault(s => s.Id == 2);

            // Assert
            Assert.Equal(address1, savedCampaign.Location.Address1);
            Assert.Equal(address2, savedCampaign.Location.Address2);
            Assert.Equal(city, savedCampaign.Location.City);
            Assert.Equal(state, savedCampaign.Location.State);
            Assert.Equal(postcode, savedCampaign.Location.PostalCode.PostalCode);
            Assert.Equal(country, savedCampaign.Location.Country);
        }
Beispiel #31
0
        public async Task ReportErrorsWhenPostalCodeIsInvalid()
        {
            // arrange
            var mediator = new Mock <IMediator>();

            mediator.Setup(m => m.SendAsync(It.IsAny <CheckValidPostcodeQueryAsync>())).ReturnsAsync(false);

            var validator = new CampaignSummaryModelValidator(mediator.Object);
            var model     = new CampaignSummaryModel
            {
                Location = new LocationEditModel {
                    PostalCode = "90210"
                }
            };

            // act
            var errors = await validator.Validate(model);

            // assert
            mediator.Verify(m => m.SendAsync(It.IsAny <CheckValidPostcodeQueryAsync>()));
            Assert.True(errors.ContainsKey("PostalCode"));
        }
Beispiel #32
0
        public async Task <IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload)
        {
            if (campaign == null)
            {
                return(BadRequest());
            }

            if (!User.IsOrganizationAdmin(campaign.OrganizationId))
            {
                return(Unauthorized());
            }

            if (campaign.EndDate < campaign.StartDate)
            {
                ModelState.AddModelError(nameof(campaign.EndDate), "The end date must fall on or after the start date.");
            }

            if (ModelState.IsValid)
            {
                if (fileUpload != null)
                {
                    if (fileUpload.IsAcceptableImageContentType())
                    {
                        campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload);
                    }
                    else
                    {
                        ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)");
                        return(View(campaign));
                    }
                }

                var id = await _mediator.SendAsync(new EditCampaignCommand { Campaign = campaign });

                return(RedirectToAction(nameof(Details), new { area = "Admin", id = id }));
            }

            return(View(campaign));
        }
        public async Task<List<KeyValuePair<string, string>>> Validate(ActivityDetailModel model, CampaignSummaryModel parentCampaign)
        {
            var result = new List<KeyValuePair<string, string>>();

            if (model.EndDateTime < model.StartDateTime)
            {
                result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date"));
            }

            if (model.StartDateTime < parentCampaign.StartDate)
            {
                result.Add(new KeyValuePair<string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d")));
            }

            if (model.EndDateTime > parentCampaign.EndDate)
            {
                result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d")));
            }

            var postalCodeValidation = new LocationEditModelValidator(_mediator);
            var postalCodeErrors = await postalCodeValidation.Validate(model.Location);
            postalCodeErrors.ToList().ForEach(e => result.Add(new KeyValuePair<string, string>(e.Key, e.Value)));
            return result;
        }