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 = $"/api/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 + $"/api/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 + $"/api/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"); }