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(); }
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(); }
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(); }
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); }
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(); }
protected void RemoveAuthFromContext() { var httpContextAccessor = new HttpContextAccessor { HttpContext = CreateContext() }; _linkOperations = new LinkOperations(httpContextAccessor, _blackListChecker, _hasher); }
protected void AddAuthToContext() { var httpContextAccessor = new HttpContextAccessor { HttpContext = CreateContext(true) }; _linkOperations = new LinkOperations(httpContextAccessor, _blackListChecker, _hasher); }
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); }
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); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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); }); }
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); } }