Exemplo n.º 1
0
        /// <summary>
        /// Упаковка манги.
        /// </summary>
        public virtual void Compress()
        {
            var folder = this.GetAbsoluteFolderPath();

            if (!Directory.Exists(folder))
            {
                return;
            }

            Log.Info(Strings.Mangas_Compress_Started + this.Name);
            switch (this.CompressionMode)
            {
            case Compression.CompressionMode.Manga:
                Compression.CompressManga(folder);
                break;

            case Compression.CompressionMode.Volume:
                Compression.CompressVolumes(folder);
                break;

            case Compression.CompressionMode.Chapter:
                Compression.CompressChapters(folder);
                break;

            case null:
                throw new InvalidEnumArgumentException("CompressionMode is null", -1, typeof(Compression.CompressionMode));

            default:
                throw new InvalidEnumArgumentException(nameof(CompressionMode), (int)this.CompressionMode, typeof(Compression.CompressionMode));
            }
            Log.Info(Strings.Mangas_Compress_Completed);
        }
Exemplo n.º 2
0
        [TestCase(true, false, FileShare.Read)] // Копирование и остановка, негативный кейс (заблокирован бэкап основного архива)
        public void BackupWith(bool locked, bool original, FileShare fileShare)
        {
            // Есть текстовый файл (txt), невалидный архив (cbz) и бэкап невалидного архива (cbz.dbak).
            // При попытке упаковки txt должно:
            // - упаковать только его, архивы не трогать
            // - упасть на попытке отрыть cbz, сделать его бэкап, а т.к. стандартное имя занято - сделать его в в dbak1
            // - удалить упакованный файл
            var workFolderName = TestContext.CurrentContext.Random.GetString(10);
            var workFolder     = Path.Combine(TestContext.CurrentContext.WorkDirectory, workFolderName);

            Directory.CreateDirectory(workFolder);
            var originalArchive = Path.Combine(workFolder, $"{workFolderName}.cbz");

            File.WriteAllText(originalArchive, "content");
            var backupArchive = Path.Combine(workFolder, $"{workFolderName}.cbz.dbak");

            File.WriteAllText(backupArchive, "content");

            var filePath = Path.Combine(workFolder, $"content.txt");

            File.WriteAllText(filePath, "content");

            if (locked)
            {
                File.Open(original ? originalArchive : backupArchive, FileMode.Open, FileAccess.Read, fileShare);
            }

            var compressedFiles = Compression.CompressManga(workFolder);

            // Если файлы не заняты, или заняты только бэкапы - должно работать.
            if (!locked || !original)
            {
                Assert.Contains(filePath, compressedFiles);
                Assert.AreEqual(1, compressedFiles.Count);
                Assert.IsFalse(File.Exists(filePath));
            }
            else
            {
                Assert.IsEmpty(compressedFiles);
                Assert.IsTrue(File.Exists(filePath));
            }

            Assert.IsTrue(File.Exists($"{originalArchive}.dbak"));
            // Если хватает доступа для чтения архива - делаем бэкап.
            Assert.AreEqual(fileShare == FileShare.Read, File.Exists($"{originalArchive}.dbak1"));
        }