public async Task QuerySchedules_ToQueryString_ResourceId_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            // Create
            var crmRequest = new QueryScheduleRequest()
            {
                ResourceId = SetupBase.EntityId
            };

            await crmClient.ExecuteAsync(crmRequest);

            // Test
            var value = QueryHelpers.ParseQuery(requestUri.Query).GetValueOrDefault("@ResourceId").ToString();

            value.Should().NotBeNullOrEmpty();
            value.Should().Be($"{SetupBase.EntityId}");
        }
Exemplo n.º 2
0
        public async Task Search_When_Direction_Present_Then_Query_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var crmRequest = new SearchRequest()
            {
                AppointmentRequest = new AppointmentRequest
                {
                    SearchWindowStart = new DateTime(2020, 09, 19, 9, 0, 0, DateTimeKind.Utc),
                    Direction         = SearchDirection.Forward
                }
            };

            await crmClient.ExecuteAsync(crmRequest);

            var value = QueryHelpers.ParseQuery(requestUri.Query).GetValueOrDefault("@AppointmentRequest").ToString();

            value.Should().NotBeNullOrEmpty();
            value.Should()
            .Be(
                "{\"ServiceId\":\"00000000-0000-0000-0000-000000000000\",\"SearchWindowStart\":\"2020-09-19T09:00:00Z\",\"Direction\":\"Forward\",\"NumberOfResults\":1}"
                );
        }
Exemplo n.º 3
0
        public async Task UpdateEntity_When_Set_DateOnly_Property_Then_Request_Is_Valid()
        {
            const string expectedRequestContent =
                @"{""@odata.type"":""Microsoft.Dynamics.CRM.contact"",""birthdate"":""2020-09-15"",""contactid"":""00000000-0000-0000-0000-000000000001""}";

            var httpRequestContent = string.Empty;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestContent = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId)
            {
                ["birthdate"] = new DateTime(2020, 09, 15)
            };

            await crmClient.UpdateAsync(entity);

            httpRequestContent.Should().Be(expectedRequestContent);
        }
        public async Task QuerySchedules_ToQueryString_When_One_TimeCodes_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var crmRequest = new QueryScheduleRequest()
            {
                TimeCodes = new[] { TimeCode.Filter }
            };

            await crmClient.ExecuteAsync(crmRequest);

            // Test
            var value = QueryHelpers.ParseQuery(requestUri.Query).GetValueOrDefault("@TimeCodes").ToString();

            value.Should().NotBeNullOrEmpty();
            value.Should().Be($"[\"{(int) TimeCode.Filter}\"]");
        }
        public async Task UpdateEntity_When_Set_Lookup_Property_Then_Request_Is_Valid()
        {
            const string expectedRequestContent =
                "{\"[email protected]\":\"systemusers(00000000-0000-0000-0000-000000000001)\",\"contactid\":\"00000000-0000-0000-0000-000000000001\"}";

            var httpRequestContent = string.Empty;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestContent = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId)
            {
                ["ownerid"] = new EntityReference("systemuser", SetupBase.EntityId)
            };

            await crmClient.UpdateAsync(entity);

            httpRequestContent.Should().Be(expectedRequestContent);
        }
Exemplo n.º 6
0
        public async Task RetrievePrincipalAccessRequest_Query_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var principal  = new EntityReference("systemuser", Guid.NewGuid());
            var accountRef = new EntityReference("account", Guid.NewGuid());

            var crmRequest = new RetrievePrincipalAccessRequest(principal, accountRef);

            await crmClient.ExecuteAsync(crmRequest);

            var queryParams = QueryHelpers.ParseQuery(requestUri.Query);

            queryParams.ContainsKey($"@{nameof(crmRequest.Target)}").Should()
            .BeTrue();
            queryParams[$"@{nameof(crmRequest.Target)}"].ToString().Should()
            .Be($"{{\"@odata.id\":\"accounts({accountRef.Id})\"}}");
        }
        public async Task QuerySchedules_ToQueryString_Start_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var crmRequest = new QueryScheduleRequest()
            {
                Start = new DateTime(2019, 02, 25, 0, 0, 0, DateTimeKind.Utc),
            };

            await crmClient.ExecuteAsync(crmRequest);

            var value = QueryHelpers.ParseQuery(requestUri.Query)
                        .GetValueOrDefault("@Start").ToString();

            value.Should().NotBeNullOrEmpty();
            value.Should().Be(crmRequest.Start.ToString("yyyy-MM-ddTHH:mm:ssZ"));
        }
        public async Task UpdateEntity_When_Set_DateTime_Property_As_LocalKind_Then_Request_Is_Valid()
        {
            var localDateTime = new DateTime(2020, 09, 15, 0, 0, 0, DateTimeKind.Local);

            var expectedRequestContent =
                $"{{\"modifiedon\":\"{localDateTime.ToUniversalTime():yyyy-MM-ddTHH:mm:ssZ}\",\"contactid\":\"00000000-0000-0000-0000-000000000001\"}}";
            var httpRequestContent = string.Empty;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestContent = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId)
            {
                ["modifiedon"] = localDateTime
            };

            await crmClient.UpdateAsync(entity);

            httpRequestContent.Should().Be(expectedRequestContent);
        }
        public async Task UpdateEntity_When_Set_String_Property_Then_Request_Is_Valid()
        {
            string expectedRequestContent =
                "{\"firstname\":\"[TEST]\",\"contactid\":\"00000000-0000-0000-0000-000000000001\"}";

            string httpRequestContent = string.Empty;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestContent = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId);

            entity["firstname"] = "[TEST]";

            // Execute
            await crmClient.UpdateAsync(entity);

            // Validate
            httpRequestContent.Should().Be(expectedRequestContent);
        }
Exemplo n.º 10
0
        public async void WhenNotWebApiAction_And_NotRequestBindingPath_ThenUrlValid()
        {
            Uri requestUri = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));


            const string accessType = "Default";
            string       msDynamicsAccessTypeValue = $"Microsoft.Dynamics.CRM.EndpointAccessType'{accessType}'";

            var orgRequest = new OrganizationRequest <JObject>("RetrieveCurrentOrganization");

            orgRequest.Parameters.Add("AccessType", msDynamicsAccessTypeValue);


            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            await crmClient.ExecuteAsync(orgRequest);


            var lastPathSegment = requestUri.Segments[^ 1];
Exemplo n.º 11
0
        public async Task GetAllTimeZonesWithDisplayName_Deserialize_Correct()
        {
            const string jsonContent = @"
            {
                ""value"": [ 
                    {
                        ""timezonecode"": 0,
                        ""timezonedefinitionid"": ""30343341-5cdc-4def-a8ac-7d76187548d2"",
                        ""versionnumber"": 743832113,
                        ""userinterfacename"":""(GMT-12:00) International Date Line West"",
                        ""bias"": 720
                    },
                    {
                        ""timezonecode"": 1,
                        ""timezonedefinitionid"": ""a6d443d7-e9a0-406e-86a2-853d65d17098"",
                        ""versionnumber"": 743832117,
                        ""userinterfacename"": ""(GMT+13:00) Samoa"",
                        ""bias"": -780
                    },
                    {
                        ""timezonecode"": 2,
                        ""timezonedefinitionid"": ""fa16509c-06a9-4ef1-8cb1-883f812f74e1"",
                        ""versionnumber"": 743832127,
                        ""userinterfacename"": ""(GMT-10:00) Hawaii"",
                        ""bias"": 600
                    }
                ]
            }";

            var apiResponse = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json")
            };

            var httpClient = new HttpClient(new MockedHttpMessageHandler(apiResponse));
            var crmClient  = FakeCrmWebApiClient.Create(httpClient);

            var apiRequest = new GetAllTimeZonesWithDisplayNameRequest(localeId: 1033);
            var result     = await crmClient.ExecuteAsync(apiRequest);

            result.Entities.Should().HaveCount(3);

            result.Entities.First(x => x.GetAttributeValue <int>("timezonecode") == 0).Should().NotBeNull();
            result.Entities.First(x => x.GetAttributeValue <int>("timezonecode") == 1).Should().NotBeNull();
            result.Entities.First(x => x.GetAttributeValue <int>("timezonecode") == 2).Should().NotBeNull();

            result.Entities.First(x => x.GetAttributeValue <int>("timezonecode") == 2)
            .GetAttributeValue <double>("bias")
            .Should().Be(600);

            result.Entities.First(x => x.GetAttributeValue <int>("timezonecode") == 2)
            .GetAttributeValue <string>("userinterfacename")
            .Should().Be("(GMT-10:00) Hawaii");

            result.Entities.First(x => x.GetAttributeValue <int>("timezonecode") == 2)
            .GetAttributeValue <Guid>("timezonedefinitionid")
            .Should()
            .Be(Guid.Parse("fa16509c-06a9-4ef1-8cb1-883f812f74e1"));
        }
Exemplo n.º 12
0
        public async Task CreateAsync_Then_EntityId_Parsed_From_Response_Headers()
        {
            var apiResponse = new HttpResponseMessage(HttpStatusCode.NoContent);

            apiResponse.Headers.Add(
                "OData-EntityId", $"https://{SetupBase.D365CeHttpClientBaseAddress}/accounts({SetupBase.EntityId})");

            var httpClient = new HttpClient(new MockedHttpMessageHandler(apiResponse));
            var client     = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("account");
            var result = await client.CreateAsync(entity);

            result.Should().NotBeEmpty();
            result.Should().Be(SetupBase.EntityId);
        }
Exemplo n.º 13
0
        public async Task GetAllTimeZonesWithDisplayName_When_LocaleId_Present_Query_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmRequest = new GetAllTimeZonesWithDisplayNameRequest(1033);
            var crmClient  = FakeCrmWebApiClient.Create(httpClient);
            await crmClient.ExecuteAsync(crmRequest);

            // ^2 index from end
            requestUri.Segments[^ 2].Should().Be("timezonedefinitions/");
Exemplo n.º 14
0
        public async Task DisassociateAsync_Always_EntityTagHeaderValueIsNull()
        {
            EntityTagHeaderValue httpRequestHeader = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                httpRequestHeader = request.Headers.IfMatch.FirstOrDefault();
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var contactRef = new EntityReference("contact", SetupBase.EntityId);

            await crmClient.DisassociateAsync(contactRef, "customerid");

            httpRequestHeader.Should().Be(default);
Exemplo n.º 15
0
        public async Task DisassociateAsync_Always_RequestHaveHttpMethodIsDelete()
        {
            HttpMethod httpRequestMethod = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                httpRequestMethod = request.Method;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var contactRef = new EntityReference("contact", SetupBase.EntityId);

            await crmClient.DisassociateAsync(contactRef, "customerid");

            httpRequestMethod.Should().Be(HttpMethod.Delete);
        }
Exemplo n.º 16
0
        public async Task UpdateEntity_When_RowVersion_NotPresent_And_AllowUpsert_IsTrue_Then_IfMathHeader_Is_Empty()
        {
            HttpRequestHeaders httpRequestHeaders = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestHeaders = request.Headers;

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("account");

            await crmClient.UpdateAsync(entity, allowUpsert : true);

            httpRequestHeaders.IfMatch.Count.Should().Be(0);
        }
Exemplo n.º 17
0
        public async Task WhoAmI_Query_IsCorrect()
        {
            Uri requestUri = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                requestUri = request.RequestUri;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var crmRequest = new WhoAmIRequest();

            await crmClient.ExecuteAsync(crmRequest);

            var value = requestUri.Segments.Last();

            value.Should().NotBeNullOrEmpty();
            value.Should().Be("WhoAmI()");
        }
Exemplo n.º 18
0
        public async Task UpdateEntity_When_RowVersion_NotPresent_Then_Upsert_Is_Disabled()
        {
            HttpRequestHeaders httpRequestHeaders = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestHeaders = request.Headers;

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("account");

            await crmClient.UpdateAsync(entity);

            httpRequestHeaders.IfMatch.Count.Should().BeGreaterOrEqualTo(1);
            httpRequestHeaders.IfMatch.ElementAt(0).IsWeak.Should().BeFalse();
            httpRequestHeaders.IfMatch.ElementAt(0).Tag.Should().Be("*");
        }
        public async Task UpdateEntity_Request_Have_HttpMethod_Is_PATCH()
        {
            HttpMethod httpRequestMethod = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                httpRequestMethod = request.Method;
                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId)
            {
                ["firstname"] = "[TEST]"
            };

            await crmClient.UpdateAsync(entity);

            httpRequestMethod.Should().Be(HttpMethod.Patch);
        }
        public async Task UpdateEntity_Request_Have_JSON_ContentType()
        {
            MediaTypeHeaderValue contentType = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                contentType = request.Content.Headers.ContentType;

                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId);

            entity["firstname"] = "[TEST]";

            await crmClient.UpdateAsync(entity);

            contentType.MediaType.Should().Be("application/json");
        }
        public async Task UpdateEntity_Request_Have_Correct_Uri()
        {
            Uri httpRequestUri = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                httpRequestUri = request.RequestUri;

                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId);

            entity["firstname"] = "[TEST]";

            await crmClient.UpdateAsync(entity);

            httpRequestUri.Segments.Last().Should().Be($"contacts({SetupBase.EntityId})");
        }
Exemplo n.º 22
0
        public void CreateAsync_When_Duplicated_ById_Then_Throw_Exception()
        {
            var crmResponse = @"
            {
                ""error"": {
                    ""code"": """",
                    ""message"": ""A record with matching key values already exists."",
                    ""innererror"": {
                        ""message"": ""Duplicate Record Found for Entity: 1 with ID: { + " + SetupBase.EntityId +
                              @"}"",
                        ""type"" : """",
                        ""stacktrace"" : """"
                    }
                }
            }";

            var apiResponse = new HttpResponseMessage(HttpStatusCode.PreconditionFailed)
            {
                Content = new StringContent(crmResponse, Encoding.UTF8, "application/json")
            };

            apiResponse.Content.Headers.ContentType.Parameters.Add(
                new NameValueHeaderValue("odata.metadata", "minimal"));

            var httpClient = new HttpClient(new MockedHttpMessageHandler(apiResponse));

            var client = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("account")
            {
                Id = SetupBase.EntityId
            };

            Func <Task> createAction = () => client.CreateAsync(entity);

            createAction.Should()
            .Throw <WebApiException>()
            .WithMessage("A record with matching key values already exists.")
            .And.StatusCode.Should().Be((int)HttpStatusCode.PreconditionFailed);
        }
Exemplo n.º 23
0
        public async Task UpdateEntity_When_Set_Money_Property_Then_Request_Is_Valid()
        {
            string expectedRequestContent =
                "{\"@odata.type\":\"Microsoft.Dynamics.CRM.contact\",\"creditlimit\":300.15,\"contactid\":\"00000000-0000-0000-0000-000000000001\"}";
            string httpRequestContent = string.Empty;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestContent = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId);

            entity["creditlimit"] = 300.15;

            await crmClient.UpdateAsync(entity);

            httpRequestContent.Should().Be(expectedRequestContent);
        }
Exemplo n.º 24
0
        public async Task DisassociateAsync_ReferenceContainsAlternateKey_RequestHaveCorrectUri()
        {
            Uri httpRequestUri = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler((request) =>
            {
                httpRequestUri = request.RequestUri;

                return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entityRef = new EntityReference("contact", "keyName", "keyValue");

            await crmClient.DisassociateAsync(entityRef, "customerid");

            var lastSegment = httpRequestUri.Segments.Length - 1;

            httpRequestUri.Segments[lastSegment - 2].Should().Be($"contacts(keyName='keyValue')/");
            httpRequestUri.Segments[lastSegment - 1].Should().Be("customerid/");
            httpRequestUri.Segments[lastSegment].Should().Be("$ref");
        }
        public async Task UpdateEntity_When_Set_Boolean_Property_Then_Request_Is_Valid()
        {
            const string expectedRequestContent =
                "{\"creditonhold\":true,\"contactid\":\"00000000-0000-0000-0000-000000000001\"}";
            var httpRequestContent = string.Empty;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestContent = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("contact", SetupBase.EntityId);

            entity["creditonhold"] = true;

            await crmClient.UpdateAsync(entity);

            httpRequestContent.Should().Be(expectedRequestContent);
        }
Exemplo n.º 26
0
        public async Task When_CustomAction_Parameter_Is_EntityReference_Then_Body_IsCorrect()
        {
            string body = null;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                body = await request.Content.ReadAsStringAsync();

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            // Preparation
            var userRef    = new EntityReference("systemuser", SetupBase.EntityId);
            var crmRequest = new ActionUnboundEntityReferenceIn(userRef);

            // Execution
            await crmClient.ExecuteAsync(crmRequest);

            // Validation
            body.Should().NotBeNullOrEmpty();

            var requestContent = JsonSerializer.Deserialize <Dictionary <string, Dictionary <string, object> > >(body);

            requestContent.Should().ContainKey("UserRef");

            var userRefDeserialized = requestContent["UserRef"];

            userRefDeserialized.Should().ContainKey("systemuserid");
            (userRefDeserialized["systemuserid"] as string).Should()
            .Equals(SetupBase.EntityId.ToString());

            userRefDeserialized.Should().ContainKey("@odata.type");
            (userRefDeserialized["@odata.type"] as string).Should()
            .Equals("Microsoft.Dynamics.CRM.systemuser");
        }
Exemplo n.º 27
0
        public async Task UpdateEntity_When_RowVersion_IsODataETag_Then_Request_Is_Valid()
        {
            HttpRequestHeaders httpRequestHeaders = default;

            var httpClient = new HttpClient(new MockedHttpMessageHandler(async(request) =>
            {
                httpRequestHeaders = request.Headers;

                return(new HttpResponseMessage(HttpStatusCode.NoContent));
            }));

            var crmClient = FakeCrmWebApiClient.Create(httpClient);

            var entity = new Entity("account")
            {
                RowVersion = "W/\"723316\""
            };

            await crmClient.UpdateAsync(entity);

            httpRequestHeaders.IfMatch.Count.Should().BeGreaterOrEqualTo(1);
            httpRequestHeaders.IfMatch.ElementAt(0).IsWeak.Should().BeTrue();
            httpRequestHeaders.IfMatch.ElementAt(0).Tag.Should().Be("\"723316\"");
        }