From 92353803289c1eccf35b66ce0ebb4a4b4735efc8 Mon Sep 17 00:00:00 2001
From: "ajurna@gmail.com"
Date: Tue, 5 Apr 2016 14:34:41 +0100
Subject: [PATCH] misc fixes. also fixed tests.
---
comic/migrations/0015_auto_20160405_1126.py | 20 +++
comic/models.py | 35 +---
comic/tests.py | 172 +++++++++-----------
comic/util.py | 20 ++-
comic/views.py | 1 -
manage.py | 2 +-
6 files changed, 109 insertions(+), 141 deletions(-)
create mode 100644 comic/migrations/0015_auto_20160405_1126.py
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, '