Exemple #1
0
        public async Task ValidatePage_Empty_Payload_Returns_BadRequest()
        {
            // Arrange
            HttpRequest req = this.AuthenticatedRequest;

            req.Body = this.GetHttpRequestBodyStream("");

            ILogger fakeLogger = A.Fake <ILogger>();

            // Act
            IActionResult result = await LinkOperations.ValidatePage(req, fakeLogger);

            // Assert
            Assert.IsType <BadRequestObjectResult>(result);

            BadRequestObjectResult badRequestResult = result as BadRequestObjectResult;

            Assert.IsType <ProblemDetails>(badRequestResult.Value);

            ProblemDetails problemDetails = badRequestResult.Value as ProblemDetails;

            Assert.Equal("Could not validate links", problemDetails.Title);
            Assert.Equal(problemDetails.Status, StatusCodes.Status400BadRequest);

            A.CallTo(fakeLogger)
            .Where(call => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Error)
            .MustHaveHappened();
        }
Exemple #2
0
        public async Task SaveLinks_Converts_VanityUrl_To_LowerCase(string vanityUrl)
        {
            // Arrange
            ILogger    fakeLogger = A.Fake <ILogger>();
            LinkBundle bundle     = Fixture.Create <LinkBundle>();

            bundle.VanityUrl = vanityUrl;

            HttpRequest req = this.AuthenticatedRequest;

            req.Body = this.GetHttpRequestBodyStream(JsonConvert.SerializeObject(bundle));
            IAsyncCollector <LinkBundle> collector = A.Fake <IAsyncCollector <LinkBundle> >();

            // Act
            IActionResult result = await LinkOperations.SaveLinks(req, collector, fakeLogger);

            // Assert
            Assert.IsType <CreatedResult>(result);

            CreatedResult createdResult = result as CreatedResult;
            LinkBundle    createdBundle = createdResult.Value as LinkBundle;

            Assert.Equal(vanityUrl.ToLower(), createdBundle.VanityUrl);

            A.CallTo(() => collector.AddAsync(A <LinkBundle> .That.Matches(b => b.VanityUrl == vanityUrl.ToLower()),
                                              default)).MustHaveHappened();
        }
Exemple #3
0
        public async Task SaveLinks_Valid_Payload_Returns_CreatRequest()
        {
            // Arrange
            ILogger    fakeLogger = A.Fake <ILogger>();
            LinkBundle bundle     = Fixture.Create <LinkBundle>();

            HttpRequest req = this.AuthenticatedRequest;

            req.Body = this.GetHttpRequestBodyStream(JsonConvert.SerializeObject(bundle));
            IAsyncCollector <LinkBundle> collector = A.Fake <IAsyncCollector <LinkBundle> >();

            // Act
            IActionResult result = await LinkOperations.SaveLinks(req, collector, fakeLogger);

            // Assert
            Assert.IsType <CreatedResult>(result);

            CreatedResult createdResult = result as CreatedResult;
            LinkBundle    createdBundle = createdResult.Value as LinkBundle;

            Assert.Equal("userid", createdBundle.UserId);

            A.CallTo(() => collector.AddAsync(A <LinkBundle> .That.Matches(b => b.UserId == "userid"),
                                              default)).MustHaveHappened();
        }
Exemple #4
0
        public async Task UpdateList_Applies_JsonPatch_To_Bundle()
        {
            // Arrange
            JsonPatchDocument <LinkBundle> patchReqDocument = new JsonPatchDocument <LinkBundle>();

            patchReqDocument.Replace(d => d.Description, "Description");
            patchReqDocument.Replace(d => d.Links, this.Fixture.CreateMany <IDictionary <string, string> >());

            HttpRequest req = this.AuthenticatedRequest;

            req.Body = this.GetHttpRequestBodyStream(JsonConvert.SerializeObject(patchReqDocument));

            IEnumerable <LinkBundle> docs      = this.Fixture.CreateMany <LinkBundle>(1);
            IDocumentClient          docClient = this.Fixture.Create <IDocumentClient>();

            LinkBundle captured = null;

            A.CallTo(() => docClient.UpsertDocumentAsync(A <Uri> .Ignored, A <LinkBundle> .Ignored, A <RequestOptions> .Ignored, false, default(CancellationToken)))
            .Invokes((IFakeObjectCall callOb) =>
            {
                captured = callOb.Arguments[1] as LinkBundle;
            });
            string vanityUrl = "vanity";

            // Act
            IActionResult result = await LinkOperations.UpdateList(req, docs, docClient, vanityUrl, A.Dummy <ILogger>());

            // Assert
            Assert.Equal("Description", captured.Description);
            Assert.IsType <NoContentResult>(result);
        }
Exemple #5
0
        public async Task UpdateList_Empty_Operation_Does_Not_Call_DocumentClient(string payload, Type returnType)
        {
            // Arrange
            HttpRequest req = this.AuthenticatedRequest;

            req.Body = this.GetHttpRequestBodyStream(payload);

            IEnumerable <LinkBundle> docs      = this.Fixture.CreateMany <LinkBundle>(1);
            IDocumentClient          docClient = this.Fixture.Create <IDocumentClient>();
            ILogger logger    = this.Fixture.Create <ILogger>();
            string  vanityUrl = "vanity";

            // Act
            IActionResult result = await LinkOperations.UpdateList(req, docs, docClient, vanityUrl, logger);

            // Assert
            Assert.IsType(returnType, result);

            A.CallTo(docClient)
            .Where((IFakeObjectCall call) => call.Method.Name == "UpsertDocumentAsync")
            .MustNotHaveHappened();

            A.CallTo(logger)
            .Where((IFakeObjectCall call) => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Error)
            .MustHaveHappened();
        }
Exemple #6
0
        protected void RemoveAuthFromContext()
        {
            var httpContextAccessor = new HttpContextAccessor
            {
                HttpContext = CreateContext()
            };

            _linkOperations = new LinkOperations(httpContextAccessor, _blackListChecker, _hasher);
        }
Exemple #7
0
        protected void AddAuthToContext()
        {
            var httpContextAccessor = new HttpContextAccessor
            {
                HttpContext = CreateContext(true)
            };

            _linkOperations = new LinkOperations(httpContextAccessor, _blackListChecker, _hasher);
        }
Exemple #8
0
        public async Task UpdateList_Request_Missing_Auth_Credentials_Should_Return_UnAuthorized()
        {
            // Arrange
            var docs = Fixture.CreateMany <LinkBundle>();

            // Act
            IActionResult result = await LinkOperations.UpdateList(this.DefaultRequest, docs, null, "vanityUrl", A.Dummy <ILogger>());

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }
Exemple #9
0
        public void GetLinks_Non_Emtpy_Collection_Should_Return_Single_Document()
        {
            // Arrange
            var docs = Fixture.CreateMany <LinkBundle>(1);

            // Act
            IActionResult result = LinkOperations.GetLinks(this.DefaultRequest, docs, string.Empty, A.Dummy <ILogger>());

            // Assert
            Assert.IsType <OkObjectResult>(result);
            Assert.Equal(docs.Single(), (result as OkObjectResult).Value);
        }
Exemple #10
0
        public void GetBundlesForUser_Request_Missing_Auth_Credentials_Should_Return_UnAuthorized()
        {
            // Arrange
            ILogger fakeLogger = A.Fake <ILogger>();

            // Act
            IActionResult result = LinkOperations.GetBundlesForUser(this.DefaultRequest, A.Dummy <IEnumerable <Document> >(), "userid", fakeLogger);

            // Assert
            Assert.IsType <UnauthorizedResult>(result);

            A.CallTo(fakeLogger)
            .Where(call => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Information)
            .MustHaveHappened();
        }
Exemple #11
0
        public async Task UpdateList_Request_With_Emtpy_Collection_Should_Return_NotFound()
        {
            // Arrange
            IEnumerable <LinkBundle> docs = Enumerable.Empty <LinkBundle>();
            ILogger fakeLogger            = A.Fake <ILogger>();

            // Act
            IActionResult result = await LinkOperations.UpdateList(this.AuthenticatedRequest, docs, null, "vanityUrl", fakeLogger);

            // Assert
            Assert.IsType <NotFoundResult>(result);

            A.CallTo(fakeLogger)
            .Where(call => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Information)
            .MustHaveHappened();
        }
Exemple #12
0
        public void GetLinks_Emtpy_Collection_Should_Return_NotFound()
        {
            // Arrange
            IEnumerable <LinkBundle> docs = Enumerable.Empty <LinkBundle>();
            ILogger fakeLogger            = A.Fake <ILogger>();

            // Act
            IActionResult result = LinkOperations.GetLinks(this.DefaultRequest, docs, "vanityUrl", fakeLogger);

            // Assert
            Assert.IsType <NotFoundResult>(result);

            A.CallTo(fakeLogger)
            .Where(call => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Information)
            .MustHaveHappened();
        }
Exemple #13
0
        public async Task SaveLinks_Empty_Payload_Returns_BadRequest()
        {
            // Arrange
            ILogger     fakeLogger = A.Fake <ILogger>();
            HttpRequest req        = this.DefaultRequest;

            req.Body = this.GetHttpRequestBodyStream("");
            IAsyncCollector <LinkBundle> collector = A.Fake <IAsyncCollector <LinkBundle> >();

            // Act
            IActionResult result = await LinkOperations.SaveLinks(req, collector, fakeLogger);

            // Assert
            Assert.IsType <BadRequestObjectResult>(result);
            A.CallTo(() => collector.AddAsync(A <LinkBundle> .Ignored, CancellationToken.None)).MustNotHaveHappened();
        }
Exemple #14
0
        public void GetBundlesForUser_Authenticated_Request_With_Emtpy_Collection_Should_Return_NotFound()
        {
            // Arrange
            IEnumerable <Document> docs = Enumerable.Empty <Document>();
            ILogger fakeLogger          = A.Fake <ILogger>();

            // Act
            IActionResult result = LinkOperations.GetBundlesForUser(this.AuthenticatedRequest, docs, "userid", fakeLogger);

            // Assert
            Assert.IsType <NotFoundResult>(result);

            A.CallTo(fakeLogger)
            .Where(call => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Information)
            .MustHaveHappened();
        }
        public async Task DeleteLink_User_Cant_Remove_Document_Owned_By_Others_Should_Return_Forbidden()
        {
            // Arrange
            IEnumerable <Document> docs = Fixture.CreateMany <Document>(1);
            ILogger fakeLogger          = A.Fake <ILogger>();

            // Act
            IActionResult result = await LinkOperations.DeleteLink(this.AuthenticatedRequest, docs, null, "userid", fakeLogger);

            // Assert
            Assert.IsType <StatusCodeResult>(result);

            StatusCodeResult statusResult = result as StatusCodeResult;

            Assert.Equal(statusResult.StatusCode, StatusCodes.Status403Forbidden);

            A.CallTo(fakeLogger)
            .Where(call => call.Method.Name == "Log" && call.GetArgument <LogLevel>("logLevel") == LogLevel.Warning)
            .MustHaveHappened();
        }
Exemple #16
0
        public async Task SaveLinks_Returns_BadRequest_If_Vanity_Url_Fails_Regex(string vanityUrl)
        {
            // Arrange
            ILogger     fakeLogger = A.Fake <ILogger>();
            HttpRequest req        = this.DefaultRequest;

            LinkBundle payload = this.Fixture.Create <LinkBundle>();

            payload.VanityUrl = vanityUrl;

            req.Body = this.GetHttpRequestBodyStream(JsonConvert.SerializeObject(payload));
            IAsyncCollector <LinkBundle> collector = A.Fake <IAsyncCollector <LinkBundle> >();

            // Act
            IActionResult result = await LinkOperations.SaveLinks(req, collector, fakeLogger);

            // Assert
            Assert.IsType <BadRequestResult>(result);
            A.CallTo(() => collector.AddAsync(A <LinkBundle> .Ignored, CancellationToken.None)).MustNotHaveHappened();
        }
Exemple #17
0
        public TestBase()
        {
            var httpContextAccessor = new HttpContextAccessor
            {
                HttpContext = CreateContext(true)
            };

            _linkOperations = new LinkOperations(httpContextAccessor, _blackListChecker, _hasher);

            this.Fixture = new Fixture()
                           .Customize(new AutoFakeItEasyCustomization());

            Fixture.Register <Document>(() =>
            {
                Document doc = new Document();
                doc.SetPropertyValue("userId", Fixture.Create <string>());
                doc.SetPropertyValue("vanityUrl", Fixture.Create <string>());
                doc.SetPropertyValue("description", Fixture.Create <string>());
                doc.SetPropertyValue("linkCount", Fixture.Create <int>());
                return(doc);
            });
        }
Exemple #18
0
        public void GetBundlesForUser_Authenticated_Request_With_Collection_Should_Return_Formatted_Results()
        {
            // Arrange
            var docs = Fixture.CreateMany <Document>();

            // Act
            IActionResult result = LinkOperations.GetBundlesForUser(this.AuthenticatedRequest, docs, "userid", A.Dummy <ILogger>());

            //Assert
            Assert.IsType <OkObjectResult>(result);

            OkObjectResult        okResult   = result as OkObjectResult;
            IEnumerable <dynamic> resultData = okResult.Value as IEnumerable <dynamic>;

            Assert.Equal(docs.Count(), resultData.Count());

            foreach (dynamic item in resultData)
            {
                Assert.True(item.GetType().GetProperty("userId") != null);
                Assert.True(item.GetType().GetProperty("vanityUrl") != null);
                Assert.True(item.GetType().GetProperty("description") != null);
                Assert.True(item.GetType().GetProperty("linkCount") != null);
            }
        }