public async Task Returns200OnSuccess()
            {
                // Arrange
                // Act
                var result = await LotsControler.Put(LotKey, _values);

                // Assert
                Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            }
            public void UtilizesUserIdentityProvider()
            {
                // Arrange
                // Act
                LotsControler.Put(LotKey, _values);

                // Assert
                MockUserIdentityProvider.Verify(m => m.SetUserIdentity(It.IsAny <ISetLotAttributeParameters>()), Times.Once());
            }
            public void CallsServiceMethodAsExpected()
            {
                // Arrange
                // Act
                LotsControler.Put(LotKey, _values);

                // Assert
                MockLotService.Verify(m => m.SetLotAttributes(It.IsAny <ISetLotAttributeParameters>()), Times.Once());
            }
            public async Task Returns400IfValuesAreInvalid()
            {
                // Arrange
                LotsControler.ModelState.AddModelError("", "This is invalid.");

                // Act
                var result = await LotsControler.Put(LotKey, _values);

                // Assert
                Assert.IsNotNull(result);
                Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
                Assert.IsNotNullOrEmpty(result.ReasonPhrase);
            }
            public async Task Returns500OnFailure()
            {
                // Arrange
                const string message = "an error occurred";

                MockLotService.Setup(m => m.SetLotAttributes(It.IsAny <ISetLotAttributeParameters>()))
                .Returns(new FailureResult <ILotStatInfoReturn>(null, message));

                // Act
                var result = await LotsControler.Put(LotKey, _values);

                // Assert
                Assert.AreEqual(HttpStatusCode.InternalServerError, result.StatusCode);
                Assert.AreEqual(message, result.ReasonPhrase);
            }
            public async Task Returns400OnInvalid()
            {
                // Arrange
                const string message = "invalid stuff happened";

                MockLotService.Setup(m => m.SetLotAttributes(It.IsAny <ISetLotAttributeParameters>()))
                .Returns(new InvalidResult <ILotStatInfoReturn>(null, message));

                // Act
                var result = await LotsControler.Put(LotKey, _values);

                // Assert
                Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
                Assert.AreEqual(message, result.ReasonPhrase);
            }
            public void ParametersAreCorrectlyTranslatedToDto()
            {
                // Arrange
                ISetLotAttributeParameters actualParameters = null;

                MockLotService.Setup(m => m.SetLotAttributes(It.IsAny <ISetLotAttributeParameters>()))
                .Callback((ISetLotAttributeParameters p) => actualParameters = p)
                .Returns(new SuccessResult <ILotStatInfoReturn>());

                // Act
                LotsControler.Put(LotKey, _values);

                // Assert
                Assert.IsNotNull(actualParameters);
                Assert.AreEqual(LotKey, actualParameters.LotKey);
                Assert.AreEqual(((ISetLotAttributeParameters)_values).Attributes, actualParameters.Attributes);
            }