public void GetConfigForVersion_ShouldReturnNotFound_WhenNoConfigurationExists()
        {
            // arrange
            var configKey     = _fixture.Create <string>();
            var configVersion = _fixture.Create <Version>();
            var envTag        = _fixture.Create <string>();

            A.CallTo(() => _configurationStoreService.GetConfigurationValue(
                         configKey,
                         configVersion,
                         envTag))
            .Returns(Task.FromResult <ConfigurationValue>(null));

            // act
            var response = _browser.Get(
                $"/api/keys/{configKey}/version/{configVersion}/{envTag}",
                with =>
            {
                with.HttpRequest();
                with.Accept(new MediaRange("application/json"));
            });

            // assert
            response.StatusCode.Should().Be(HttpStatusCode.NotFound);
        }
        private async Task <dynamic> GetConfigForVersion(dynamic parameters, CancellationToken token)
        {
            string  key            = parameters.configKey;
            Version version        = parameters.configVersion;
            string  environmentTag = parameters.envTag;

            int?currentSequence = Request.Query.seq;

            var configurationValue = await _configStoreService
                                     .GetConfigurationValue(key, version, environmentTag)
                                     .ConfigureAwait(false);

            var negociator = Negotiate
                             .WithStatusCode(HttpStatusCode.OK);

            if (configurationValue == null)
            {
                negociator = Negotiate
                             .WithStatusCode(HttpStatusCode.NotFound);
            }
            else
            {
                if (currentSequence.HasValue &&
                    configurationValue.Sequence == currentSequence.Value)
                {
                    // no need to return, nothing changed
                    negociator = Negotiate
                                 .WithStatusCode(HttpStatusCode.NotModified);
                }
                else
                {
                    var mappedConfigValue = Mapper.Map <ConfigurationValue, ConfigValueListItem>(configurationValue);
                    negociator = negociator
                                 .WithModel(mappedConfigValue);
                }
            }

            return(negociator
                   .WithAllowedMediaRange(JsonMediaRange));
        }