public void Test_Create_Should_ThrowNotFoundException_When_NoReportWithGUID()
        {
            // Arrange
            Mock <IReportRepository> reportRep = new Mock <IReportRepository>();

            reportRep.Setup(x => x.Get(It.Is <string>(y => y == "Valid"))).Returns(_reports.SingleOrDefault(x => x.ReportGUID.Equals("Valid")));
            reportRep.Setup(x => x.Get(It.Is <string>(y => y == "InValid"))).Returns(_reports.SingleOrDefault(x => x.ReportGUID.Equals("InValid")));
            reportRep.Setup(x => x.GetAll()).Returns(_reports);
            Mock <IReportUserRelRepository> reportUserRelRep = new Mock <IReportUserRelRepository>();

            reportUserRelRep.Setup(x => x.Get(It.Is <int>(y => y == 1), It.Is <int>(z => z == 1))).Returns(_reportUserRel.SingleOrDefault(x => x.User.Id == 1 && x.Report.Id == 1));
            reportUserRelRep.Setup(x => x.Get(It.Is <int>(y => y == 2), It.Is <int>(z => z == 2))).Returns(_reportUserRel.SingleOrDefault(x => x.User.Id == 2 && x.Report.Id == 2));
            reportUserRelRep.Setup(x => x.Add(It.IsAny <ReportUserRel>())).Callback <ReportUserRel>((z) => _reportUserRel.Add(z));
            Mock <IUserRepository> userRep = new Mock <IUserRepository>();

            userRep.Setup(x => x.Get(It.Is <string>(z => z == "watch"))).Returns(_users.SingleOrDefault(z => z.UserGUID == "watch"));
            // Act
            ReportUserRelManager manager = new ReportUserRelManager(userRep.Object, reportUserRelRep.Object, reportRep.Object);

            // Assert
            Assert.Throws(typeof(NotFoundException), () => manager.Create(new CreateReportUserDto
            {
                ReportGUID = "Valid123",
                UserGUID   = "modify",
                Permission = (int)ReportUserPermissions.CanModify
            }));
        }
        public void Test_Create_Should_CreateRecord_When_ValidDataAdded()
        {
            // Arrange
            Mock <IReportRepository> reportRep = new Mock <IReportRepository>();

            reportRep.Setup(x => x.Get(It.Is <string>(y => y == "Valid"))).Returns(_reports.SingleOrDefault(x => x.ReportGUID.Equals("Valid")));
            reportRep.Setup(x => x.Get(It.Is <string>(y => y == "InValid"))).Returns(_reports.SingleOrDefault(x => x.ReportGUID.Equals("InValid")));
            reportRep.Setup(x => x.GetAll()).Returns(_reports);
            Mock <IReportUserRelRepository> reportUserRelRep = new Mock <IReportUserRelRepository>();

            reportUserRelRep.Setup(x => x.Get(It.Is <int>(y => y == 1), It.Is <int>(z => z == 1))).Returns(_reportUserRel.SingleOrDefault(x => x.User.Id == 1 && x.Report.Id == 1));
            reportUserRelRep.Setup(x => x.Get(It.Is <int>(y => y == 2), It.Is <int>(z => z == 2))).Returns(_reportUserRel.SingleOrDefault(x => x.User.Id == 2 && x.Report.Id == 2));
            reportUserRelRep.Setup(x => x.Add(It.IsAny <ReportUserRel>())).Callback <ReportUserRel>((z) => _reportUserRel.Add(z));
            Mock <IUserRepository> userRep = new Mock <IUserRepository>();

            userRep.Setup(x => x.Get(It.Is <string>(z => z == "watch"))).Returns(_users.SingleOrDefault(z => z.UserGUID == "watch"));
            // Act
            ReportUserRelManager manager = new ReportUserRelManager(userRep.Object, reportUserRelRep.Object, reportRep.Object);
            int k = _reportUserRel.Count;

            manager.Create(new CreateReportUserDto
            {
                ReportGUID = "Valid",
                UserGUID   = "watch",
                Permission = (int)ReportUserPermissions.CanWatch
            });
            // Assert
            Assert.Greater(_reportUserRel.Count, k);
        }
        public IActionResult Create([FromBody] CreateReportUserDto reportUserRel)
        {
            try
            {
                if (reportUserRel == null)
                {
                    throw new BasicException("Wrong body format.");
                }
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                _manager.Create(reportUserRel);
                return(Created(string.Empty, null));
            }
            catch (BasicException ex)
            {
                _logger.LogError(ex.Message);
                return(BadRequest(ex.Message));
            }
            catch (NotFoundException ex)
            {
                _logger.LogError(ex.Message);
                return(NotFound(ex.Message));
            }
            catch (PermissionException ex)
            {
                _logger.LogError(ex.Message);
                return(Unauthorized());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(BadRequest());
            }
        }