public async Task PostShouldCreateChallenge() { //Arrange var challenge = Fakers.Challenge.Generate(); var challengesRepository = A.Fake <IChallengesRepository>(); A.CallTo(() => challengesRepository.CreateChallengeAsync(A <Challenge> .Ignored)).Returns(Task.FromResult(challenge)); A.CallTo(() => challengesRepository.FindChallengeAsync(challenge.Id)).Returns(Task.FromResult(challenge)); using var factory = new JeevesWebApplicationFactory(services => services.SwapSingleton(provider => challengesRepository)); using var client = factory.CreateClient(); var createChallengeRequest = new CreateChallenge() { Name = challenge.Name }; //Act using var response = await client.PostAsync("/api/v1/challenges/", JsonSerializer.Serialize(createChallengeRequest)); //Assert response.StatusCode.Should().Be(HttpStatusCode.Created); using var getResponse = await client.GetSuccessAsync($"/api/v1/challenges/{challenge.Id}"); var actualChallenge = JsonSerializer.Deserialize <JeevesChallenge>(await getResponse.Content.ReadAsStringAsync()); actualChallenge.Should().BeEquivalentTo(challenge); }
protected override void OnHandleIntent(Intent intent) { var bundle = intent.GetBundleExtra(nameof(CreateChallenge)); var cmd = new CreateChallenge( Guid.NewGuid(), bundle.GetInt(nameof(CreateChallenge.Repetitions)), bundle.GetString(nameof(CreateChallenge.Description))); var task = challengeService.ExecuteCommand(cmd); task.ContinueWith(_ => BroadcastSuccess()); task.ContinueWith(_ => BroadcastFailure(), TaskContinuationOptions.OnlyOnFaulted); }
public async Task PostShouldReturnCreatedStatusCode() { //Arrange var challenge = Fakers.Challenge.Generate(); var challengesRepository = A.Fake <IChallengesRepository>(); A.CallTo(() => challengesRepository.CreateChallengeAsync(A <Challenge> .Ignored)).Returns(Task.FromResult(challenge)); using var factory = new JeevesWebApplicationFactory(services => services.SwapSingleton(provider => challengesRepository)); using var client = factory.CreateClient(); var createChallengeRequest = new CreateChallenge() { Name = challenge.Name }; //Act using var response = await client.PostAsync("/api/v1/challenges/", JsonSerializer.Serialize(createChallengeRequest)); //Assert response.StatusCode.Should().Be(HttpStatusCode.Created); response.Headers.Location.PathAndQuery.Should().Be($"/api/v1/challenges/{challenge.Id}"); }
async Task When(CreateChallenge cmd) { var challengeId = new ChallengeId(cmd.Id); await Update(challengeId, c => c.Create(challengeId, cmd.Repetitions, cmd.Description)); }