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()); }
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); }