Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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
                });
            }
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }