public async Task PullsSecretUsingCorrectValue([Frozen] Mock <IVaultClientFactory> mockFact, Mock <IVaultClientV1> mockV1,
                                                           Mock <ISecretsEngine> mockSecrets, Mock <IKeyValueSecretsEngine> mockKV, Mock <IVaultClient> mockClient,
                                                           string path, VaultKVV2Provider sut)
            {
                var mockKVV2 = new Mock <IKeyValueSecretsEngineV2>();

                mockKVV2.Setup(m => m.ReadSecretAsync(It.IsAny <string>(), It.IsAny <int?>(), It.IsAny <string>(), It.IsAny <string>()))
                .Returns <string, int?, string, string>((_, __, ___, ____) => Task.FromResult(new Secret <SecretData>()
                {
                    Data = new SecretData()
                    {
                        Data = new Dictionary <string, object>()
                        {
                            { "value", "secret" }
                        }
                    }
                }));
                mockKVV2.CallBase = false;
                mockKV.Setup(m => m.V2).Returns(() => mockKVV2.Object);
                mockSecrets.Setup(m => m.KeyValue).Returns(() => mockKV.Object);
                mockV1.Setup(m => m.Secrets).Returns(() => mockSecrets.Object);
                mockClient.Setup(m => m.V1).Returns(() => mockV1.Object);
                mockFact.Setup(m => m.GetClient()).Returns(() => mockClient.Object);

                var actual = await sut.GetSecret(path).ConfigureAwait(false);

                actual.Should().Be("secret");
            }
            public async Task ExceptionIsRethrown([Frozen] Mock <IVaultClientFactory> mockFact,
                                                  string path, VaultKVV2Provider sut)
            {
                mockFact.Setup(m => m.GetClient()).Returns(() => throw new VaultSharp.Core.VaultApiException("exceptions are dumb"));

                Func <Task <string> > s = () => sut.GetSecret(path);
                await s.Should().ThrowExactlyAsync <VaultSharp.Core.VaultApiException>().ConfigureAwait(false);
            }
            public async Task ExceptionWithWarnAndErrorIsRethrown([Frozen] Mock <IVaultClientFactory> mockFact,
                                                                  string path, VaultKVV2Provider sut)
            {
                var messageDict = new Dictionary <string, IEnumerable <string> >()
                {
                    { "warnings", new List <string>()
                      {
                          "warning"
                      } }, { "errors", new List <string>()
                             {
                                 "error"
                             } }
                };

                mockFact.Setup(m => m.GetClient()).Returns(() => throw new VaultSharp.Core.VaultApiException(HttpStatusCode.OK, JsonConvert.SerializeObject(messageDict)));

                Func <Task <string> > s = () => sut.GetSecret(path);
                await s.Should().ThrowExactlyAsync <VaultSharp.Core.VaultApiException>().ConfigureAwait(false);
            }