public async Task CreateSmartUrlShouldCreateNewRecord()
        {
            var managedConfig    = ConfigureManagedConfig();
            var smartUriResponse = new SmartUrlEntity {
                Id = 1
            };
            var dataProviderMock = new Mock <IDataProvider>();

            dataProviderMock.Setup(a => a.GetSmartUrlByHash(It.IsAny <string>()))
            .Returns(Task.FromResult((SmartUrlEntity)null));
            dataProviderMock.Setup(a => a.GetSmartUrlByKey(It.IsAny <string>()))
            .Returns(Task.FromResult(smartUriResponse));

            var sut = new HashKeyService(managedConfig, dataProviderMock.Object);


            // Act
            var result = await sut.CreateSmartUrl(_url);


            // Assert
            result.Id.ShouldBeEqualTo(smartUriResponse.Id);
            dataProviderMock.Verify(a => a.GetSmartUrlByHash(It.IsAny <string>()), Times.Once);
            dataProviderMock.Verify(a => a.GetSmartUrlByKey(It.IsAny <string>()), Times.Once);
        }
        public async Task CreateSmartUrlShouldGenerateUniqueKey()
        {
            var managedConfig    = ConfigureManagedConfig();
            var smartUriResponse = new SmartUrlEntity {
                Url = _url
            };
            var dataProviderMock = new Mock <IDataProvider>();

            dataProviderMock.Setup(a => a.GetSmartUrlByHash(It.IsAny <string>()))
            .Returns(Task.FromResult((SmartUrlEntity)null));
            dataProviderMock.Setup(a => a.GetSmartUrlByKey(It.IsAny <string>()))
            .Returns(Task.FromResult((SmartUrlEntity)null));
            dataProviderMock.Setup(a => a.Add(It.IsAny <SmartUrlEntity>()))
            .Returns(Task.FromResult(0));

            var sut = new HashKeyService(managedConfig, dataProviderMock.Object);


            // Act
            var result = await sut.CreateSmartUrl(string.Empty);


            // Assert
            result.ShortUrl.ShouldContain("https://localhost:44390");
            dataProviderMock.Verify(a => a.GetSmartUrlByHash(It.IsAny <string>()), Times.Once);
            dataProviderMock.Verify(a => a.Add(It.IsAny <SmartUrlEntity>()), Times.Once);
        }
        public async Task CreateSmartUrlShouldReturnNull()
        {
            var managedConfig = ConfigureManagedConfig();

            managedConfig.Value.KeyLength = 0;
            var dataProviderMock = new Mock <IDataProvider>();

            dataProviderMock.Setup(a => a.GetSmartUrlByHash(It.IsAny <string>()))
            .Returns(Task.FromResult((SmartUrlEntity)null));
            dataProviderMock.Setup(a => a.GetSmartUrlByKey(It.IsAny <string>()))
            .Returns(Task.FromResult((SmartUrlEntity)null));

            var sut = new HashKeyService(managedConfig, dataProviderMock.Object);


            // Act
            var result = await sut.CreateSmartUrl(_url);


            // Assert
            result.Id.ShouldBeEqualTo(0);
            dataProviderMock.Verify(a => a.GetSmartUrlByHash(It.IsAny <string>()), Times.Once);
        }