public async Task TryCreate_ReturnsPluginResource()
        {
            var expectations = new[]
            {
                new PositiveTestExpectation("{}", "https://unit.test", new [] { OperationClaim.DownloadPackage })
            };

            using (var test = new PluginResourceProviderPositiveTest(
                       pluginFilePath: "a",
                       pluginFileState: PluginFileState.Valid,
                       expectations: expectations))
            {
                var result = await test.Provider.TryCreate(expectations[0].SourceRepository, CancellationToken.None);

                Assert.True(result.Item1);
                Assert.IsType <PluginResource>(result.Item2);

                var pluginResource = (PluginResource)result.Item2;
                var pluginResult   = await pluginResource.GetPluginAsync(
                    OperationClaim.DownloadPackage,
                    CancellationToken.None);

                Assert.NotNull(pluginResult);
                Assert.NotNull(pluginResult.Plugin);
                Assert.NotNull(pluginResult.PluginMulticlientUtilities);
            }
        }
        public async Task TryCreate_QueriesPluginForEachPackageSourceRepository()
        {
            var expectations = new[]
            {
                new PositiveTestExpectation("{\"serviceIndex\":1}", "https://1.unit.test", new [] { OperationClaim.DownloadPackage }),
                new PositiveTestExpectation("{\"serviceIndex\":2}", "https://2.unit.test", Enumerable.Empty <OperationClaim>()),
                new PositiveTestExpectation("{\"serviceIndex\":3}", "https://3.unit.test", new [] { OperationClaim.DownloadPackage })
            };

            using (var test = new PluginResourceProviderPositiveTest(
                       pluginFilePath: "a",
                       pluginFileState: PluginFileState.Valid,
                       expectations: expectations))
            {
                IPlugin firstPluginResult = null;
                IPlugin thirdPluginResult = null;

                for (var i = 0; i < expectations.Length; ++i)
                {
                    var expectation = expectations[i];
                    var result      = await test.Provider.TryCreate(expectation.SourceRepository, CancellationToken.None);

                    Assert.True(result.Item1);
                    Assert.IsType <PluginResource>(result.Item2);

                    var pluginResource = (PluginResource)result.Item2;
                    var pluginResult   = await pluginResource.GetPluginAsync(
                        OperationClaim.DownloadPackage,
                        CancellationToken.None);

                    switch (i)
                    {
                    case 0:
                        firstPluginResult = pluginResult.Plugin;
                        break;

                    case 1:
                        Assert.Null(pluginResult);
                        break;

                    case 2:
                        thirdPluginResult = pluginResult.Plugin;
                        break;
                    }
                }

                Assert.NotNull(firstPluginResult);
                Assert.Same(firstPluginResult, thirdPluginResult);
            }
        }