public async Task Can_Update_Many_To_Many()
        {
            // arrange
            var context = _fixture.GetService <AppDbContext>();
            var tag     = _tagFaker.Generate();
            var article = _articleFaker.Generate();

            context.Tags.Add(tag);
            context.Articles.Add(article);
            await context.SaveChangesAsync();

            var route   = $"/api/v1/articles/{article.Id}";
            var request = new HttpRequestMessage(new HttpMethod("PATCH"), route);
            var content = new
            {
                data = new
                {
                    type          = "articles",
                    id            = article.StringId,
                    relationships = new Dictionary <string, dynamic>
                    {
                        { "tags", new {
                              data = new [] { new
                                              {
                                                  type = "tags",
                                                  id   = tag.StringId
                                              } }
                          } }
                    }
                }
            };

            request.Content = new StringContent(JsonConvert.SerializeObject(content));
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

            // act
            var response = await _fixture.Client.SendAsync(request);

            // assert
            var body = await response.Content.ReadAsStringAsync();

            Assert.True(HttpStatusCode.OK == response.StatusCode, $"{route} returned {response.StatusCode} status code with payload: {body}");

            var articleResponse = _fixture.GetService <IJsonApiDeSerializer>().Deserialize <Article>(body);

            Assert.NotNull(articleResponse);

            _fixture.ReloadDbContext();
            var persistedArticle = await _fixture.Context.Articles
                                   .Include(a => a.ArticleTags)
                                   .SingleAsync(a => a.Id == articleResponse.Id);

            var persistedArticleTag = Assert.Single(persistedArticle.ArticleTags);

            Assert.Equal(tag.Id, persistedArticleTag.TagId);
        }
        public async Task Can_Update_Many_To_Many()
        {
            // Arrange
            var context = _fixture.GetRequiredService <AppDbContext>();
            var tag     = _tagFaker.Generate();
            var article = _articleFaker.Generate();

            context.Tags.Add(tag);
            context.Articles.Add(article);
            await context.SaveChangesAsync();

            var route   = $"/api/v1/articles/{article.Id}";
            var request = new HttpRequestMessage(new HttpMethod("PATCH"), route);
            var content = new
            {
                data = new
                {
                    type          = "articles",
                    id            = article.StringId,
                    relationships = new Dictionary <string, dynamic>
                    {
                        { "tags", new {
                              data = new [] { new
                                              {
                                                  type = "tags",
                                                  id   = tag.StringId
                                              } }
                          } }
                    }
                }
            };

            request.Content = new StringContent(JsonConvert.SerializeObject(content));
            request.Content.Headers.ContentType = new MediaTypeHeaderValue(HeaderConstants.MediaType);

            // @TODO - Use fixture
            var builder = WebHost.CreateDefaultBuilder()
                          .UseStartup <TestStartup>();
            var server = new TestServer(builder);
            var client = server.CreateClient();

            // Act
            var response = await client.SendAsync(request);

            // Assert
            var body = await response.Content.ReadAsStringAsync();

            Assert.True(HttpStatusCode.OK == response.StatusCode, $"{route} returned {response.StatusCode} status code with payload: {body}");

            var articleResponse = _fixture.GetDeserializer().DeserializeSingle <Article>(body).Data;

            Assert.Null(articleResponse);

            _fixture.ReloadDbContext();
            var persistedArticle = await _fixture.Context.Articles
                                   .Include(a => a.ArticleTags)
                                   .SingleAsync(a => a.Id == article.Id);

            var persistedArticleTag = Assert.Single(persistedArticle.ArticleTags);

            Assert.Equal(tag.Id, persistedArticleTag.TagId);
        }