private static async Task SetupFakeBinaryFilesAsync(UpdaterEnvironment updaterEnv,
                                                     Dictionary <string, byte[]>?fakeBinaryFiles  = null,
                                                     Dictionary <string, byte[]>?fakeAppDataFiles = null)
 {
     await SetupFakeFilesAsync(updaterEnv.BinaryDir, fakeBinaryFiles);
     await SetupFakeFilesAsync(updaterEnv.AppDataDir, fakeAppDataFiles);
 }
        private static async Task MockEnvironmentAsync(Func <UpdaterEnvironment, Task> asyncAction)
        {
            var mockUpdaterEnv = new UpdaterEnvironment()
            {
                Version    = new Version("0.1.0.0"),
                BinaryDir  = Path.Join(Path.GetTempPath(), Path.GetRandomFileName()),
                AppDataDir = Path.Join(Path.GetTempPath(), Path.GetRandomFileName())
            };

            mockUpdaterEnv.RollBackDir = Path.Join(mockUpdaterEnv.AppDataDir, "Temp");

            InitializeDirectory(mockUpdaterEnv.BinaryDir);
            InitializeDirectory(mockUpdaterEnv.AppDataDir);
            InitializeDirectory(mockUpdaterEnv.RollBackDir);

            try
            {
                await asyncAction(mockUpdaterEnv);
            }
            finally
            {
                CleanDirectory(mockUpdaterEnv.BinaryDir);
                CleanDirectory(mockUpdaterEnv.AppDataDir);
                CleanDirectory(mockUpdaterEnv.RollBackDir);
            }
        }
        private static Mock <T> CreateMockUpdater <T>(UpdaterEnvironment updaterEnv) where T : class, IUpdater
        {
            var mockUpdater = new Mock <T>(updaterEnv.Version, updaterEnv.BinaryDir, updaterEnv.AppDataDir, updaterEnv.RollBackDir)
            {
                CallBase = true
            };

            return(mockUpdater);
        }
        private static IUpdater CreateUpdater(Type updaterType, UpdaterEnvironment updaterEnvironment)
        {
            if (updaterEnvironment.Version == null)
            {
                return((IUpdater)Activator.CreateInstance(updaterType) !);
            }

            return((IUpdater)Activator.CreateInstance(
                       updaterType,
                       updaterEnvironment.Version,
                       updaterEnvironment.BinaryDir,
                       updaterEnvironment.AppDataDir,
                       updaterEnvironment.RollBackDir
                       ) !);
        }