diff --git a/comic/migrations/0015_auto_20160405_1126.py b/comic/migrations/0015_auto_20160405_1126.py new file mode 100644 index 0000000..af78659 --- /dev/null +++ b/comic/migrations/0015_auto_20160405_1126.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-04-05 10:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('comic', '0014_auto_20160404_1402'), + ] + + operations = [ + migrations.AlterField( + model_name='comicbook', + name='file_name', + field=models.CharField(max_length=100), + ), + ] diff --git a/comic/models.py b/comic/models.py index d1fd7cf..47c247f 100644 --- a/comic/models.py +++ b/comic/models.py @@ -71,7 +71,7 @@ class Directory(models.Model): class ComicBook(models.Model): - file_name = models.CharField(max_length=100, unique=True) + file_name = models.CharField(max_length=100, unique=False) date_added = models.DateTimeField(auto_now_add=True) directory = models.ForeignKey(Directory, blank=True, null=True) selector = models.UUIDField(unique=True, default=uuid.uuid4, db_index=True) @@ -227,39 +227,6 @@ class ComicBook(models.Model): def __str__(self): return self.name - @staticmethod - def generate_directory(user, base_dir, comic_path): - files = [] - for fn in ComicBook.get_ordered_dir_list(path.join(base_dir, comic_path)): - df = ComicBook.DirFile() - df.name = fn - if path.isdir(path.join(base_dir, comic_path, fn)): - df.isdir = True - df.icon = 'glyphicon-folder-open' - df.location = urlsafe_base64_encode(path.join(comic_path.encode(), fn.encode())) - elif fn.lower()[-4:] in ['.rar', '.zip', '.cbr', '.cbz']: - df.iscb = True - df.icon = 'glyphicon-book' - df.location = urlsafe_base64_encode(path.join(comic_path.encode(), fn.encode())) - try: - book = ComicBook.objects.get(file_name=fn) - status, _ = ComicStatus.objects.get_or_create(comic=book, user=user) - last_page = status.last_read_page - if status.unread: - df.label = 'Unread' - elif (last_page + 1) == book.page_count: - df.label = 'Read' - df.cur_page = last_page - else: - label_text = '%s/%s' % \ - (last_page + 1, book.page_count) - df.label = label_text - df.cur_page = last_page - except ComicBook.DoesNotExist: - df.label = 'Unprocessed' - files.append(df) - return files - @property def pages(self): out = [] diff --git a/comic/tests.py b/comic/tests.py index 6e45b44..d0f19e6 100644 --- a/comic/tests.py +++ b/comic/tests.py @@ -1,25 +1,30 @@ -from django.test import TestCase -from django.contrib.auth.models import User -from django.utils.http import urlsafe_base64_encode -from comic.models import ComicBook, ComicPage, Setting, ComicStatus -from os import path import os +from os import path + +from django.contrib.auth.models import User +from django.test import TestCase +from django.utils.http import urlsafe_base64_encode + +from comic.models import ComicBook, ComicPage, Setting, ComicStatus, Directory +from comic.util import generate_directory + # Create your tests here. + class ComicBookTests(TestCase): def setUp(self): + Setting(name='BASE_DIR', value=path.join(os.getcwd(), 'comic', 'test')).save() user = User(username='test') user.save() - ComicBook.process_comic_book(os.getcwd(), path.join('comic', 'test', 'test1.rar'), 'test1.rar') - book = ComicBook.process_comic_book(os.getcwd(), path.join('comic', 'test', 'test2.rar'), 'test2.rar') + ComicBook.process_comic_book('test1.rar') + book = ComicBook.process_comic_book('test2.rar') status = ComicStatus(user=user, comic=book, last_read_page=2, unread=False) status.save() - ComicBook.process_comic_book(os.getcwd(), path.join('comic', 'test', 'test4.rar'), 'test4.rar') - Setting(name='BASE_DIR', value=os.getcwd()).save() + ComicBook.process_comic_book('test4.rar') def test_comic_processing(self): book = ComicBook.objects.get(file_name='test1.rar') @@ -49,97 +54,95 @@ class ComicBookTests(TestCase): def test_get_image(self): book = ComicBook.objects.get(file_name='test1.rar') - comic_path = path.join(os.getcwd(), 'comic', 'test', 'test1.rar') - img, content_type = book.get_image(comic_path, 0) + img, content_type = book.get_image(0) self.assertEqual(content_type, 'image/jpeg') - self.assertEqual(img.read(), 'img1.jpg') + self.assertEqual(img.read(), b'img1.jpg') def test_nav_first_page_with_folder_above(self): book = ComicBook.objects.get(file_name='test1.rar') - comic_path = path.join('comic', 'test', 'test1.rar') - encoded_path = urlsafe_base64_encode(comic_path) - prev_path_encoded = urlsafe_base64_encode(path.join('comic', 'test')) - nav = book.nav(encoded_path, 0) + user = User.objects.get(username='test') + nav = book.nav(0, user) self.assertEqual(nav.next_index, 1) - self.assertEqual(nav.next_path, encoded_path) + self.assertEqual(nav.next_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.prev_index, -1) - self.assertEqual(nav.prev_path, prev_path_encoded) + self.assertEqual(nav.prev_path, '') self.assertEqual(nav.cur_index, 0) - self.assertEqual(nav.cur_path, encoded_path) + self.assertEqual(nav.cur_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.q_prev_to_directory, True) self.assertEqual(nav.q_next_to_directory, False) def test_nav_first_page_with_comic_above(self): - book = ComicBook.objects.get(file_name='test2.rar') - comic_path = path.join('comic', 'test', 'test2.rar') - encoded_path = urlsafe_base64_encode(comic_path) - prev_path_encoded = urlsafe_base64_encode(path.join('comic', 'test', 'test1.rar')) - nav = book.nav(encoded_path, 0) + prev_book = ComicBook.objects.get(file_name='test1.rar') + book = ComicBook.objects.get(file_name='test2.rar', + directory__isnull=True) + user = User.objects.get(username='test') + + nav = book.nav(0, user) self.assertEqual(nav.next_index, 1) - self.assertEqual(nav.next_path, encoded_path) - self.assertEqual(nav.prev_index, 3) - self.assertEqual(nav.prev_path, prev_path_encoded) + self.assertEqual(nav.next_path, urlsafe_base64_encode(book.selector.bytes)) + self.assertEqual(nav.prev_index, 0) + self.assertEqual(nav.prev_path, urlsafe_base64_encode(prev_book.selector.bytes)) self.assertEqual(nav.cur_index, 0) - self.assertEqual(nav.cur_path, encoded_path) + self.assertEqual(nav.cur_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.q_prev_to_directory, False) self.assertEqual(nav.q_next_to_directory, False) def test_nav_last_page_with_comic_below(self): - book = ComicBook.objects.get(file_name='test2.rar') - comic_path = path.join('comic', 'test', 'test2.rar') - encoded_path = urlsafe_base64_encode(comic_path) - next_path_encoded = urlsafe_base64_encode(path.join('comic', 'test', 'test3.rar')) - nav = book.nav(encoded_path, 3) - self.assertEqual(nav.next_index, 0) - self.assertEqual(nav.next_path, next_path_encoded) + user = User.objects.get(username='test') + book = ComicBook.objects.get(file_name='test1.rar', + directory__isnull=True) + next_book = ComicBook.objects.get(file_name='test2.rar', + directory__isnull=True) + nav = book.nav(3, user) + self.assertEqual(nav.next_index, 2) + self.assertEqual(nav.next_path, urlsafe_base64_encode(next_book.selector.bytes)) self.assertEqual(nav.prev_index, 2) - self.assertEqual(nav.prev_path, encoded_path) + self.assertEqual(nav.prev_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.cur_index, 3) - self.assertEqual(nav.cur_path, encoded_path) + self.assertEqual(nav.cur_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.q_prev_to_directory, False) self.assertEqual(nav.q_next_to_directory, False) def test_nav_last_page_with_nothing_below(self): + user = User.objects.get(username='test') book = ComicBook.objects.get(file_name='test4.rar') - comic_path = path.join('comic', 'test', 'test4.rar') - encoded_path = urlsafe_base64_encode(comic_path) - next_path_encoded = urlsafe_base64_encode(path.join('comic', 'test')) - nav = book.nav(encoded_path, 3) + nav = book.nav(3, user) self.assertEqual(nav.next_index, -1) - self.assertEqual(nav.next_path, next_path_encoded) + self.assertEqual(nav.next_path, '') self.assertEqual(nav.prev_index, 2) - self.assertEqual(nav.prev_path, encoded_path) + self.assertEqual(nav.prev_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.cur_index, 3) - self.assertEqual(nav.cur_path, encoded_path) + self.assertEqual(nav.cur_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.q_prev_to_directory, False) self.assertEqual(nav.q_next_to_directory, True) def test_nav_in_comic(self): - book = ComicBook.objects.get(file_name='test1.rar') - comic_path = path.join('comic', 'test', 'test1.rar') - encoded_path = urlsafe_base64_encode(comic_path) - nav = book.nav(encoded_path, 1) + user = User.objects.get(username='test') + book = ComicBook.objects.get(file_name='test1.rar', + directory__isnull=True) + nav = book.nav(1, user) self.assertEqual(nav.next_index, 2) - self.assertEqual(nav.next_path, encoded_path) + self.assertEqual(nav.next_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.prev_index, 0) - self.assertEqual(nav.prev_path, encoded_path) + self.assertEqual(nav.prev_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.cur_index, 1) - self.assertEqual(nav.cur_path, encoded_path) + self.assertEqual(nav.cur_path, urlsafe_base64_encode(book.selector.bytes)) self.assertEqual(nav.q_prev_to_directory, False) self.assertEqual(nav.q_next_to_directory, False) def test_generate_directory(self): - base_dir = Setting.objects.get(name='BASE_DIR').value user = User.objects.get(username='test') - folders = ComicBook.generate_directory(user, base_dir, path.join('comic', 'test')) + folders = generate_directory(user) dir1 = folders[0] self.assertEqual(dir1.name, 'test_folder') self.assertTrue(dir1.isdir) self.assertEqual(dir1.icon, 'glyphicon-folder-open') self.assertFalse(dir1.iscb) - location = urlsafe_base64_encode(path.join('comic', 'test', 'test_folder')) + d = Directory.objects.get(name='test_folder', + parent__isnull=True) + location = '/comic/{0}/'.format(urlsafe_base64_encode(d.selector.bytes).decode()) self.assertEqual(dir1.location, location) - self.assertEqual(dir1.label, '') + self.assertEqual(dir1.label, '