public async Task SignatureRepositoryTestsUpdateSignatureWorksForValidInput()
        {
            var inputSignature = new Signature {
                Signer = new User {
                    UserId = "007007", Name = "Bill"
                }
            };
            var       signatureRepository = new SignatureRepository();
            Signature?addedSignature      = await signatureRepository.AddSignature(inputSignature);

            bool initialSigningStatus = addedSignature.IsSigned;

            Assert.IsNotNull(addedSignature);
            var updateSignatureInput = new Signature {
                Id = addedSignature.Id, Signer = new User {
                    UserId = "007007", Name = "Bill G"
                }, IsSigned = true, SignedDateTime = DateTime.UtcNow, Text = "Bill G"
            };
            Signature?updatedSignature = await signatureRepository.UpdateSignature(updateSignatureInput);

            Assert.AreEqual(updateSignatureInput.Id, updatedSignature.Id);
            Assert.AreEqual(updatedSignature.SignedDateTime, updateSignatureInput.SignedDateTime);
            Assert.AreEqual(updatedSignature.Text, updateSignatureInput.Text);

            // Signer shouldn't be updated in SingatureRepository
            Assert.IsTrue(addedSignature.Signer.Equals(updateSignatureInput.Signer));
            Assert.IsTrue(updatedSignature.IsSigned);
            Assert.AreNotEqual(updatedSignature.IsSigned, initialSigningStatus);
        }
 public async Task SignatureRepositoryTestsUpdateSignatureThrowsApiExceptionForInvalidId()
 {
     var inputSignature = new Signature {
         Signer = new User {
             UserId = "007007", Name = "Bill"
         }
     };
     var signatureRepository = new SignatureRepository();
     await signatureRepository.UpdateSignature(inputSignature);
 }
        public async Task SignatureRepositoryTestsAddSignatureCreatesNewGuid()
        {
            var inputSignatureId = Guid.NewGuid();
            var inputSignature   = new Signature {
                Id = inputSignatureId
            };
            var       signatureRepository = new SignatureRepository();
            Signature?addedSignature      = await signatureRepository.AddSignature(inputSignature);

            Assert.AreNotEqual(inputSignatureId, addedSignature.Id);
            Assert.IsFalse(addedSignature.IsSigned);
        }
        public async Task SignatureRepositoryTestsGetSignatureThrowsApiExceptionForInvalidInput()
        {
            var inputSignature = new Signature {
                Signer = new User {
                    UserId = "007007"
                }
            };
            var       signatureRepository = new SignatureRepository();
            Signature?addedSignature      = await signatureRepository.AddSignature(inputSignature);

            Assert.IsNotNull(addedSignature);

            await signatureRepository.GetSignature(Guid.NewGuid());
        }
        public async Task SignatureRepositoryTestsGetSignatureRetrievesMatchingRecordForValidInput()
        {
            var inputSignature = new Signature {
                Signer = new User {
                    UserId = "007007", Name = "Bill"
                }
            };
            var       signatureRepository = new SignatureRepository();
            Signature?addedSignature      = await signatureRepository.AddSignature(inputSignature);

            Signature?retrievedSignature = await signatureRepository.GetSignature(addedSignature.Id);

            Assert.IsNotNull(retrievedSignature);
            Assert.AreEqual(addedSignature.Id, retrievedSignature.Id);
            Assert.IsTrue(addedSignature.Signer.Equals(retrievedSignature.Signer));
        }
        public async Task SignatureRepositoryTestsUpdateSignatureThrowsApiExceptionForSingingComplete()
        {
            var inputSignature = new Signature {
                Signer = new User {
                    UserId = "007007", Name = "Bill"
                }, IsSigned = true
            };
            var       signatureRepository = new SignatureRepository();
            Signature?addedSignature      = await signatureRepository.AddSignature(inputSignature);

            Assert.IsNotNull(addedSignature);

            var updateSignatureInput = new Signature {
                Signer = new User {
                    UserId = "007007", Name = "Bill"
                }, IsSigned = false
            };
            await signatureRepository.UpdateSignature(updateSignatureInput);
        }
        public HttpResponseMessage SendFromPDF(Guid id)
        {
            //Retrieve PDF
            PDF pdf = new PDFRepository().GetById(id);

            if (pdf == null)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "PDF id is not valid");
            }

            //Check access rights for current user
            UserTicket ticket = TicketManager.getTicketFromContext(this.ControllerContext);

            if (!pdf.document.ownerCompany.userAffiliations.Any(x => x.user.id == ticket.user.id && (x.role.name.Equals("Ejer") || x.role.name.Equals("Admin"))))
            {
                return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "User permission is not sufficient");
            }

            if (pdf.signatures==null||pdf.signatures.Count==0)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Number of recipients cannot be 0");
            }

            SignatureRepository repo = new SignatureRepository();

            foreach (Signature item in pdf.signatures)
            {
                string senderMessage;

                if (ticket.user.firstName != null && ticket.user.lastName != null)
                {
                    senderMessage = ticket.user.firstName + " " + ticket.user.lastName + " fra " + item.pdf.document.ownerCompany.name
                        + " har anmodet dig om at læse/underskrive dokumentet " + item.pdf.document.title + ".";
                }
                else
                {
                    senderMessage = item.pdf.document.ownerCompany.name
                        + " har anmodet dig om at læse/underskrive dokumentet " + item.pdf.document.title + ".";
                }

                NotificationManager.create(item.user, senderMessage, "http://webapp.bizdoc.dk/Underskrift/" + item.id);

                item.sendDate = DateTime.Now;

                repo.Update(item);
            }

            return Request.CreateResponse<PDF>(HttpStatusCode.OK, pdf);
        }
        public HttpResponseMessage Get(Guid id)
        {
            var sig = new SignatureRepository().GetById(id);

            if (sig==null)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Id is not valid");
            }

            UserTicket ticket = TicketManager.getTicketFromContext(this.ControllerContext);

            if (sig.user.id!=ticket.user.id)
            {
                return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "User permission is not sufficient");
            }

            return Request.CreateResponse<Signature>(HttpStatusCode.OK, sig);
        }