public ActionResult <RegisterUrlResponseBody> RegisterUrl([FromBody] RegisterUrlRequestBody request)
        {
            var accountClaim = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);

            if (accountClaim == null)
            {
                return(Unauthorized());
            }
            var account = accountClaim.Value;

            if (account == null)
            {
                return(Unauthorized());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            RegisteredUrl           registeredUrl = _urlService.CreateRegisteredUrl(request, account);
            RegisterUrlResponseBody response      = new RegisterUrlResponseBody()
            {
                shortUrl = $"http://localhost:6500/{registeredUrl.ShortUrl}"
            };

            return(Created("", response));
        }
        public void RegiterUrl_OkResult()
        {
            InitializeControllerWithAuthorizedContext();
            _mockService.Setup(service => service.CreateRegisteredUrl(It.IsAny <RegisterUrlRequestBody>(), It.IsAny <string>()))
            .Returns(new RegisteredUrl()
            {
                LongUrl = "www.google.com", ShortUrl = "AStzHGv", AccountID = "54321"
            });

            RegisterUrlRequestBody request = new RegisterUrlRequestBody()
            {
                url = "www.google.com", redirectType = 301
            };

            var actionResult = _controller.RegisterUrl(request);

            Assert.IsType <ActionResult <RegisterUrlResponseBody> >(actionResult);

            OkObjectResult okResult = (OkObjectResult)actionResult.Result;

            Assert.IsType <OkObjectResult>((OkObjectResult)actionResult.Result);

            Assert.IsType <RegisterUrlResponseBody>(okResult.Value);

            RegisterUrlResponseBody response = (RegisterUrlResponseBody)okResult.Value;

            Assert.Equal("AStzHGv", response.shortUrl);
        }
        /**
         * metoda vraca registrirani URL
         *
         * Ako za korisnika 'Account' vec postoji URL kao u 'Request'u, onda vraćamo taj postojeći objekt iz baze
         * Ako URL ne postoji, kreiramo novi RegisteredUrl, spremamo u bazu i vraćamo ga
         */
        public RegisteredUrl CreateRegisteredUrl(RegisterUrlRequestBody Request, string Account)
        {
            //pokusavamo naci url u bazi podataka. ako postoji, provjeravamo da li pripada ovom accountu.
            //ako je sve zo zadovoljeno, nema potrebe kreirati novi zapis, nego vracamo stari
            RegisteredUrl findUrl = _context.RegisteredUrls.FirstOrDefault(databaseUrl => databaseUrl.LongUrl == Request.url && databaseUrl.AccountID == Account);

            if (findUrl != null)
            {
                return(findUrl);
            }
            else
            {
                //URL ne postoji, kreiramo novi zapis u bazi i vracamo novi RegisteredUrl objekt
                RegisteredUrl registeredUrl = new RegisteredUrl()
                {
                    LongUrl = Request.url, ShortUrl = ShortUrlGenerator.Generate(10), AccountID = Account
                };
                if (Request.redirectType > 0)
                {
                    registeredUrl.RedirectType = Request.redirectType;
                }
                else
                {
                    registeredUrl.RedirectType = 302;
                }
                _context.RegisteredUrls.Add(registeredUrl);
                _context.SaveChanges();
                return(registeredUrl);
            }
        }
        private async void RegisterUrl(string AuthenticationToken)
        {
            try
            {
                RestClient restClient = new RestClient()
                {
                    BaseUrl = new Uri("https://sandbox.safaricom.co.ke")
                };

                RestRequest restRequest = new RestRequest()
                {
                    Resource = "mpesa/c2b/v1/registerurl",
                    Method   = Method.POST
                };

                restRequest.AddHeader("Authorization", "Bearer " + AuthenticationToken);

                RegisterUrlRequestBody registerUrlRequestBody = new RegisterUrlRequestBody()
                {
                    ShortCode = "601426",
                    //ShortCode = "695656",
                    ResponseType    = "Completed",
                    ConfirmationURL = "https://johncustomertobusiness.azurewebsites.net/api/ApiConfirmationResponses",
                    ValidationURL   = "https://johncustomertobusiness.azurewebsites.net"
                };

                restRequest.AddJsonBody(registerUrlRequestBody);



                var response = await Task.Run(() =>
                {
                    return(restClient.Execute(restRequest));
                });

                if (response.IsSuccessful)
                {
                    //do something
                    Console.WriteLine(response.Content);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
        public void RegiterUrl_Unauthorized()
        {
            _mockService.Setup(service => service.CreateRegisteredUrl(It.IsAny <RegisterUrlRequestBody>(), It.IsAny <string>()))
            .Returns(new RegisteredUrl()
            {
                LongUrl = "www.google.com", ShortUrl = "AStzHGv", AccountID = "54321"
            });

            RegisterUrlRequestBody request = new RegisterUrlRequestBody()
            {
                url = "www.google.com", redirectType = 300
            };                                                                                                            //krivi redirectType

            var actionResult = _controller.RegisterUrl(request);

            Assert.IsType <UnauthorizedResult>((UnauthorizedResult)actionResult.Result);
        }
        public void RegiterUrl_ModelNotValid()
        {
            InitializeControllerWithAuthorizedContext();

            _mockService.Setup(service => service.CreateRegisteredUrl(It.IsAny <RegisterUrlRequestBody>(), It.IsAny <string>()))
            .Returns((RegisteredUrl)null);

            _controller.ModelState.AddModelError("Url", "invalid data");
            RegisterUrlRequestBody request = new RegisterUrlRequestBody()
            {
                url = "www.google.com", redirectType = 300
            };                                                                                                            //krivi redirectType

            var actionResult = _controller.RegisterUrl(request);

            Assert.IsType <BadRequestResult>((BadRequestResult)actionResult.Result);
        }