示例#1
0
        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);
        }
示例#2
0
        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));
        }