コード例 #1
0
        public async Task InitializeForUpdateAsync()
        {
            var expenseService = new Mock <IExpenseService>();
            var expense01      = new Expense {
                Id = "Expense01", Date = DateTime.MinValue + TimeSpan.FromDays(4)
            };
            var expense02 = new Expense {
                Id = "Expense02", Date = DateTime.MinValue + TimeSpan.FromDays(3)
            };
            var expense03 = new Expense {
                Id = "Expense03", Date = DateTime.MinValue + TimeSpan.FromDays(2), ReportId = "report01"
            };
            var expenses = new[] { expense01, expense02 };

            expenseService
            .Setup(m => m.GetUnregisteredExpensesAsync())
            .ReturnsAsync(expenses);
            expenseService
            .Setup(m => m.GetExpensesFromReportIdAsync("report01"))
            .ReturnsAsync(new[] { expense03 });

            var reportDate = DateTime.Parse("2100/01/01");
            var report     = new Report {
                Id = "report01", Name = "reportName", Date = reportDate
            };

            expenseService
            .Setup(m => m.GetReportAsync("report01"))
            .ReturnsAsync(report);

            var dateTimeService = new Mock <IDateTimeService>();

            dateTimeService
            .Setup(m => m.Today)
            .Returns(DateTime.MaxValue);

            var actual = new EditReport(expenseService.Object, dateTimeService.Object);

            await actual.InitializeForUpdateReportAsync("report01");

            Assert.Equal("reportName", actual.Name);

            // The initial value is today.
            // Consider the case when it is the next day at the time of execution.
            Assert.Equal(reportDate, actual.Date);

            Assert.NotNull(actual.SelectableExpenses);
            Assert.Equal(3, actual.SelectableExpenses.Count);

            Assert.True(actual.SelectableExpenses[0].IsSelected);
            Assert.Equal((string)expense03.Id, actual.SelectableExpenses[0].Id);

            Assert.False(actual.SelectableExpenses[1].IsSelected);
            Assert.Equal((string)expense02.Id, actual.SelectableExpenses[1].Id);

            Assert.False(actual.SelectableExpenses[2].IsSelected);
            Assert.Equal((string)expense01.Id, actual.SelectableExpenses[2].Id);
        }
コード例 #2
0
        public async Task InitializeForNewReportAsyncWhenReportIdIsNull()
        {
            var expenseService  = new Mock <IExpenseService>();
            var dateTimeService = new Mock <IDateTimeService>();
            var editReport      = new EditReport(expenseService.Object, dateTimeService.Object);
            var actuial         = await Assert.ThrowsAsync <ArgumentNullException>(() => editReport.InitializeForUpdateReportAsync(null));

            Assert.Equal("reportId", actuial.ParamName);
        }
 public EditReportViewModel(EditReport etitReportViewOpen, vwReport reportToEdit, tblEmployee employeeLogIn)
 {
     view            = etitReportViewOpen;
     employeeService = new EmployeeService();
     managerService  = new MenagerService();
     reportService   = new ReportService();
     Report          = reportToEdit;
     LogedEmployee   = employeeLogIn;
 }
コード例 #4
0
        public void NameProperty()
        {
            var expenseService  = new Mock <IExpenseService>();
            var dateTimeService = new Mock <IDateTimeService>();
            var actual          = new EditReport(expenseService.Object, dateTimeService.Object);

            Assert.PropertyChanged(actual, "Name", () => { actual.Name = "NewName"; });

            Assert.Equal("NewName", actual.Name);
        }
コード例 #5
0
        public async Task <IActionResult> CreateReport([Bind("LocationOfHazard", "DateOfSpottedHazard", "TypeOfHazard", "Description", "ImageToUpload")] EditReport newReport)
        {
            ViewBag.typesofhazard = new SelectList(hazardtypes);
            try
            {
                if (ModelState.IsValid)
                {
                    string fileName = "";
                    if (newReport.ImageToUpload != null)
                    {
                        var extension = "." + newReport.ImageToUpload.FileName.Split('.')[newReport.ImageToUpload.FileName.Split('.').Length - 1];
                        fileName = Guid.NewGuid().ToString() + extension;
                        var path = Directory.GetCurrentDirectory() + "\\wwwroot\\images\\reports\\" + fileName;
                        using (var bits = new FileStream(path, FileMode.Create))
                        {
                            newReport.ImageToUpload.CopyTo(bits);
                        }
                    }
                    else
                    {
                        // Default image that's displayed if no image was uploaded
                        fileName = "default.png";
                    }

                    Report report = new Report()
                    {
                        Reporter            = await _userManager.GetUserAsync(User),
                        DateOfReport        = DateTime.UtcNow,
                        LocationOfHazard    = newReport.LocationOfHazard,
                        DateOfSpottedHazard = newReport.DateOfSpottedHazard,
                        TypeOfHazard        = newReport.TypeOfHazard,
                        Description         = newReport.Description,
                        ImageUrl            = "/images/reports/" + fileName,
                        Upvotes             = 0,
                        Status = "Open"
                    };

                    report.Reporter.NumberOfReports++; // increment number of reports

                    _logger.LogInformation("User " + User.Identity.Name + " created a report");

                    _reportRepository.CreateReport(report);
                    return(RedirectToAction("Index"));
                }
                else
                {
                    return(View(newReport));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(View("Error"));
            }
        }
コード例 #6
0
        public void DateProperty()
        {
            var expenseService  = new Mock <IExpenseService>();
            var dateTimeService = new Mock <IDateTimeService>();
            var actual          = new EditReport(expenseService.Object, dateTimeService.Object);

            DateTime newDateTime = DateTime.MaxValue;

            Assert.PropertyChanged(actual, "Date", () => { actual.Date = newDateTime; });

            Assert.Equal(newDateTime, actual.Date);
        }
コード例 #7
0
        public void Constructor()
        {
            var expenseService  = new Mock <IExpenseService>();
            var dateTimeService = new Mock <IDateTimeService>();
            var actual          = new EditReport(expenseService.Object, dateTimeService.Object);

            Assert.Null(actual.Name);

            Assert.Equal(default(DateTime), actual.Date);

            Assert.NotNull(actual.SelectableExpenses);
            Assert.False(actual.SelectableExpenses.Any());
        }
コード例 #8
0
        private void EditReportExecute()
        {
            try
            {
                EditReport editReport = new EditReport(SelectedReport, EmployeeLogedIn);

                editReport.ShowDialog();

                ReportList = reportService.GetAllReports();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
コード例 #9
0
        public async Task SaveAsync()
        {
            var expenseService = new Mock <IExpenseService>();
            var expense01      = new Expense();
            var expense02      = new Expense();
            var expenses       = new[] { expense01, expense02 };

            expenseService
            .Setup(m => m.GetUnregisteredExpensesAsync())
            .ReturnsAsync(expenses);

            var dateTimeService = new Mock <IDateTimeService>();
            var editReport      = new EditReport(expenseService.Object, dateTimeService.Object);

            await editReport.InitializeForNewReportAsync();

            editReport.Name = "InputName";
            editReport.Date = DateTime.MinValue;
            editReport.SelectableExpenses[1].IsSelected = true;

            Report savedReport = null;
            IEnumerable <Expense> savedExpenses = null;

            expenseService
            .Setup(m => m.RegisterReportAsync(It.IsAny <Report>(), It.IsAny <IEnumerable <Expense> >()))
            .Callback <Report, IEnumerable <Expense> >((argReport, argExpenses) =>
            {
                savedReport   = argReport;
                savedExpenses = argExpenses;
            })
            .Returns(Task.CompletedTask);

            await editReport.SaveAsync();

            Assert.NotNull(savedReport);
            Assert.Null(savedReport.Id);
            Assert.Equal("InputName", savedReport.Name);
            Assert.Equal(DateTime.MinValue, savedReport.Date);

            Assert.NotNull(savedExpenses);
            Assert.Single(savedExpenses);
            Assert.Equal(expense02.Id, savedExpenses.First().Id);
        }
コード例 #10
0
        public async Task <IActionResult> EditReport(int id)
        {
            ViewBag.typesofhazard = new SelectList(hazardtypes);
            try
            {
                var existingReport = _reportRepository.GetReportsById(id);
                if (existingReport != null)
                {
                    var currentUser = await _userManager.GetUserAsync(User);

                    if (existingReport.Reporter.IdNum == currentUser.IdNum)
                    {
                        EditReport model = new EditReport()
                        {
                            ReportId            = existingReport.ReportId,
                            LocationOfHazard    = existingReport.LocationOfHazard,
                            DateOfSpottedHazard = existingReport.DateOfSpottedHazard,
                            TypeOfHazard        = existingReport.TypeOfHazard,
                            Description         = existingReport.Description,
                            Status   = existingReport.Status,
                            ImageUrl = existingReport.ImageUrl
                        };

                        return(View(model));
                    }
                    else
                    {
                        return(Unauthorized());
                    }
                }
                else
                {
                    return(RedirectToAction("Index"));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(View("Error"));
            }
        }
コード例 #11
0
        public async Task InitializeForNewReportAsync()
        {
            var expenseService = new Mock <IExpenseService>();
            var expense01      = new Expense {
                Id = "Expense01", Date = DateTime.MinValue + TimeSpan.FromDays(1)
            };
            var expense02 = new Expense {
                Id = "Expense02", Date = DateTime.MinValue + TimeSpan.FromDays(2)
            };
            var unregisteredExpenses = new [] { expense01, expense02 };

            expenseService
            .Setup(m => m.GetUnregisteredExpensesAsync())
            .ReturnsAsync(unregisteredExpenses);

            var dateTimeService = new Mock <IDateTimeService>();

            dateTimeService
            .Setup(m => m.Today)
            .Returns(DateTime.MaxValue);

            var actual = new EditReport(expenseService.Object, dateTimeService.Object);

            await actual.InitializeForNewReportAsync();

            Assert.Null(actual.Name);

            // The initial value is today.
            // Consider the case when it is the next day at the time of execution.
            Assert.Equal(DateTime.MaxValue, actual.Date);

            Assert.NotNull(actual.SelectableExpenses);
            Assert.Equal(2, actual.SelectableExpenses.Count);

            Assert.False(actual.SelectableExpenses[0].IsSelected);
            Assert.Equal((string)expense01.Id, actual.SelectableExpenses[0].Id);

            Assert.False(actual.SelectableExpenses[1].IsSelected);
            Assert.Equal((string)expense02.Id, actual.SelectableExpenses[1].Id);
        }
コード例 #12
0
        public async Task SaceForUpdateAsync()
        {
            var expenseService = new Mock <IExpenseService>();
            var expense01      = new Expense {
                Id = "Expense01", Date = DateTime.MinValue + TimeSpan.FromDays(4)
            };
            var expense02 = new Expense {
                Id = "Expense02", Date = DateTime.MinValue + TimeSpan.FromDays(3)
            };
            var expenses = new[] { expense01, expense02 };

            expenseService
            .Setup(m => m.GetUnregisteredExpensesAsync())
            .ReturnsAsync(expenses);

            var expense03 = new Expense {
                Id = "Expense03", Date = DateTime.MinValue + TimeSpan.FromDays(2), ReportId = "report01"
            };

            expenseService
            .Setup(m => m.GetExpensesFromReportIdAsync("report01"))
            .ReturnsAsync(new[] { expense03 });

            var report = new Report {
                Id = "report01", Name = "reportName", Date = DateTime.MinValue, UserId = "user01"
            };

            expenseService
            .Setup(m => m.GetReportAsync("report01"))
            .ReturnsAsync(report);

            var dateTimeService = new Mock <IDateTimeService>();

            var editReport = new EditReport(expenseService.Object, dateTimeService.Object);

            await editReport.InitializeForUpdateReportAsync("report01");

            editReport.Name = "UpdatedName";
            editReport.Date = DateTime.MaxValue;
            editReport.SelectableExpenses[0].IsSelected = !editReport.SelectableExpenses[0].IsSelected;
            editReport.SelectableExpenses[1].IsSelected = !editReport.SelectableExpenses[1].IsSelected;
            editReport.SelectableExpenses[2].IsSelected = !editReport.SelectableExpenses[2].IsSelected;

            Report         savedReport   = null;
            List <Expense> savedExpenses = null;

            expenseService
            .Setup(m => m.RegisterReportAsync(It.IsAny <Report>(), It.IsAny <IEnumerable <Expense> >()))
            .Callback <Report, IEnumerable <Expense> >((argReport, argExpenses) =>
            {
                savedReport   = argReport;
                savedExpenses = argExpenses.ToList();
            })
            .Returns(Task.CompletedTask);

            await editReport.SaveAsync();

            Assert.NotNull(savedReport);
            Assert.Equal("report01", savedReport.Id);
            Assert.Equal("UpdatedName", savedReport.Name);
            Assert.Equal(DateTime.MaxValue, savedReport.Date);
            Assert.Equal("user01", savedReport.UserId);

            Assert.NotNull(savedExpenses);
            Assert.Equal(2, savedExpenses.Count);
            Assert.Equal(expense02.Id, savedExpenses[0].Id);
            Assert.Equal(expense01.Id, savedExpenses[1].Id);
        }
コード例 #13
0
        public async Task <IActionResult> EditReport(int id, [Bind("ReportId, LocationOfHazard, DateOfSpottedHazard, TypeOfHazard, Description, ImageUrl, ImageToUpload")] EditReport updatedReport)
        {
            try
            {
                //1. Check for incoming data integrity
                if (id != updatedReport.ReportId)
                {
                    return(NotFound());
                }

                //2. Check if the user has access to this report
                var existingReport = _reportRepository.GetReportsById(id);
                if (existingReport != null)
                {
                    var currentUser = await _userManager.GetUserAsync(User);

                    if (existingReport.Reporter.IdNum == currentUser.IdNum)
                    {
                        //2. Validate model
                        if (ModelState.IsValid)
                        {
                            if (updatedReport.ImageToUpload != null)
                            {
                                string fileName = "";
                                //At this point you should check size, extension etc...
                                //.....
                                //Then persist using a new name for consistency (e.g. new Guid)
                                var extension = "." + updatedReport.ImageToUpload.FileName.Split('.')[updatedReport.ImageToUpload.FileName.Split('.').Length - 1];
                                fileName = Guid.NewGuid().ToString() + extension;
                                var path = Directory.GetCurrentDirectory() + "\\wwwroot\\images\\reports\\" + fileName;
                                using (var bits = new FileStream(path, FileMode.Create))
                                {
                                    updatedReport.ImageToUpload.CopyTo(bits);
                                }

                                updatedReport.ImageUrl = "/images/reposts/" + fileName;
                            }

                            Report updated_Report = new Report()
                            {
                                ReportId            = updatedReport.ReportId,
                                Reporter            = await _userManager.GetUserAsync(User),
                                LocationOfHazard    = updatedReport.LocationOfHazard,
                                DateOfSpottedHazard = updatedReport.DateOfSpottedHazard,
                                TypeOfHazard        = updatedReport.TypeOfHazard,
                                Description         = updatedReport.Description,
                                ImageUrl            = updatedReport.ImageUrl,
                                Status = updatedReport.Status
                            };

                            _reportRepository.UpdateReport(updated_Report);
                            return(RedirectToAction("Index"));
                        }
                        else
                        {
                            return(View(updatedReport));
                        }
                    }
                    return(Unauthorized());
                }
                else
                {
                    return(RedirectToAction("Index"));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(View("Error"));
            }
        }