예제 #1
0
        public void TryGetLongUrlShouldBeSuccess()
        {
            //Arrange
            string          shortUrl        = "cuturl.local/google";
            string          longExpectedUrl = "https://docs.google.com/";
            string          userId          = "1234";
            ShortcutUrlData urlData         = new ShortcutUrlData()
            {
                UserId           = userId,
                ShortUrl         = shortUrl,
                LongUrl          = longExpectedUrl,
                Date             = DateTime.Now,
                TransferQuantity = 0
            };

            var generator  = Substitute.For <IShortUrlGenerator>();
            var repository = Substitute.For <IRepository>();

            repository.GetUrlDataByShortUrl(shortUrl).Returns(urlData);

            ICutUrlLogic logic = new Business_Logic.CutUrlLogic(repository, generator);

            //Actual
            string longActualUrl = logic.GetLongUrlFromShort(shortUrl, userId);

            //Assert
            Assert.AreEqual(longExpectedUrl, longActualUrl);
            repository.Received().GetUrlDataByShortUrl(shortUrl);
        }
예제 #2
0
        public void TryGetLongUrlTransferQuantityShouldBeIncreased()
        {
            //Arrange

            string shortUrl = "cuturl.local/google";
            string userId   = "1234";

            ShortcutUrlData urlData = new ShortcutUrlData()
            {
                UserId           = "1234",
                ShortUrl         = "cuturl.local/google",
                LongUrl          = "https://docs.google.com/",
                Date             = DateTime.Now,
                TransferQuantity = 0
            };

            var generator  = Substitute.For <IShortUrlGenerator>();
            var repository = Substitute.For <IRepository>();
            var old_val    = urlData.TransferQuantity;

            repository.GetUrlDataByShortUrl(shortUrl).Returns(urlData);

            var logic = new Business_Logic.CutUrlLogic(repository, generator);

            logic.GetLongUrlFromShort(shortUrl, userId);

            var new_val = urlData.TransferQuantity;

            //Actual
            //Assert
            repository.Received().SaveUrlData(urlData);
            Assert.AreEqual(old_val + 1, new_val);
        }
예제 #3
0
 public void SaveUrlData(ShortcutUrlData urlData)
 {
     using (IDbConnection db = new MySqlConnection(_connectionString))
     {
         var sqlQuery = "UPDATE ShortcutUrlData SET Date = @Date, TransferQuantity = @TransferQuantity, ShortUrl = @ShortUrl, LongUrl = @LongUrl  WHERE Id = @Id";
         db.Execute(sqlQuery, urlData);
     }
 }
예제 #4
0
 public IActionResult CreateShortcutUrl([FromBody] ShortcutUrlData data)
 {
     try
     {
         string shortUrl = _cutUrlLogic.CreateShortUrlFromLong(data.LongUrl, data.UserId);
         return(Json(shortUrl));
     }
     catch (CreateShortUrlException ex)
     {
         return(StatusCode(500, Json(ex)));
     }
 }
예제 #5
0
 public string GetLongUrlFromShort(string shortUrl, string userId)
 {
     try
     {
         ShortcutUrlData urlData = _repository.GetUrlDataByShortUrl(shortUrl);
         urlData.TransferQuantity++;
         _repository.SaveUrlData(urlData);
         return(urlData.LongUrl);
     }
     catch (DataAccessException ex)
     {
         throw new GetLongUrlException(ex.Message, ex);
     }
 }
        public void CannotAddUrlToDatabase()
        {
            ShortcutUrlData urlData = new ShortcutUrlData()
            {
                UserId           = userId,
                ShortUrl         = expectedShortUrl,
                LongUrl          = longUrl,
                Date             = DateTime.Now,
                TransferQuantity = 0
            };

            generator.GetShortUrl(longUrl).Returns(expectedShortUrl);

            repository.IsShortUrlExists(expectedShortUrl).Returns(false);
            repository.GetUrlDataByShortUrl(expectedShortUrl).Returns(urlData);
            repository.When(x => x.AddShortUrlData(userId, expectedShortUrl, longUrl)).Do(x => { throw new DataAccessException("Cannot add Url to database."); });

            //Actual
            //Assert
            Assert.Throws <CreateShortUrlException>(() => logic.CreateShortUrlFromLong(longUrl, userId));
        }
예제 #7
0
        public void TryGetUrlDataByShortUrlShouldBeSuccess()
        {
            //Arrange
            string userId           = "1234";
            string shortUrl         = "cuturl.local/google";
            string longUrl          = "https://docs.google.com/";
            int    transferQuantity = 0;

            ShortcutUrlData expectedUrlData = new ShortcutUrlData
            {
                UserId           = userId,
                ShortUrl         = shortUrl,
                LongUrl          = longUrl,
                TransferQuantity = transferQuantity
            };

            //Actual
            _repository.AddShortUrlData(userId, shortUrl, longUrl);
            ShortcutUrlData actualUrlData = _repository.GetUrlDataByShortUrl(shortUrl);

            //Assert
            Assert.IsTrue(expectedUrlData.Equals(actualUrlData));
        }
예제 #8
0
        public void AddShortUrlData(string userId, string shortUrl, string longUrl)
        {
            ShortcutUrlData urlData = new ShortcutUrlData()
            {
                UserId           = userId,
                ShortUrl         = shortUrl,
                LongUrl          = longUrl,
                Date             = DateTime.Now,
                TransferQuantity = 0
            };

            try
            {
                using (IDbConnection db = new MySqlConnection(_connectionString))
                {
                    var mySqlQuery = "INSERT INTO ShortcutUrlData (UserId, ShortUrl, LongUrl, Date, TransferQuantity) VALUES(@UserId, @ShortUrl, @LongUrl, @Date, @TransferQuantity)";
                    db.Execute(mySqlQuery, urlData);
                }
            }
            catch (DataAccessException)
            {
                throw new DataAccessException("Error during adding data to database occured.");
            }
        }