public void Update_ConfigContainsUnrelatedKeys_AddsNewKeysAfterThem()
        {
            var reader = new FakeGpgAgentConfigReader(new[]
            {
                "key_3 value_3",
                "key_4 value_4"
            });
            var updater   = new GpgAgentConfigUpdater(reader);
            var keysToSet = new Dictionary <string, string>
            {
                { "key_1", "value_1" },
                { "key_2", "value_2" },
            };

            updater.UpdateAgentConfig(keysToSet);
            var lines = reader.ReadConfigLines();

            lines.ShouldBe(new[]
            {
                "key_3 value_3",
                "key_4 value_4",
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_1 value_1",
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_2 value_2"
            });
        }
        public void Update_KeysExistWithWrongValue_OverwritesThem()
        {
            var reader = new FakeGpgAgentConfigReader(new[]
            {
                "key_1 value_2",
                "key_2 value_1"
            });

            var updater   = new GpgAgentConfigUpdater(reader);
            var keysToSet = new Dictionary <string, string>
            {
                { "key_1", "value_1" },
                { "key_2", "value_2" },
            };

            updater.UpdateAgentConfig(keysToSet);
            var lines = reader.ReadConfigLines();

            lines.ShouldBe(new[]
            {
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_1 value_1",
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_2 value_2"
            });
        }
        public void Update_FileContainsNonKeyLines_PreservesThem()
        {
            var reader = new FakeGpgAgentConfigReader(new[]
            {
                "#this is a comment",
                "key_1 value_2",
                "",
                "key_2 value_2"
            });

            var updater   = new GpgAgentConfigUpdater(reader);
            var keysToSet = new Dictionary <string, string>
            {
                { "key_1", "value_1" },
                { "key_3", "value_3" },
            };

            updater.UpdateAgentConfig(keysToSet);
            var lines = reader.ReadConfigLines();

            lines.ShouldBe(new[]
            {
                "#this is a comment",
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_1 value_1",
                "",
                "key_2 value_2",
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_3 value_3"
            });
        }
        public void Update_ReaderThrowsOnRead_SwallowsException()
        {
            var readerMock = new Mock <IGpgAgentConfigReader>();

            readerMock.Setup(r => r.ReadConfigLines()).Throws <Exception>();
            var updater = new GpgAgentConfigUpdater(readerMock.Object);

            Should.NotThrow(() => updater.UpdateAgentConfig(new Dictionary <string, string>()));
        }
        public void Update_ReaderThrowsOnWrite_SwallowsException()
        {
            var readerMock = new Mock <IGpgAgentConfigReader>();

            readerMock.Setup(r => r.ReadConfigLines()).Returns(new string[0]);
            readerMock.Setup(r => r.WriteConfigLines(It.IsAny <string[]>())).Throws <Exception>();
            var updater = new GpgAgentConfigUpdater(readerMock.Object);

            Should.NotThrow(() => updater.UpdateAgentConfig(new Dictionary <string, string> {
                { "key", "value" }
            }));
        }
        public void Update_KeysAlreadyExistWithRequiredValues_DoesNotWriteKeys()
        {
            var readerMock = new Mock <IGpgAgentConfigReader>();

            readerMock.Setup(r => r.ReadConfigLines()).Returns(new[]
            {
                "key_1 value_1",
                "key_2 value_2"
            });
            var updater   = new GpgAgentConfigUpdater(readerMock.Object);
            var keysToSet = new Dictionary <string, string>
            {
                { "key_1", "value_1" },
                { "key_2", "value_2" },
            };

            updater.UpdateAgentConfig(keysToSet);

            readerMock.Verify(m => m.WriteConfigLines(It.IsAny <string[]>()), Times.Never);
        }
        public void Update_EmptyCollection_WritesKeysToSet()
        {
            var reader    = new FakeGpgAgentConfigReader(new string[0]);
            var updater   = new GpgAgentConfigUpdater(reader);
            var keysToSet = new Dictionary <string, string>
            {
                { "key_1", "value_1" },
                { "key_2", "value_2" },
            };

            updater.UpdateAgentConfig(keysToSet);
            var lines = reader.ReadConfigLines();

            lines.ShouldBe(new[]
            {
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_1 value_1",
                GpgAgentConfigUpdater.ManagedByPassWinmenuComment,
                "key_2 value_2"
            });
        }