Ejemplo n.º 1
0
 /// <summary>
 /// Overrides the information of this Pictogram with new information found in the given DTO.
 /// </summary>
 /// <param name="other">The new information.</param>
 public virtual void Merge(PictogramDTO other)
 {
     this.LastEdit    = DateTime.Now;
     this.AccessLevel = (AccessLevel)other.AccessLevel;
     this.Title       = other.Title;
     if (other.Image != null)
     {
         this.Image = other.Image;
     }
 }
Ejemplo n.º 2
0
        public void UpdatePictogramInfo_LoginInvalidDTO_MissingProperties()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[GUARDIAN_DEP_TWO]);
            PictogramDTO dto = null;
            var          res = pc.UpdatePictogramInfo(PUBLIC_PICTOGRAM, dto).Result;

            Assert.False(res.Success);
            Assert.Equal(ErrorCode.MissingProperties, res.ErrorCode);
        }
Ejemplo n.º 3
0
        public void CreatePictogram_NoAccessLevel_MissingProperties()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[GUARDIAN_DEP_TWO]);

            var dto = new PictogramDTO()
            {
                Title = "newpictogram"
            };
            var res = pc.CreatePictogram(dto).Result;

            Assert.False(res.Success);
            Assert.Equal(ErrorCode.MissingProperties, res.ErrorCode);
        }
Ejemplo n.º 4
0
        public async Task <Response <WeekPictogramDTO> > CreatePictogram([FromBody] PictogramDTO pictogram)
        {
            var user = await _giraf.LoadUserWithResources(HttpContext.User);

            if (user == null)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.NotFound));
            }

            if (pictogram == null)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.MissingProperties,
                                                            "Could not read pictogram DTO. Please make sure not to include image data in this request. " +
                                                            "Use POST localhost/v1/pictogram/{id}/image instead."));
            }

            if (!ModelState.IsValid)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.InvalidProperties));
            }

            //Create the actual pictogram instance
            // if access level is not specified, missing properties
            if (pictogram.AccessLevel == null || !Enum.IsDefined(typeof(AccessLevel), pictogram.AccessLevel))
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.MissingProperties, "access level, pictogram"));
            }

            Pictogram pict =
                new Pictogram(pictogram.Title, (AccessLevel)pictogram.AccessLevel);

            if (pictogram.AccessLevel == AccessLevel.PRIVATE)
            {
                //Add relation between pictogram and current user
                new UserResource(user, pict);
            }
            else if (pictogram.AccessLevel == AccessLevel.PROTECTED)
            {
                //Add the pictogram to the user's department
                new DepartmentResource(user.Department, pict);
            }

            await _giraf._context.Pictograms.AddAsync(pict);

            await _giraf._context.SaveChangesAsync();

            return(new Response <WeekPictogramDTO>(new WeekPictogramDTO(pict)));
        }
Ejemplo n.º 5
0
        public void UpdatePictogramInfo_LoginNonexisting_NotFound()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[GUARDIAN_DEP_TWO]);

            var dto = new PictogramDTO()
            {
                Title       = "Updated Pictogram",
                AccessLevel = AccessLevel.PRIVATE
            };
            var res = pc.UpdatePictogramInfo(NONEXISTING_PICTOGRAM, dto).Result;

            Assert.False(res.Success);
            Assert.Equal(ErrorCode.PictogramNotFound, res.ErrorCode);
        }
Ejemplo n.º 6
0
        public void UpdatePictogramInfo_LoginAnotherProtected_Unauthorized()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[GUARDIAN_DEP_TWO]);

            var dto = new PictogramDTO()
            {
                Title       = "Updated Pictogram",
                AccessLevel = AccessLevel.PRIVATE
            };
            var res = pc.UpdatePictogramInfo(DEP_ONE_PROTECTED_PICTOGRAM, dto).Result;

            Assert.False(res.Success);
            Assert.Equal(ErrorCode.NotAuthorized, res.ErrorCode);
        }
Ejemplo n.º 7
0
        public void UpdatePictogramInfo_NoLoginProtected_NotFound()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLogout();

            var dto = new PictogramDTO()
            {
                Title       = "Updated Pictogram",
                AccessLevel = AccessLevel.PROTECTED
            };
            var res = pc.UpdatePictogramInfo(DEP_ONE_PROTECTED_PICTOGRAM, dto).Result;

            Assert.False(res.Success);
            Assert.Equal(ErrorCode.NotFound, res.ErrorCode);
        }
Ejemplo n.º 8
0
        public void UpdatePictogramInfo_PictogramOwnerModifyAccessLevel_Success()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[ADMIN_DEP_ONE]);

            var dto = new PictogramDTO()
            {
                Title       = "Updated Pictogram",
                AccessLevel = AccessLevel.PUBLIC
            };
            var res = pc.UpdatePictogramInfo(ADMIN_PRIVATE_PICTOGRAM, dto).Result;

            Assert.True(res.Success);
            Assert.Equal(ErrorCode.NoError, res.ErrorCode);
            // check that acess level is changed correctly
            Assert.Equal(AccessLevel.PUBLIC, res.Data.AccessLevel);
        }
Ejemplo n.º 9
0
        public void UpdatePictogramInfo_LoginOwnPrivate_Success()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[ADMIN_DEP_ONE]);
            var title = "Updated Pictogram";

            var dto = new PictogramDTO()
            {
                Title       = title,
                AccessLevel = AccessLevel.PRIVATE,
            };
            var res = pc.UpdatePictogramInfo(dto.Id, dto).Result;

            Assert.True(res.Success);
            // check data
            Assert.Equal(title, res.Data.Title);
            Assert.Equal(AccessLevel.PRIVATE, res.Data.AccessLevel);
        }
Ejemplo n.º 10
0
        public void CreatePictogram_LoginValidProtectedDTO_Success()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[GUARDIAN_DEP_TWO]);

            var dto = new PictogramDTO()
            {
                AccessLevel = AccessLevel.PROTECTED,
                Title       = "Protected " + pictogramName
            };
            var res = pc.CreatePictogram(dto).Result;

            Assert.True(res.Success);
            // check that title is set correctly
            Assert.Equal("Protected " + pictogramName, res.Data.Title);
            // check accesslevel
            Assert.Equal(AccessLevel.PROTECTED, res.Data.AccessLevel);
        }
Ejemplo n.º 11
0
        public void UpdatePictogramInfo_LoginOwnPublic_Success()
        {
            var pc = initializeTest();

            _testContext.MockUserManager.MockLoginAsUser(_testContext.MockUsers[ADMIN_DEP_ONE]);
            var title = "Updated Pictogram";

            var dto = new PictogramDTO()
            {
                Title       = title,
                AccessLevel = AccessLevel.PUBLIC,
            };
            var res = pc.UpdatePictogramInfo(dto.Id, dto).Result;

            Assert.True(res.Success);
            // check that pictogram was updated correctly
            Assert.Equal(title, res.Data.Title);
            // check access level was updated correctly
            Assert.Equal(AccessLevel.PUBLIC, res.Data.AccessLevel);
        }
Ejemplo n.º 12
0
        public async Task <Response <WeekPictogramDTO> > UpdatePictogramInfo(long id, [FromBody] PictogramDTO pictogram)
        {
            if (pictogram == null)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.MissingProperties, "Could not read pictogram DTO. Please make sure not to include image data in this request. " + "Use POST localhost/v1/pictogram/{id}/image instead."));
            }
            if (pictogram.AccessLevel == null)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.MissingProperties, "missing access level"));
            }
            if (!ModelState.IsValid)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.InvalidProperties));
            }

            var usr = await _giraf.LoadBasicUserDataAsync(HttpContext.User);

            if (usr == null)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.NotFound));
            }
            //Fetch the pictogram from the database and check that it exists
            var pict = await _giraf._context.Pictograms
                       .Where(pic => pic.Id == id)
                       .FirstOrDefaultAsync();

            if (pict == null)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.PictogramNotFound));
            }

            if (!CheckOwnership(pict, usr).Result)
            {
                return(new ErrorResponse <WeekPictogramDTO>(ErrorCode.NotAuthorized));
            }
            //Ensure that Id is not changed.
            pictogram.Id = id;
            //Update the existing database entry and save the changes.
            pict.Merge(pictogram);
            _giraf._context.Pictograms.Update(pict);
            await _giraf._context.SaveChangesAsync();

            return(new Response <WeekPictogramDTO>(new WeekPictogramDTO(pict)));
        }