Exemplo n.º 1
0
        public RequestVersionProvider(IEnumerable <IRequestVersionParser> versionParsers,
                                      IOptions <ApiActionConfiguration> configurationAccessor, IVersionEdgeProvider versionEdgeProvider,
                                      IApiActionRegistrationProvider apiActionRegistrationProvider)
        {
            if (versionParsers == null)
            {
                throw new ArgumentNullException(nameof(versionParsers));
            }
            if (configurationAccessor == null)
            {
                throw new ArgumentNullException(nameof(configurationAccessor));
            }
            if (versionEdgeProvider == null)
            {
                throw new ArgumentNullException(nameof(versionEdgeProvider));
            }
            if (apiActionRegistrationProvider == null)
            {
                throw new ArgumentNullException(nameof(apiActionRegistrationProvider));
            }

            _versionParsers = versionParsers.ToArray();
            if (!ApiActionVersion.TryParse(configurationAccessor.Value.DefaultRequestVersion, out _defaultVersion))
            {
                _defaultVersion = versionEdgeProvider
                                  .GetVersionEdges(apiActionRegistrationProvider.Registrations
                                                   .Select(r => r.ApiActionType).ToList()).OrderByDescending(v => v)
                                  .FirstOrDefault()
                                  ?? new ApiActionVersion(1, 0);
            }
        }
        public void DoesNotEqualNull()
        {
            var version = ApiActionVersion.Parse("1.0");

            Assert.AreNotEqual(version, null);
            Assert.IsFalse(version == null);
            Assert.IsFalse(version.Equals(null));
            Assert.IsTrue(version != null);
        }
        public void ComparisonsErrorOnNull()
        {
            var version = ApiActionVersion.Parse("1.0");

            Assert.ThrowsException <ArgumentNullException>(() => version < null);
            Assert.ThrowsException <ArgumentNullException>(() => version <= null);
            Assert.ThrowsException <ArgumentNullException>(() => version > null);
            Assert.ThrowsException <ArgumentNullException>(() => version >= null);

            Assert.ThrowsException <ArgumentNullException>(() => null < version);
            Assert.ThrowsException <ArgumentNullException>(() => null <= version);
            Assert.ThrowsException <ArgumentNullException>(() => null > version);
            Assert.ThrowsException <ArgumentNullException>(() => null >= version);
        }
        public void InEqualComparisons(string smaller, string larger)
        {
            Assert.IsTrue(ApiActionVersion.TryParse(smaller, out var smallerVersion));
            Assert.IsTrue(ApiActionVersion.TryParse(larger, out var largerVersion));

            Assert.IsFalse(smallerVersion == largerVersion);
            Assert.IsFalse(smallerVersion.Equals(largerVersion));
            Assert.IsTrue(smallerVersion != largerVersion);
            Assert.AreNotEqual(smallerVersion.GetHashCode(), largerVersion.GetHashCode());

            Assert.IsTrue(smallerVersion < largerVersion);
            Assert.IsTrue(smallerVersion <= largerVersion);
            Assert.IsTrue(smallerVersion.CompareTo(largerVersion) < 0);

            Assert.IsTrue(largerVersion > smallerVersion);
            Assert.IsTrue(largerVersion >= smallerVersion);
            Assert.IsTrue(largerVersion.CompareTo(smallerVersion) > 0);

            Assert.AreNotEqual(largerVersion.ToString(), smallerVersion.ToString());
        }
Exemplo n.º 5
0
        public ApiActionVersion Get(HttpContext context, IDictionary <string, object> routeValues)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (routeValues == null)
            {
                throw new ArgumentNullException(nameof(routeValues));
            }

            context.Items.TryGetValue(RequestCacheKey, out var requestCachedVersion);

            var version = requestCachedVersion as ApiActionVersion;

            if (version == null)
            {
                foreach (var versionParser in _versionParsers)
                {
                    var versionString = versionParser.Parse(context, routeValues);

                    if (versionString != null && ApiActionVersion.TryParse(versionString, out version))
                    {
                        break;
                    }
                }

                if (version == null)
                {
                    // If version not found, use configuration provided value, then default
                    version = _defaultVersion;
                }

                context.Items[RequestCacheKey] = version;
            }

            return(version);
        }
        public void EqualComparisons(string value1, string value2)
        {
            var version1 = ApiActionVersion.Parse(value1);
            var version2 = ApiActionVersion.Parse(value2);

            Assert.IsTrue(version1 == version1);
            Assert.IsTrue(version1.Equals(version1));
            Assert.IsFalse(version1 != version1);
            Assert.AreEqual(0, version1.CompareTo(version1));
            Assert.AreEqual(version1, version1);

            Assert.IsTrue(version1 == version2);
            Assert.IsTrue(version2 == version1);
            Assert.IsTrue(version1.Equals(version2));
            Assert.IsTrue(version2.Equals(version1));
            Assert.IsFalse(version1 != version2);
            Assert.AreEqual(0, version1.CompareTo(version2));
            Assert.AreEqual(0, version2.CompareTo(version1));
            Assert.AreEqual(version1, version2);

            Assert.AreEqual(version1.GetHashCode(), version2.GetHashCode());
            Assert.AreEqual(version1.ToString(), version2.ToString());
        }
 public void TryParseInvalidVersion(string value)
 {
     Assert.IsFalse(ApiActionVersion.TryParse(value, out var output));
     Assert.IsNull(output);
 }