Example #1
0
        public async Task WhenARequestRequiresABodyThenItDoesNotDeadlock(Type contentSerializerType)
        {
            if (!(Activator.CreateInstance(contentSerializerType) is IContentSerializer serializer))
            {
                throw new ArgumentException($"{contentSerializerType.FullName} does not implement {nameof(IContentSerializer)}");
            }

            var handler = new MockPushStreamContentHttpMessageHandler
            {
                Asserts = async content => new StringContent(await content.ReadAsStringAsync().ConfigureAwait(false))
            };

            var settings = new RefitSettings()
            {
                HttpMessageHandlerFactory = () => handler,
                ContentSerializer         = serializer
            };

            var fixture = RestService.For <IGitHubApi>(BaseAddress, settings);

            var fixtureTask = await RunTaskWithATimeLimit(fixture.CreateUser(new User())).ConfigureAwait(false);

            Assert.True(fixtureTask.IsCompleted);
            Assert.Equal(TaskStatus.RanToCompletion, fixtureTask.Status);
        }
Example #2
0
        public async Task WhenARequestRequiresABodyThenItIsSerialized(Type contentSerializerType)
        {
            if (!(Activator.CreateInstance(contentSerializerType) is IContentSerializer serializer))
            {
                throw new ArgumentException($"{contentSerializerType.FullName} does not implement {nameof(IContentSerializer)}");
            }

            var model = new User
            {
                Name      = "Wile E. Coyote",
                CreatedAt = new DateTime(1949, 9, 16).ToString(),
                Company   = "ACME",
            };

            var handler = new MockPushStreamContentHttpMessageHandler
            {
                Asserts = async content =>
                {
                    var stringContent = new StringContent(await content.ReadAsStringAsync().ConfigureAwait(false));
                    var user          = await serializer.DeserializeAsync <User>(content).ConfigureAwait(false);

                    Assert.NotSame(model, user);
                    Assert.Equal(model.Name, user.Name);
                    Assert.Equal(model.CreatedAt, user.CreatedAt);
                    Assert.Equal(model.Company, user.Company);

                    //  return some content so that the serializer doesn't complain
                    return(stringContent);
                }
            };

            var settings = new RefitSettings()
            {
                HttpMessageHandlerFactory = () => handler,
                ContentSerializer         = serializer
            };

            var fixture = RestService.For <IGitHubApi>(BaseAddress, settings);

            var fixtureTask = await RunTaskWithATimeLimit(fixture.CreateUser(model)).ConfigureAwait(false);

            Assert.True(fixtureTask.IsCompleted);
        }