SEBWIN-301: Implemented unit tests for configuration backup repository.
This commit is contained in:
		
							parent
							
								
									3338710949
								
							
						
					
					
						commit
						3a95bb054b
					
				
					 3 changed files with 231 additions and 0 deletions
				
			
		| 
						 | 
					@ -0,0 +1,184 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This Source Code Form is subject to the terms of the Mozilla Public
 | 
				
			||||||
 | 
					 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
				
			||||||
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Reflection;
 | 
				
			||||||
 | 
					using System.Runtime.Serialization.Formatters.Binary;
 | 
				
			||||||
 | 
					using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
				
			||||||
 | 
					using Moq;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Lockdown;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Logging;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Lockdown.UnitTests
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						[TestClass]
 | 
				
			||||||
 | 
						public class FeatureConfigurationBackupTests
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							private string filePath;
 | 
				
			||||||
 | 
							private Mock<IModuleLogger> logger;
 | 
				
			||||||
 | 
							private FeatureConfigurationBackup sut;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestInitialize]
 | 
				
			||||||
 | 
							public void Initialize()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								filePath = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\Backup-{Guid.NewGuid()}.bin";
 | 
				
			||||||
 | 
								logger = new Mock<IModuleLogger>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut = new FeatureConfigurationBackup(filePath, logger.Object);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Delete_MustOnlyRemoveGivenData()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configuration1 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var configuration2 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var configuration3 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var toDelete = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration1);
 | 
				
			||||||
 | 
								sut.Save(configuration2);
 | 
				
			||||||
 | 
								sut.Save(toDelete);
 | 
				
			||||||
 | 
								sut.Save(configuration3);
 | 
				
			||||||
 | 
								sut.Delete(toDelete);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var configurations = sut.GetAllConfigurations();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.AreEqual(3, configurations.Count);
 | 
				
			||||||
 | 
								Assert.IsFalse(configurations.Any(c => c.Id == toDelete.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration1.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration2.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration3.Id));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Delete_MustDeleteFileIfEmpty()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configuration = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration);
 | 
				
			||||||
 | 
								Assert.IsTrue(File.Exists(filePath));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Delete(configuration);
 | 
				
			||||||
 | 
								Assert.IsFalse(File.Exists(filePath));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void GetAll_MustReturnAllConfigurationData()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configuration1 = new FeatureConfigurationStub { GroupId = Guid.NewGuid() };
 | 
				
			||||||
 | 
								var configuration2 = new FeatureConfigurationStub { GroupId = Guid.Empty };
 | 
				
			||||||
 | 
								var configuration3 = new FeatureConfigurationStub { GroupId = Guid.Empty };
 | 
				
			||||||
 | 
								var configuration4 = new FeatureConfigurationStub { GroupId = Guid.NewGuid() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration1);
 | 
				
			||||||
 | 
								sut.Save(configuration2);
 | 
				
			||||||
 | 
								sut.Save(configuration3);
 | 
				
			||||||
 | 
								sut.Save(configuration4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var configurations = sut.GetAllConfigurations();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.AreEqual(4, configurations.Count);
 | 
				
			||||||
 | 
								Assert.AreEqual(configurations[0].GroupId, configuration1.GroupId);
 | 
				
			||||||
 | 
								Assert.AreEqual(configurations[1].GroupId, configuration2.GroupId);
 | 
				
			||||||
 | 
								Assert.AreEqual(configurations[2].GroupId, configuration3.GroupId);
 | 
				
			||||||
 | 
								Assert.AreEqual(configurations[3].GroupId, configuration4.GroupId);
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration1.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration2.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration3.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration4.Id));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void GetAll_MustReturnEmptyListIfNoDataAvailable()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configurations = sut.GetAllConfigurations();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.IsInstanceOfType(configurations, typeof(IList<IFeatureConfiguration>));
 | 
				
			||||||
 | 
								Assert.AreEqual(0, configurations.Count);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void GetBy_MustOnlyReturnConfigurationDataBelongingToGroup()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var groupId = Guid.NewGuid();
 | 
				
			||||||
 | 
								var configuration1 = new FeatureConfigurationStub { GroupId = groupId };
 | 
				
			||||||
 | 
								var configuration2 = new FeatureConfigurationStub { GroupId = Guid.NewGuid() };
 | 
				
			||||||
 | 
								var configuration3 = new FeatureConfigurationStub { GroupId = groupId };
 | 
				
			||||||
 | 
								var configuration4 = new FeatureConfigurationStub { GroupId = Guid.NewGuid() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration1);
 | 
				
			||||||
 | 
								sut.Save(configuration2);
 | 
				
			||||||
 | 
								sut.Save(configuration3);
 | 
				
			||||||
 | 
								sut.Save(configuration4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var configurations = sut.GetBy(groupId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.AreEqual(2, configurations.Count);
 | 
				
			||||||
 | 
								Assert.AreEqual(configurations[0].GroupId, groupId);
 | 
				
			||||||
 | 
								Assert.AreEqual(configurations[1].GroupId, groupId);
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration1.Id));
 | 
				
			||||||
 | 
								Assert.IsFalse(configurations.Any(c => c.Id == configuration2.Id));
 | 
				
			||||||
 | 
								Assert.IsTrue(configurations.Any(c => c.Id == configuration3.Id));
 | 
				
			||||||
 | 
								Assert.IsFalse(configurations.Any(c => c.Id == configuration4.Id));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void GetBy_MustReturnEmptyListIfNoDataAvailable()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configurations = sut.GetBy(Guid.NewGuid());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.IsInstanceOfType(configurations, typeof(IList<IFeatureConfiguration>));
 | 
				
			||||||
 | 
								Assert.AreEqual(0, configurations.Count);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Save_MustSaveGivenData()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configuration = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.IsTrue(File.Exists(filePath));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								using (var stream = File.Open(filePath, FileMode.Open))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									Assert.IsInstanceOfType(new BinaryFormatter().Deserialize(stream), typeof(IList<IFeatureConfiguration>));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestMethod]
 | 
				
			||||||
 | 
							public void Save_MustNotOverwriteExistingData()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var configuration1 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var configuration2 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var configuration3 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var configuration4 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
								var configuration5 = new FeatureConfigurationStub();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration1);
 | 
				
			||||||
 | 
								sut.Save(configuration2);
 | 
				
			||||||
 | 
								sut.Save(configuration3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.AreEqual(3, sut.GetAllConfigurations().Count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sut.Save(configuration4);
 | 
				
			||||||
 | 
								sut.Save(configuration5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Assert.AreEqual(5, sut.GetAllConfigurations().Count);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							[TestCleanup]
 | 
				
			||||||
 | 
							public void Cleanup()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								File.Delete(filePath);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This Source Code Form is subject to the terms of the Mozilla Public
 | 
				
			||||||
 | 
					 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
				
			||||||
 | 
					 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using SafeExamBrowser.Contracts.Lockdown;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace SafeExamBrowser.Lockdown.UnitTests
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						[Serializable]
 | 
				
			||||||
 | 
						internal class FeatureConfigurationStub : IFeatureConfiguration
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							public Guid Id { get; set; }
 | 
				
			||||||
 | 
							public Guid GroupId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public FeatureConfigurationStub()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Id = Guid.NewGuid();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public bool DisableFeature()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								throw new NotImplementedException();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public bool EnableFeature()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								throw new NotImplementedException();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public void Monitor()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								throw new NotImplementedException();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							public bool Restore()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								throw new NotImplementedException();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -80,6 +80,8 @@
 | 
				
			||||||
    </Reference>
 | 
					    </Reference>
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <Compile Include="FeatureConfigurationBackupTests.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="FeatureConfigurationStub.cs" />
 | 
				
			||||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
					    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
				
			||||||
    <Compile Include="AutoRestoreMechanismTests.cs" />
 | 
					    <Compile Include="AutoRestoreMechanismTests.cs" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue