Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add correct tray menu provider #126

Merged
merged 24 commits into from
Apr 26, 2020
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 52 additions & 0 deletions KeeTrayTOTP.Tests/Extensions/PwDocumentExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using KeePass.UI;
using KeePassLib;
using KeePassLib.Keys;
using KeePassLib.Serialization;

namespace KeeTrayTOTP.Tests.Extensions
{
public static class PwDocumentExtensions
{
public static PwDocument Locked(this PwDocument pwDocument)
{
pwDocument.LockedIoc = pwDocument.Database.IOConnectionInfo.CloneDeep();
pwDocument.Database.Close();
return pwDocument;
}

public static PwDocument NewAs(this PwDocument pwDocument, string filename)
{
pwDocument.Database.New(IOConnectionInfo.FromPath(filename), new CompositeKey());
return pwDocument;
}

public static PwDocument New(this PwDocument pwDocument)
{
return pwDocument.NewAs("foobar");
}

public static PwDocument WithTotpEnabledEntries(this PwDocument pwDocument, int count)
{
for (int i = 0; i < count; i++)
{
pwDocument.Database.RootGroup.AddEntry(
new PwEntry(true, true).WithValidTotpSettings(),
true);
}

return pwDocument;
}

public static PwDocument WithNonTotpEntries(this PwDocument pwDocument, int count)
{
for (int i = 0; i < count; i++)
{
pwDocument.Database.RootGroup.AddEntry(
new PwEntry(true, true),
true);
}

return pwDocument;
}
}
}
20 changes: 20 additions & 0 deletions KeeTrayTOTP.Tests/Extensions/PwEntryExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using KeePassLib;
using KeePassLib.Security;

namespace KeeTrayTOTP.Tests.Extensions
{
internal static class PwEntryExtensions
{
internal static PwEntry WithValidTotpSettings(this PwEntry pwEntry)
{
pwEntry.Strings.Set(Localization.Strings.TOTPSeed, new ProtectedString(false, "JBSWY3DPEHPK3PXP"));
pwEntry.Strings.Set(Localization.Strings.TOTPSettings, new ProtectedString(false, "30;6"));
return pwEntry;
}
}
}
58 changes: 58 additions & 0 deletions KeeTrayTOTP.Tests/Menu/LegacyTrayMenuTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System.Windows.Forms;
using FluentAssertions;
using KeePass.App.Configuration;
using KeePass.Forms;
using KeePass.Plugins;
using KeePass.UI;
using KeeTrayTOTP.Menu;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

namespace KeeTrayTOTP.Tests.Menu
{
[TestClass]
public class LegacyTrayMenuTests
{
[TestMethod]
public void LegacyTrayMenuItemProvider_ShouldReturnNull()
{
var plugin = CreatePluginHostMock(out var host);
var legacyTrayMenuItemProvider = new LegacyTrayMenuItemProvider(plugin, host.Object);

var sut = legacyTrayMenuItemProvider.ProvideMenuItem();

sut.Should().BeNull();
}

[TestMethod]
public void LegacyTrayMenuItemProvider_ShouldAddItemsDirectlyToMainWindowsTrayContextMenu()
{
var plugin = CreatePluginHostMock(out var host);
host.Object.CustomConfig.SetBool(KeeTrayTOTPExt.setname_bool_LegacyTrayMenuProvider_Enable, true);
var oldItemCount = host.Object.MainWindow.TrayContextMenu.Items.Count;

plugin.Initialize(host.Object);

var sut = host.Object.MainWindow.TrayContextMenu.Items.Count;

sut.Should().Be(oldItemCount + 2);
}

private static KeeTrayTOTPExt CreatePluginHostMock(out Mock<IPluginHost> host)
dannoe marked this conversation as resolved.
Show resolved Hide resolved
{
var plugin = new KeeTrayTOTPExt();
host = new Mock<IPluginHost>(MockBehavior.Strict);

var mainForm = new MainForm();
host.SetupGet(c => c.MainWindow).Returns(mainForm);

var customConfig = new AceCustomConfig();
host.SetupGet(c => c.CustomConfig).Returns(customConfig);

var columnProviderPool = new ColumnProviderPool();
host.SetupGet(c => c.ColumnProviderPool).Returns(columnProviderPool);

return plugin;
}
}
}
125 changes: 125 additions & 0 deletions KeeTrayTOTP.Tests/Menu/MenuItemProviderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
using FluentAssertions;
using KeePass.App.Configuration;
using KeePass.Forms;
using KeePass.Plugins;
using KeePass.UI;
using KeeTrayTOTP.Menu;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

namespace KeeTrayTOTP.Tests.Menu
{
[TestClass]
public class MenuItemProviderTests
{
private KeeTrayTOTPExt _plugin;
private Mock<IPluginHost> _host;

[TestInitialize]
public void Initialize()
{
_plugin = CreatePluginHostMock(out var host);
_host = host;
}

[TestMethod]
public void MenuItemProvider_ShouldDefaultReturnTheTrayMenuItemProvider()
{
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

sut.TrayMenuItemProvider.Should().BeOfType<TrayMenuItemProvider>();
}

[TestMethod]
public void MenuItemProvider_ShouldReturnTheLegacyTrayMenuItemProvider_IfSetInConfig()
{
_host.Object.CustomConfig.SetBool(KeeTrayTOTPExt.setname_bool_LegacyTrayMenuProvider_Enable, true);
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

sut.TrayMenuItemProvider.Should().BeOfType<LegacyTrayMenuItemProvider>();
}

[TestMethod]
public void MenuItemProvider_ShouldReturnTheCorrectTrayMenuEntries()
{
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

var trayMenuItem = sut.GetMenuItem(PluginMenuType.Tray);

trayMenuItem.Should().NotBeNull();
trayMenuItem.HasDropDownItems.Should().BeTrue();
trayMenuItem.DropDownItems.Should().HaveCount(1, "because, there should be a pseudo entry.");
}

[TestMethod]
public void MenuItemProvider_ShouldReturnTheCorrectMainMenuEntries()
{
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

var mainMenuItem = sut.GetMenuItem(PluginMenuType.Main);
mainMenuItem.Should().NotBeNull();
mainMenuItem.HasDropDownItems.Should().BeTrue();
mainMenuItem.DropDownItems.Should().HaveCount(4);
}

[TestMethod]
public void MenuItemProvider_ShouldReturnTheCorrectEntryMenuEntries()
{
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

var mainMenuItem = sut.GetMenuItem(PluginMenuType.Entry);
mainMenuItem.Should().NotBeNull();
mainMenuItem.HasDropDownItems.Should().BeTrue();
mainMenuItem.DropDownItems.Should().HaveCount(3);
}

[TestMethod]
public void MenuItemProvider_ShouldReturnNullForGroupMenuEntries()
{
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

var mainMenuItem = sut.GetMenuItem(PluginMenuType.Group);
mainMenuItem.Should().BeNull();
}

[TestMethod]
public void MenuItemProvider_ShouldReturnNullForUnknownEnumValue()
{
_plugin.Initialize(_host.Object);

var sut = new MenuItemProvider(_plugin, _host.Object);

var mainMenuItem = sut.GetMenuItem((PluginMenuType)4);
mainMenuItem.Should().BeNull();
}

private static KeeTrayTOTPExt CreatePluginHostMock(out Mock<IPluginHost> host)
{
var plugin = new KeeTrayTOTPExt();
host = new Mock<IPluginHost>(MockBehavior.Strict);

var mainForm = new MainForm();
host.SetupGet(c => c.MainWindow).Returns(mainForm);

var customConfig = new AceCustomConfig();
host.SetupGet(c => c.CustomConfig).Returns(customConfig);

var columnProviderPool = new ColumnProviderPool();
host.SetupGet(c => c.ColumnProviderPool).Returns(columnProviderPool);

return plugin;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using KeeTrayTOTP.Libraries;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace KeeTrayTOTP.Tests
namespace KeeTrayTOTP.Tests.Menu
{
[TestClass]
public class TrayContextMenuPositionTests
Expand Down