public async Task Should_AttachPictureProduct_ForNonExistingProduct_Returns404()
        {
            //arrange
            var command = GetCreateProductCommand();

            await CreateProductAsync(command);

            var addPictureCommand = new AddPictureCommand
            {
                Description = "Picture from Wadowice",
                Url         = "http://ubiquitous.com/api/product/picture/2137",
                MimeTypeId  = MimeType.Jpg.Id,
                Filename    = "Picture #1"
            };

            //act
            var addPicturePath = PicturesController.AddPicture();
            var addResponse    = await Client.PostAsJsonAsync(addPicturePath, addPictureCommand);

            var postStringResult = await addResponse.Content.ReadAsStringAsync();

            var pictureResult = JsonConvert.DeserializeObject <PictureViewModel>(postStringResult);

            var attachPictureToProduct = ProductController.AttachPicture(Guid.NewGuid(), pictureResult.Id);
            var attachResponse         = await Client.PostAsJsonAsync(attachPictureToProduct, new {});

            //assert
            attachResponse.StatusCode.Should().Be(HttpStatusCode.NotFound);
        }
        public async Task <(Guid, Guid)> Should_AddPictureProduct_Returns200()
        {
            //arrange
            var addedPicture = await AddPicture();

            var command        = GetCreateProductCommand();
            var createdProduct = await CreateProductAsync(command);

            //act
            var attachPictureToProduct = ProductController.AttachPicture(createdProduct.Id, addedPicture.Id);
            var attachResponse         = await Client.PostAsJsonAsync(attachPictureToProduct, new {});

            var getResponse = await GetProductAsync(createdProduct.Id);

            var stringResult = await getResponse.Content.ReadAsStringAsync();

            var responseProduct = JsonConvert.DeserializeObject <ProductViewModel>(stringResult);

            //assert
            attachResponse.StatusCode.Should().Be(HttpStatusCode.OK);
            getResponse.StatusCode.Should().Be(HttpStatusCode.OK);

            command.Should().NotBeNull();
            command.Name.Should().Be(createdProduct.Name);
            command.Description.Should().Be(createdProduct.Description);
            command.BarCode.Should().Be(createdProduct.BarCode);
            command.Price.Should().Be(createdProduct.Price);
            command.Dimensions.Should().Be(createdProduct.Dimensions);
            command.ManufacturerId.Should().Be(createdProduct.ManufacturerId);

            responseProduct.Id.Should().Be(createdProduct.Id);
            responseProduct.Name.Should().Be(createdProduct.Name);
            responseProduct.Description.Should().Be(createdProduct.Description);
            responseProduct.BarCode.Should().Be(createdProduct.BarCode);
            responseProduct.Price.Should().Be(createdProduct.Price);
            responseProduct.Dimensions.Should().Be(createdProduct.Dimensions);
            responseProduct.ManufacturerId.Should().Be(createdProduct.ManufacturerId);
            responseProduct.IsPublished.Should().BeFalse();
            responseProduct.Pictures.Count.Should().Be(1);

            var picture = responseProduct.Pictures.First();

            picture.Id.Should().NotBeEmpty();
            picture.Description.Should().Be(addedPicture.Description);
            picture.Url.Should().Be(addedPicture.Url);
            picture.FileName.Should().Be(addedPicture.FileName);
            picture.MimeTypeId.Should().Be(addedPicture.MimeTypeId);

            return(responseProduct.Id, picture.Id);
        }