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); }
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); }
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); } }
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))); } }
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)); }
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)); }
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."); } }