mirror of
https://github.com/bitwarden/mobile
synced 2026-01-06 18:43:43 +00:00
Password generator page. Password generation service. Tests. Renamed some settings constants.
This commit is contained in:
@@ -42,6 +42,14 @@
|
||||
<HintPath>..\..\packages\NSubstitute.1.10.0.0\lib\net45\NSubstitute.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Plugin.Settings, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\net45\Plugin.Settings.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Plugin.Settings.Abstractions, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\Xam.Plugins.Settings.2.1.0\lib\net45\Plugin.Settings.Abstractions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
||||
<HintPath>..\..\packages\xunit.abstractions.2.0.0\lib\net35\xunit.abstractions.dll</HintPath>
|
||||
@@ -69,6 +77,7 @@
|
||||
<Otherwise />
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<Compile Include="PasswordGeneratorServiceTests.cs" />
|
||||
<Compile Include="CryptoServiceTests.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
177
test/App.Test/PasswordGeneratorServiceTests.cs
Normal file
177
test/App.Test/PasswordGeneratorServiceTests.cs
Normal file
@@ -0,0 +1,177 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Bit.App.Services;
|
||||
using NSubstitute;
|
||||
using Plugin.Settings.Abstractions;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.App.Test
|
||||
{
|
||||
public class PasswordGeneratorServiceTests
|
||||
{
|
||||
[Fact]
|
||||
public void GeneratesCorrectLength()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorLength, Arg.Any<int>()).Returns(25);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Length == 25);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectMinNumbers()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorMinNumbers, Arg.Any<int>()).Returns(25);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(char.IsDigit) >= 25);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectMinSpecial()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorMinSpecial, Arg.Any<int>()).Returns(25);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(c => !char.IsLetterOrDigit(c)) >= 25);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectNoUppercase()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorUppercase, Arg.Any<bool>()).Returns(false);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(char.IsUpper) == 0);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectUppercase()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorUppercase, Arg.Any<bool>()).Returns(true);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorLowercase, Arg.Any<bool>()).Returns(false);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorNumbers, Arg.Any<bool>()).Returns(false);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorSpecial, Arg.Any<bool>()).Returns(false);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(char.IsUpper) == 50);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectNoLowercase()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorLowercase, Arg.Any<bool>()).Returns(false);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(char.IsLower) == 0);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectLowercase()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorUppercase, Arg.Any<bool>()).Returns(false);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorLowercase, Arg.Any<bool>()).Returns(true);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorNumbers, Arg.Any<bool>()).Returns(false);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorSpecial, Arg.Any<bool>()).Returns(false);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(char.IsLower) == 50);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectMixed()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(password.Count(char.IsLower) >= 1);
|
||||
Assert.True(password.Count(char.IsDigit) >= 1);
|
||||
Assert.True(password.Count(char.IsUpper) >= 1);
|
||||
Assert.True(password.Count(c => !char.IsLetterOrDigit(c)) >= 1);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GeneratesCorrectNoAmbiguous()
|
||||
{
|
||||
var settings = SetupDefaultSettings();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorAmbiguous, Arg.Any<bool>()).Returns(false);
|
||||
|
||||
var service = new PasswordGenerationService(settings);
|
||||
int i = 0;
|
||||
while(i < 100)
|
||||
{
|
||||
var password = service.GeneratePassword();
|
||||
Assert.True(!password.Any(c => c == '1' || c == 'l' || c == '0' || c == 'O'));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
private ISettings SetupDefaultSettings()
|
||||
{
|
||||
var settings = Substitute.For<ISettings>();
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorLength, Arg.Any<int>()).Returns(50);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorMinNumbers, Arg.Any<int>()).Returns(1);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorMinSpecial, Arg.Any<int>()).Returns(1);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorUppercase, Arg.Any<bool>()).Returns(true);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorLowercase, Arg.Any<bool>()).Returns(true);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorSpecial, Arg.Any<bool>()).Returns(true);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorNumbers, Arg.Any<bool>()).Returns(true);
|
||||
settings.GetValueOrDefault(Constants.PasswordGeneratorAmbiguous, Arg.Any<bool>()).Returns(false);
|
||||
return settings;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NSubstitute" version="1.10.0.0" targetFramework="net46" />
|
||||
<package id="Xam.Plugins.Settings" version="2.1.0" targetFramework="net46" />
|
||||
<package id="xunit" version="2.1.0" targetFramework="net46" />
|
||||
<package id="xunit.abstractions" version="2.0.0" targetFramework="net46" />
|
||||
<package id="xunit.assert" version="2.1.0" targetFramework="net46" />
|
||||
|
||||
Reference in New Issue
Block a user