public async Task Update_resource_with_side_effects_and_include_returns_absolute_links() { // Arrange Photo existingPhoto = _fakers.Photo.Generate(); PhotoAlbum existingAlbum = _fakers.PhotoAlbum.Generate(); await _testContext.RunOnDatabaseAsync(async dbContext => { dbContext.AddRange(existingPhoto, existingAlbum); await dbContext.SaveChangesAsync(); }); var requestBody = new { data = new { type = "photos", id = existingPhoto.StringId, relationships = new { album = new { data = new { type = "photoAlbums", id = existingAlbum.StringId } } } } }; string route = $"/photos/{existingPhoto.StringId}?include=album"; // Act (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePatchAsync <Document>(route, requestBody); // Assert httpResponse.Should().HaveStatusCode(HttpStatusCode.OK); responseDocument.Links.Self.Should().Be(HostPrefix + route); responseDocument.Links.Related.Should().BeNull(); responseDocument.Links.First.Should().BeNull(); responseDocument.Links.Last.Should().BeNull(); responseDocument.Links.Prev.Should().BeNull(); responseDocument.Links.Next.Should().BeNull(); string photoLink = HostPrefix + $"/photos/{existingPhoto.StringId}"; responseDocument.SingleData.Should().NotBeNull(); responseDocument.SingleData.Links.Self.Should().Be(photoLink); responseDocument.SingleData.Relationships["album"].Links.Self.Should().Be(photoLink + "/relationships/album"); responseDocument.SingleData.Relationships["album"].Links.Related.Should().Be(photoLink + "/album"); string albumLink = HostPrefix + $"/photoAlbums/{existingAlbum.StringId}"; responseDocument.Included.Should().HaveCount(1); responseDocument.Included[0].Links.Self.Should().Be(albumLink); responseDocument.Included[0].Relationships["photos"].Links.Self.Should().Be(albumLink + "/relationships/photos"); responseDocument.Included[0].Relationships["photos"].Links.Related.Should().Be(albumLink + "/photos"); }
public async Task Create_resource_with_side_effects_and_include_returns_relative_links() { // Arrange Photo existingPhoto = _fakers.Photo.Generate(); await _testContext.RunOnDatabaseAsync(async dbContext => { dbContext.Photos.Add(existingPhoto); await dbContext.SaveChangesAsync(); }); var requestBody = new { data = new { type = "photoAlbums", relationships = new { photos = new { data = new[] { new { type = "photos", id = existingPhoto.StringId } } } } } }; const string route = "/photoAlbums?include=photos"; // Act (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePostAsync <Document>(route, requestBody); // Assert httpResponse.Should().HaveStatusCode(HttpStatusCode.Created); responseDocument.Links.Self.Should().Be(route); responseDocument.Links.Related.Should().BeNull(); responseDocument.Links.First.Should().BeNull(); responseDocument.Links.Last.Should().BeNull(); responseDocument.Links.Prev.Should().BeNull(); responseDocument.Links.Next.Should().BeNull(); string albumLink = $"/photoAlbums/{responseDocument.SingleData.Id}"; responseDocument.SingleData.Links.Self.Should().Be(albumLink); responseDocument.SingleData.Relationships["photos"].Links.Self.Should().Be(albumLink + "/relationships/photos"); responseDocument.SingleData.Relationships["photos"].Links.Related.Should().Be(albumLink + "/photos"); string photoLink = $"/photos/{existingPhoto.StringId}"; responseDocument.Included.Should().HaveCount(1); responseDocument.Included[0].Links.Self.Should().Be(photoLink); responseDocument.Included[0].Relationships["album"].Links.Self.Should().Be(photoLink + "/relationships/album"); responseDocument.Included[0].Relationships["album"].Links.Related.Should().Be(photoLink + "/album"); }