public JSONSystemInformationMessageQueuePersistence(IJSONMessageQueuePersistenceConfigurationProvider jsonMessageQueuePersistenceConfigurationProvider, IEncodingProvider encodingProvider)
        {
            if (jsonMessageQueuePersistenceConfigurationProvider == null)
            {
                throw new ArgumentNullException("jsonMessageQueuePersistenceConfigurationProvider");
            }

            if (encodingProvider == null)
            {
                throw new ArgumentNullException("encodingProvider");
            }

            this.jsonMessageQueuePersistenceConfiguration = jsonMessageQueuePersistenceConfigurationProvider.GetConfiguration();
            this.encodingProvider = encodingProvider;
        }
        public void Load_StorageFilePathContainsEmptyArray_ResultIsEmpty()
        {
            // Arrange
            string configfurationFileName = "File-With-EmptyArray" + TestConfigFileExtension;
            File.WriteAllText(
                configfurationFileName,
                "[]",
                this.encodingProvider.GetEncoding());

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            var result = queuePersistence.Load();

            // Assert
            Assert.IsEmpty(result);
        }
        public void Load_StorageFilePathContainsInvalidContent_ResultIsNull()
        {
            // Arrange
            string configfurationFileName = "File-With-Invalid-Content" + TestConfigFileExtension;
            File.WriteAllText(
                configfurationFileName,
                "Garble Garble. Yada Yada. I will cause an exception when you try to deserialize me.",
                this.encodingProvider.GetEncoding());

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            var result = queuePersistence.Load();

            // Assert
            Assert.IsNull(result);
        }
        public void Save_TargetFileIsValid_DoesNotYetExist_TargetfileIsIsNotEmptyAfterSave()
        {
            // Arrange
            string configfurationFileName = "New-File+" + Guid.NewGuid() + TestConfigFileExtension;
            var itemArray = TestUtilities.GetSystemInformationObjects(5).Select(systemInformation => new SystemInformationQueueItem(systemInformation)).ToArray();

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            queuePersistence.Save(itemArray);

            // Assert
            Assert.IsNotNullOrEmpty(File.ReadAllText(configfurationFileName));
        }
        public void Save_TargetFileNameIsInvalid_MessageQueuePersistenceExceptionIsThrown(string targetFileName)
        {
            // Arrange
            var itemArray = TestUtilities.GetSystemInformationObjects(5).Select(systemInformation => new SystemInformationQueueItem(systemInformation)).ToArray();

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = targetFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            queuePersistence.Save(itemArray);
        }
        public void Save_TargetFileIsLockedByAnotherProcess_MessageQueuePersistenceExceptionIsThrown()
        {
            // Arrange
            string configfurationFileName = "Locked-File" + TestConfigFileExtension;

            var itemArray = TestUtilities.GetSystemInformationObjects(5).Select(systemInformation => new SystemInformationQueueItem(systemInformation)).ToArray();

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            using (var fileStream = File.OpenWrite(configfurationFileName))
            {
                queuePersistence.Save(itemArray);
            }
        }
        public void Save_ParameterIsNull_ArgumentNullExceptionIsThrown()
        {
            // Arrange
            string configfurationFileName = "A-New-Config-File" + TestConfigFileExtension;

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            queuePersistence.Save(null);
        }
        public void Load_StorageFilePathDoesNotExist_ResultIsNull()
        {
            // Arrange
            string configfurationFileName = "Non-Existing-Config-File" + TestConfigFileExtension;

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            var result = queuePersistence.Load();

            // Assert
            Assert.IsNull(result);
        }
        public void Load_StorageFilePathContainsValidContent_ResultContainsAllItems()
        {
            // Arrange
            string configfurationFileName = "File-With-Valid-Content" + TestConfigFileExtension;
            var itemArray = TestUtilities.GetSystemInformationObjects(5).Select(systemInformation => new SystemInformationQueueItem(systemInformation)).ToArray();

            File.WriteAllText(
                configfurationFileName,
                JsonConvert.SerializeObject(itemArray),
                this.encodingProvider.GetEncoding());

            var configuration = new JSONMessageQueuePersistenceConfiguration { FilePath = configfurationFileName };
            var configurationProvider = new Mock<IJSONMessageQueuePersistenceConfigurationProvider>();
            configurationProvider.Setup(c => c.GetConfiguration()).Returns(configuration);

            var queuePersistence = new JSONSystemInformationMessageQueuePersistence(configurationProvider.Object, this.encodingProvider);

            // Act
            var result = queuePersistence.Load();

            // Assert
            Assert.AreEqual(itemArray, result);
        }
 public void Setup()
 {
     this.jsonMessageQueuePersistenceConfigurationProvider = new AppConfigJSONMessageQueuePersistenceConfigurationProvider();
     this.persistenceConfiguration = this.jsonMessageQueuePersistenceConfigurationProvider.GetConfiguration();
     this.encodingProvider = new DefaultEncodingProvider();
 }