public static string GetManifestDigestSha(
            this IManifestToolService manifestToolService, ManifestMediaType mediaType, string tag, bool isDryRun)
        {
            IEnumerable <JObject> tagManifests = manifestToolService.Inspect(tag, isDryRun).OfType <JObject>();
            string digest;

            bool hasSupportedMediaType = false;

            if (hasSupportedMediaType |= mediaType.HasFlag(ManifestMediaType.ManifestList))
            {
                digest = GetDigestOfMediaType(
                    tag, tagManifests, ManifestToolService.ManifestListMediaType,
                    throwIfNull: mediaType == ManifestMediaType.ManifestList && !isDryRun);

                if (digest != null)
                {
                    return(digest);
                }
            }

            if (hasSupportedMediaType |= mediaType.HasFlag(ManifestMediaType.Manifest))
            {
                return(GetDigestOfMediaType(
                           tag, tagManifests, ManifestToolService.ManifestMediaType, throwIfNull: !isDryRun));
            }

            if (!hasSupportedMediaType)
            {
                throw new ArgumentException($"Unsupported media type: '{mediaType}'.", nameof(mediaType));
            }

            return(null);
        }
        public void GetManifestDigestSha(string tag, ManifestMediaType mediaType, string expectedDigestSha, Type expectedExceptionType = null)
        {
            Mock <IManifestToolService> manifestToolService = new Mock <IManifestToolService>();

            manifestToolService
            .Setup(o => o.Inspect("tag1", false))
            .Returns(ManifestToolServiceHelper.CreateTagManifest(ManifestToolService.ManifestMediaType, ManifestDigest));
            manifestToolService
            .Setup(o => o.Inspect("tag2", false))
            .Returns(ManifestToolServiceHelper.CreateTagManifest(ManifestToolService.ManifestListMediaType, ManifestListDigest));

            if (expectedExceptionType is null)
            {
                string digestSha = ManifestToolServiceExtensions.GetManifestDigestSha(
                    manifestToolService.Object,
                    mediaType,
                    tag,
                    false);
                Assert.Equal(expectedDigestSha, digestSha);
            }
            else
            {
                Assert.Throws(expectedExceptionType, () =>
                {
                    ManifestToolServiceExtensions.GetManifestDigestSha(
                        manifestToolService.Object,
                        mediaType,
                        tag,
                        false);
                });
            }
        }