public void DetermineRequestValidity_BadRequest_OnUrlInUsedBy(string containingUrl) { var ug = new UsedGuidInputModel { Guid = Guid.NewGuid(), UsedBy = containingUrl }; var testResult = DomainLogic.DetermineRequestValidity(ug); Assert.True(testResult.ReasonPhrase.Contains("data contains a url")); Assert.AreEqual(HttpStatusCode.BadRequest, testResult.StatusCode); }
public HttpResponseMessage Post(UsedGuidInputModel ug) { // 1. screening of inputs / unit tested var initialCheck = DomainLogic.DetermineRequestValidity(ug); if (initialCheck.StatusCode != HttpStatusCode.OK) { // NOTE: initial check produces exactly what we need to return to API caller for failure cases return(initialCheck); } // 2. the main event THE guid colision check ;) / unit & integration testing if (_dataStore.GuidExistsAlready(ug.Guid)) { return(DomainLogic.OhNoExistingGuid()); } // 3. ok we're good to go it's a guid we haven't seen before try { if (_dataStore.SaveGuid(ug.Guid)) { // this is unit tested var tweetText = TweetTextBuilder.ProduceTweetText(ug.UsedBy, ug.Guid); // this is for integration testing var publistTweetResult = _tweeter.PublishTweet(tweetText); if (publistTweetResult.StatusCode != HttpStatusCode.OK) { return(publistTweetResult); } } return(new HttpResponseMessage(HttpStatusCode.OK)); } catch (Exception ex) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, ReasonPhrase = ex.Message }); } }
public static HttpResponseMessage DetermineRequestValidity(UsedGuidInputModel ug) { if (ug == null || ug.Guid == Guid.Empty) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "Did not supply a valid guid." }); } if (ContainsUrl(ug.UsedBy)) { return(new HttpResponseMessage { StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "Won't tweet if your data contains a url or something similar" }); } return(new HttpResponseMessage(HttpStatusCode.OK)); }
public void UsedGuidController_Post_ReturnsMessageWhenItFindsGuidAlreadyExists() { // Arrange var dataStore = Substitute.For <IManageYourData>(); var tweeter = Substitute.For <ITweet>(); dataStore.GuidExistsAlready(Arg.Any <Guid>()).Returns(true); dataStore.SaveGuid(Arg.Any <Guid>()).Returns(true); var controller = new UsedGuidController(dataStore, tweeter); var data = new UsedGuidInputModel { Guid = Guid.NewGuid(), //NOTE above: GuidExistsAlready(Arg.Any<Guid>()).Returns(true) UsedBy = "Unit Test" }; // Act var result = controller.Post(data); // Assert Assert.AreEqual(HttpStatusCode.Gone, result.StatusCode); }
public void UsedGuidController_Post_UncaughExceptionComesUpToController() { // Arrange var dataStore = Substitute.For <IManageYourData>(); var tweeter = Substitute.For <ITweet>(); dataStore.GuidExistsAlready(Arg.Any <Guid>()).Returns(false); dataStore.SaveGuid(Arg.Any <Guid>()).Returns(x => { throw new Exception("oops"); }); var controller = new UsedGuidController(dataStore, tweeter); var data = new UsedGuidInputModel { Guid = Guid.NewGuid(), UsedBy = "Unit Test" }; // Act var result = controller.Post(data); // Assert Assert.AreEqual(HttpStatusCode.InternalServerError, result.StatusCode); }