public async Task ShouldPublishEventAfterUpdateSuccessfully() { var itemGroup = new ItemGroup().Of(_token.TenantId); var optionGroup1 = new OptionGroup().To(itemGroup); var optionGroup2 = new OptionGroup().To(itemGroup); var option = new Option().To(optionGroup1); _server.Database.ItemGroups.Add(itemGroup); _server.Database.OptionGroups.AddRange(optionGroup1, optionGroup2); _server.Database.Options.Add(option); await _server.Database.SaveChangesAsync(); var path = $"options/{option.Id}"; var jsonRequest = new SaveOptionJson().Build(groupId: optionGroup2.Id); var response = await _client.PutJsonAsync(path, jsonRequest); var publishedEvent = _server.EventBus.PublishedEvents .Single(@event => @event.Name == "menu.option.updated"); var payload = (OptionPayload)publishedEvent.Payload; await _server.Database.Entry(option).ReloadAsync(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(payload.Id, option.Id); Assert.Equal(payload.TenantId, option.TenantId); Assert.Equal(payload.Name, option.Name); Assert.Equal(payload.Description, option.Description); Assert.Equal(payload.Price, option.Price); Assert.Equal(payload.IsAvailable, option.IsAvailable); }
public async Task ShouldUpdateSuccessfully() { var itemGroup = new ItemGroup().Of(_token.TenantId); var optionGroup1 = new OptionGroup().To(itemGroup); var optionGroup2 = new OptionGroup().To(itemGroup); var option = new Option().To(optionGroup1); _server.Database.ItemGroups.Add(itemGroup); _server.Database.OptionGroups.AddRange(optionGroup1, optionGroup2); _server.Database.Options.Add(option); await _server.Database.SaveChangesAsync(); var path = $"/options/{option.Id}"; var jsonRequest = new SaveOptionJson().Build(groupId: optionGroup2.Id); var response = await _client.PutJsonAsync(path, jsonRequest); var jsonResponse = await _client.ReadJsonAsync <OptionJson>(response); await _server.Database.Entry(option).ReloadAsync(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(_token.TenantId, option.TenantId); Assert.Equal(jsonRequest.GroupId, option.OptionGroupId); Assert.Equal(jsonRequest.Name, option.Name); Assert.Equal(jsonRequest.Description, option.Description); Assert.Equal(jsonRequest.Price, option.Price); Assert.Equal(jsonRequest.IsAvailable, option.IsAvailable); Assert.Equal(option.Id, jsonResponse.Id); Assert.Equal(option.OptionGroupId, optionGroup2.Id); Assert.Equal(option.Name, jsonResponse.Name); Assert.Equal(option.Description, jsonResponse.Description); Assert.Equal(option.Price, jsonResponse.Price); Assert.Equal(option.IsAvailable, jsonResponse.Available); }
public static SaveOptionJson Build(this SaveOptionJson json, long groupId) { json.GroupId = groupId; json.Name = ConstantFactory.Text(); json.Description = ConstantFactory.Text(); json.Price = 5; json.IsAvailable = true; return(json); }
public async Task ShouldRespond422ForInexistentGroupId() { var itemGroup = new ItemGroup().Of(_token.TenantId); var optionGroup = new OptionGroup().To(itemGroup); _server.Database.ItemGroups.Add(itemGroup); _server.Database.OptionGroups.Add(optionGroup); await _server.Database.SaveChangesAsync(); var path = "/options"; var jsonRequest = new SaveOptionJson().Build(groupId: 90); var response = await _client.PostJsonAsync(path, jsonRequest); var jsonResponse = await _client.ReadJsonAsync <UnprocessableEntityError>(response); Assert.Equal(HttpStatusCode.UnprocessableEntity, response.StatusCode); Assert.Equal("OPTION_GROUP_NOT_FOUND", jsonResponse.Error); }
public async Task <IActionResult> Create([FromBody] SaveOptionJson json) { var catalog = new OptionCatalog(_dbContext, _messageBroker); var option = json.MapTo(new Option { TenantId = User.Claims.TenantId() }); await catalog.Add(option); if (catalog.GroupNotExists) { return(new OptionGroupNotFoundError()); } return(new OptionJson(catalog.Option)); }
public async Task <IActionResult> Update([FromRoute] long id, [FromBody] SaveOptionJson json) { var catalog = new OptionCatalog(_dbContext, _messageBroker); var tenantId = User.Claims.TenantId(); await catalog.Find(tenantId, id); if (catalog.OptionNotExists) { return(new OptionNotFoundError()); } json.MapTo(catalog.Option); await catalog.Update(); if (catalog.GroupNotExists) { return(new OptionGroupNotFoundError()); } return(new OptionJson(catalog.Option)); }