def test_Entry_init(self): from miniblog.models import Entry, Category from datetime import datetime # Ensure that title and text are enforced self.assertRaises(TypeError, Entry) self.assertRaises(TypeError, Entry, '') self.assertRaises(TypeError, Entry, title='') self.assertRaises(TypeError, Entry, text='') self.assertIsInstance(Entry('', ''), Entry) # Now check that category assignment works cat = Category('Test') DBSession.add(cat) entry = Entry('Test Title', 'Text', 'Test') DBSession.add(entry) DBSession.flush() self.assertEqual(entry.category, cat) # Test that entry time is set (test on equality would of course fail) self.assertLess((datetime.now() - entry.entry_time).seconds, 1) # Check title and text are correctly set on arguments entry = Entry('Title', 'Text') self.assertEqual(entry.title, 'Title') self.assertEqual(entry._text, 'Text') entry = Entry(title='Title', text='Text') self.assertEqual(entry.title, 'Title') self.assertEqual(entry._text, 'Text')
def add_entry(self): entry_id = self.request.matchdict.get("id_", 0) if entry_id: entry = DBSession.query(Entry).filter(Entry.id == entry_id).one() form_data = MultiDict({'title': entry.title, 'text': entry._text, 'category': entry.category_name}) form_data.update(self.request.session.get("edit_entry_%i_form" % entry.id, {})) else: entry = None form_data = MultiDict(self.request.session.get("add_entry_form", {})) form_data.update(self.request.POST) form = EntryForm(form_data) form.category.choices = [('', ' - None - ')] + [(name[0], name[0]) for name in get_categories()] preview = None if self.request.method == 'POST': if not form.validate(): for field, errors in form.errors.items(): for error in errors: self.request.session.flash('Field "%s" has the following error: "%s"' % (field, error)) if entry: self.request.session["edit_entry_%i_form" % entry.id] = form.data else: self.request.session["add_entry_form"] = form.data return HTTPFound(location=self.request.route_url('add_entry')) if form.submit.data: if "category" in form.data and form.data["category"]: category = DBSession.query(Category)\ .filter(Category.name == form.data["category"]).one() else: category = None if not entry: entry = Entry(form.data["title"], form.data["text"]) entry.category = category if "add_entry_form" in self.request.session: del self.request.session["add_entry_form"] DBSession.add(entry) else: if "edit_entry_%i_form" \ % entry.id in self.request.session: del self.request.session["edit_entry_%i_form" % entry.id] entry._text = form.data["text"] entry.title = form.data["title"] entry.category = category DBSession.flush() get_categories.invalidate() get_recent_posts.invalidate() return HTTPFound(location=self.request.route_url('view_entry', id_=entry.id)) if form.preview.data: preview = entry return {'form': form, 'preview': preview}
def test_Category_entries(self): from miniblog.models import Category, Entry cat = Category('Test') entry1 = Entry('Test 1', '...') entry2 = Entry('Test 2', '...') cat.entries.append(entry1) cat.entries.append(entry2) DBSession.add(cat) DBSession.flush() inserted_entry = DBSession.\ query(Entry).\ filter(Entry.title == 'Test 1').\ one() self.assertEqual(inserted_entry, entry1) self.assertEqual(inserted_entry.category, cat)