def test_index_ordering(self) -> None: """Tests Chapter.index property and how that affects ordering in Story.chapters.""" chapter1 = Chapter.new(self.teststory) chapter2 = Chapter.new(self.teststory) self.assertEqual(self.teststory.chapters[0], chapter1) self.assertEqual(self.teststory.chapters[1], chapter2) chapter1.index = 1 chapter2.index = 0 db.session.commit() self.assertEqual(self.teststory.chapters[0], chapter2) self.assertEqual(self.teststory.chapters[1], chapter1)
def test_flags(self) -> None: """Tests Chapter flag getters & setters.""" chapter = Chapter.new(self.teststory, "test") chapter.flags = 0 self.assertFalse(chapter.private) chapter.private = True self.assertTrue(chapter.private) self.assertEqual(chapter.flags, Story.Flags.PRIVATE)
def test_order_properties(self) -> None: """Tests Chapter.number, Chapter.previous, and Chapter.next properties.""" chapter1 = Chapter.new(self.teststory) chapter2 = Chapter.new(self.teststory) chapter3 = Chapter.new(self.teststory) self.teststory.private = False chapter1.private = False chapter3.private = False self.assertIsNone(chapter1.previous) self.assertEqual(chapter1.next, chapter3) self.assertEqual(chapter1.number, 1) # private chapters aren't given an order, previous, or next; they're used solely # for public chapter navigation self.assertIsNone(chapter2.previous) self.assertIsNone(chapter2.next) self.assertIsNone(chapter2.number) self.assertEqual(chapter3.previous, chapter1) self.assertIsNone(chapter3.next) self.assertEqual(chapter3.number, 2) # private stories don't have a public ordering for chapters self.teststory.private = True self.assertIsNone(chapter1.previous) self.assertIsNone(chapter1.next) self.assertIsNone(chapter1.number) self.assertIsNone(chapter2.previous) self.assertIsNone(chapter2.next) self.assertIsNone(chapter2.number) self.assertIsNone(chapter3.previous) self.assertIsNone(chapter3.next) self.assertIsNone(chapter3.number)
def test_visibility(self) -> None: """Tests chapter visibility based on privacy & NSFW flags.""" self.teststory.private = False chapter1 = Chapter.new(self.teststory, "private chapter", "Text") chapter2 = Chapter.new(self.teststory, "visible chapter", "Text") chapter2.private = False # private chapters are visible only to the author self.assertTrue(chapter1.visible(self.testuser)) self.assertFalse(chapter1.visible(self.testuser2)) # public chapters are visible to anyone self.assertTrue(chapter2.visible(self.testuser)) self.assertTrue(chapter2.visible(self.testuser2)) self.teststory.private = True # all chapters are visible only to the author for private stories self.assertTrue(chapter1.visible(self.testuser)) self.assertFalse(chapter1.visible(self.testuser2)) self.assertTrue(chapter2.visible(self.testuser)) self.assertFalse(chapter2.visible(self.testuser2))
def setUp(self) -> None: super().setUp() db.drop_all() db.create_all() self.testuser = User.register(username='******', password='******', email='*****@*****.**', birthdate=date(1997, 3, 16)) self.testuser.allow_risque = True self.testuser2 = User.register(username='******', password='******', email='*****@*****.**', birthdate=date(1997, 3, 17)) self.teststory = Story.new(self.testuser, "Hello world") self.testchapter = Chapter.new(self.teststory, None, "This is a test from Speakonia") self.testchapter.private = False db.session.commit()
def test_update(self) -> None: """Tests the Story.update function.""" story = Story.new(self.testuser, "test") # empty update has no effect self.assertEqual(len(story.update()), 0) self.assertEqual(story.title, "test") self.assertEqual(story.summary, "") self.assertTrue(story.private) self.assertTrue(story.can_comment) self.assertFalse(story.is_risque) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(title=123)), 1) self.assertEqual(story.title, "test") self.assertEqual(len(story.update(title=False)), 1) self.assertEqual(story.title, "test") self.assertEqual(len(story.update(title=15.5)), 1) self.assertEqual(story.title, "test") self.assertEqual(len(story.update(title=[])), 1) self.assertEqual(story.title, "test") self.assertEqual(len(story.update(title=[1, 2, 3])), 1) self.assertEqual(story.title, "test") self.assertEqual(len(story.update(title={})), 1) self.assertEqual(story.title, "test") self.assertEqual(len(story.update(title=" Test ")), 0) self.assertEqual(story.title, "Test") self.assertEqual(len(story.update(title=122, thumbnail=5)), 2) self.assertEqual(story.title, "Test") self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(private="hello")), 1) self.assertTrue(story.private) self.assertEqual(len(story.update(private=3)), 1) self.assertTrue(story.private) self.assertEqual(len(story.update(private=15.8)), 1) self.assertTrue(story.private) self.assertEqual(len(story.update(private="off")), 1) self.assertTrue(story.private) self.assertEqual(len(story.update(private=[])), 1) self.assertTrue(story.private) self.assertEqual(len(story.update(private={'1': 2})), 1) self.assertTrue(story.private) # cannot public a story with no chapters self.assertEqual(len(story.update(private=False)), 0) self.assertTrue(story.private) # cannot public a story with no public chapters chapter = Chapter.new(story, None, "") self.assertEqual(len(story.update(private=False)), 0) self.assertTrue(story.private) # can only public a story with public chapters with visible text chapter.update(text="Hello world", private=False) self.assertEqual(len(story.update(private=False)), 0) self.assertFalse(story.private) self.assertEqual(len(story.update(private=True)), 0) self.assertTrue(story.private) self.assertEqual(len(story.update(can_comment=1.9)), 1) self.assertTrue(story.can_comment) self.assertEqual(len(story.update(can_comment=-2)), 1) self.assertTrue(story.can_comment) self.assertEqual(len(story.update(can_comment="go")), 1) self.assertTrue(story.can_comment) self.assertEqual(len(story.update(can_comment=[True])), 1) self.assertTrue(story.can_comment) self.assertEqual(len(story.update(can_comment={})), 1) self.assertTrue(story.can_comment) self.assertEqual(len(story.update(can_comment=False)), 0) self.assertFalse(story.can_comment) self.assertEqual(len(story.update(can_comment=True)), 0) self.assertTrue(story.can_comment) self.assertEqual(len(story.update(is_risque=5)), 1) self.assertFalse(story.is_risque) self.assertEqual(len(story.update(is_risque=0.001)), 1) self.assertFalse(story.is_risque) self.assertEqual(len(story.update(is_risque="test")), 1) self.assertFalse(story.is_risque) self.assertEqual(len(story.update(is_risque=[])), 1) self.assertFalse(story.is_risque) self.assertEqual(len(story.update(is_risque={"test": 55})), 1) self.assertFalse(story.is_risque) self.assertEqual(len(story.update(is_risque=True)), 0) self.assertTrue(story.is_risque) self.assertEqual(len(story.update(is_risque=False)), 0) self.assertFalse(story.is_risque) self.assertEqual(len(story.update(thumbnail=False)), 1) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(thumbnail=125)), 1) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(thumbnail=-0.8)), 1) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(thumbnail=[])), 1) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(thumbnail={})), 1) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(thumbnail="abc")), 0) self.assertEqual(story.thumbnail.url, "abc") self.assertEqual(len(story.update(thumbnail="")), 0) self.assertEqual(story.thumbnail.url, Story.DEFAULT_THUMBNAIL_URI) self.assertEqual(len(story.update(summary=True)), 1) self.assertEqual(story.summary, "") self.assertEqual(len(story.update(summary=12)), 1) self.assertEqual(story.summary, "") self.assertEqual(len(story.update(summary=0.1)), 1) self.assertEqual(story.summary, "") self.assertEqual(len(story.update(summary=[])), 1) self.assertEqual(story.summary, "") self.assertEqual(len(story.update(summary={})), 1) self.assertEqual(story.summary, "") self.assertEqual(len(story.update(summary="foobar")), 0) self.assertEqual(story.summary, "foobar") self.assertEqual(len(story.update(summary=" hello world ! ")), 0) self.assertEqual(story.summary, "hello world !") self.assertEqual(len(story.update(summary=" ")), 0) self.assertEqual(story.summary, "")
def test_new(self) -> None: """Tests the Chapter.new class method.""" # name must be a string with at least one non-whitespace character or null self.assertRaises(ValueError, Chapter.new, self.teststory, 1.5) self.assertRaises(ValueError, Chapter.new, self.teststory, True) self.assertRaises(ValueError, Chapter.new, self.teststory, -5) self.assertRaises(ValueError, Chapter.new, self.teststory, []) self.assertRaises(ValueError, Chapter.new, self.teststory, {}) self.assertRaises(ValueError, Chapter.new, self.teststory, "") self.assertRaises(ValueError, Chapter.new, self.teststory, " ") # text must be a string self.assertRaises(ValueError, Chapter.new, self.teststory, text=None) self.assertRaises(ValueError, Chapter.new, self.teststory, text=125) self.assertRaises(ValueError, Chapter.new, self.teststory, text=False) self.assertRaises(ValueError, Chapter.new, self.teststory, text=-6.28) self.assertRaises(ValueError, Chapter.new, self.teststory, text=[]) self.assertRaises(ValueError, Chapter.new, self.teststory, text={}) # author_notes must be a string or null self.assertRaises(ValueError, Chapter.new, self.teststory, author_notes=3.6) self.assertRaises(ValueError, Chapter.new, self.teststory, author_notes=True) self.assertRaises(ValueError, Chapter.new, self.teststory, author_notes=1) self.assertRaises(ValueError, Chapter.new, self.teststory, author_notes=[]) self.assertRaises(ValueError, Chapter.new, self.teststory, author_notes={}) chapter1 = Chapter.new(self.teststory) self.assertEqual(chapter1.story_id, self.teststory.id) self.assertEqual(chapter1.story, self.teststory) self.assertEqual(chapter1.flags, Chapter.Flags.DEFAULT) self.assertIsNone(chapter1.name) self.assertIsNone(chapter1.author_notes) self.assertEqual(chapter1.text, "") self.assertEqual(chapter1.index, 0) self.assertIsNone(chapter1.number) self.assertEqual(len(chapter1.comments), 0) self.assertEqual(len(chapter1.reports), 0) self.assertEqual(chapter1.posted, chapter1.modified) chapter2 = Chapter.new(self.teststory, " Test Chapter") self.assertEqual(chapter2.story_id, self.teststory.id) self.assertEqual(chapter2.story, self.teststory) self.assertEqual(chapter2.flags, Chapter.Flags.DEFAULT) self.assertEqual(chapter2.name, "Test Chapter") self.assertIsNone(chapter2.author_notes) self.assertEqual(chapter2.text, "") self.assertEqual(chapter2.index, 1) self.assertIsNone(chapter2.number) self.assertEqual(len(chapter2.comments), 0) self.assertEqual(len(chapter2.reports), 0) self.assertEqual(chapter2.posted, chapter2.modified)
def test_update(self) -> None: """Tests the Chapter.update method.""" chapter = Chapter.new(self.teststory, None, "Text") chapter2 = Chapter.new(self.teststory, None, "Text") chapter3 = Chapter.new(self.teststory, None, "Text") chapter.private = False chapter2.private = False chapter3.private = False self.assertEqual(len(chapter.update()), 0) self.assertIsNone(chapter.name) self.assertEqual(chapter.text, "Text") self.assertEqual(chapter.index, 0) self.assertFalse(chapter.private) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(name=True)), 1) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(name=-5)), 1) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(name=123.456)), 1) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(name=[])), 1) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(name={'a': True, 'b': True})), 1) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(name="abc")), 0) self.assertEqual(chapter.name, "abc") self.assertEqual(len(chapter.update(name=" abc")), 0) self.assertEqual(chapter.name, "abc") self.assertEqual(len(chapter.update(name="")), 0) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(name=" ")), 0) self.assertIsNone(chapter.name) self.assertEqual(len(chapter.update(author_notes=False)), 1) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(author_notes=2)), 1) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(author_notes=3.6)), 1) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(author_notes=[])), 1) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(author_notes={})), 1) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(author_notes="test notes")), 0) self.assertEqual(chapter.author_notes, "test notes") self.assertEqual( len(chapter.update(author_notes="more test notes ")), 0) self.assertEqual(chapter.author_notes, "more test notes") self.assertEqual(len(chapter.update(author_notes="")), 0) self.assertIsNone(chapter.author_notes) self.assertEqual(len(chapter.update(text=True)), 1) self.assertEqual(chapter.text, "Text") self.assertEqual(len(chapter.update(text=17)), 1) self.assertEqual(chapter.text, "Text") self.assertEqual(len(chapter.update(text=-5.5)), 1) self.assertEqual(chapter.text, "Text") self.assertEqual(len(chapter.update(text=["hi", 'there'])), 1) self.assertEqual(chapter.text, "Text") self.assertEqual(len(chapter.update(text={"go": 'away'})), 1) self.assertEqual(chapter.text, "Text") self.assertEqual(len(chapter.update(text="# hello\nlolololo")), 0) self.assertEqual(chapter.text, "# hello\nlolololo") self.assertEqual(len(chapter.update(text="abc abc")), 0) self.assertEqual(chapter.text, "abc abc") self.assertEqual(len(chapter.update(text="\n\nabc\n\nabc\n\n")), 0) self.assertEqual(chapter.text, "abc\n\nabc") # chapter with no visible text must be private self.assertEqual(len(chapter.update(text="")), 0) self.assertEqual(chapter.text, "") self.assertTrue(chapter.private) self.assertEqual(len(chapter.update(text=" # \n> > - []() ")), 0) self.assertEqual(chapter.text, "# \n> > - []()") chapter.update(private=False) self.assertTrue(chapter.private) self.assertEqual(len(chapter.update(text="Text")), 0) self.assertEqual(chapter.text, "Text") self.assertTrue(chapter.private) chapter.update(private=False) self.assertFalse(chapter.private) self.assertEqual(len(chapter.update(index=False)), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index=1.5)), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index="hello world")), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index=[0, 1, 2, 'test'])), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index={})), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index=-1)), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index=3)), 1) self.assertEqual(chapter.index, 0) self.assertEqual(len(chapter.update(index=1)), 0) self.assertEqual(chapter.index, 1) self.assertEqual(chapter2.index, 0) self.assertEqual(chapter3.index, 2) self.assertEqual(len(chapter.update(index=2)), 0) self.assertEqual(chapter.index, 2) self.assertEqual(chapter2.index, 0) self.assertEqual(chapter3.index, 1) self.assertEqual(len(chapter.update(index=0)), 0) self.assertEqual(chapter.index, 0) self.assertEqual(chapter2.index, 1) self.assertEqual(chapter3.index, 2) self.assertEqual(len(chapter.update(private=0)), 1) self.assertFalse(chapter.private) self.assertEqual(len(chapter.update(private=1.5)), 1) self.assertFalse(chapter.private) self.assertEqual(len(chapter.update(private="")), 1) self.assertFalse(chapter.private) self.assertEqual(len(chapter.update(private=[55])), 1) self.assertFalse(chapter.private) self.assertEqual(len(chapter.update(private={'str': 'abc'})), 1) self.assertFalse(chapter.private) self.assertEqual(len(chapter.update(private=True)), 0) self.assertTrue(chapter.private) self.assertEqual(len(chapter.update(private=False)), 0) self.assertFalse(chapter.private) # chapter with no text must be private chapter.update(text="") self.assertEqual(len(chapter.update(private=False)), 0) self.assertTrue(chapter.private) self.assertEqual(len(chapter.update(private=True)), 0) self.assertTrue(chapter.private)